diff --git a/infer/tests/build_systems/build_integration_tests.py b/infer/tests/build_systems/build_integration_tests.py index d6ebfddf7..db0daf0c0 100755 --- a/infer/tests/build_systems/build_integration_tests.py +++ b/infer/tests/build_systems/build_integration_tests.py @@ -24,6 +24,7 @@ from __future__ import unicode_literals import json import os +import platform import shutil import subprocess import sys @@ -473,6 +474,13 @@ class BuildIntegrationTest(unittest.TestCase): [], preprocess=preprocess) + def test_clang_component_kit_imports(self): + test('componentkit', 'component quality analyzer skips imports', + os.path.join(CODETOANALYZE_DIR, 'componentkit'), + [{'compile': ['clang', '-x', 'objective-c++', '-std=c++11', '-c', + 'TestIgnoreImports.mm'], + 'infer_args': ['--cxx', '--no-filtering']}]) + def test_pmd_xml_output(self): def pmd_check(infer_out): assert os.path.exists(os.path.join(infer_out, 'report.xml')) diff --git a/infer/tests/build_systems/codetoanalyze/componentkit/HeaderWithMutableLocalVar.h b/infer/tests/build_systems/codetoanalyze/componentkit/HeaderWithMutableLocalVar.h new file mode 100644 index 000000000..c0ccecb0e --- /dev/null +++ b/infer/tests/build_systems/codetoanalyze/componentkit/HeaderWithMutableLocalVar.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2016 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +class Foo { + public: + int foo() { + int i = 3; + return i; + } +}; diff --git a/infer/tests/build_systems/codetoanalyze/componentkit/TestIgnoreImports.mm b/infer/tests/build_systems/codetoanalyze/componentkit/TestIgnoreImports.mm new file mode 100644 index 000000000..9d08f7713 --- /dev/null +++ b/infer/tests/build_systems/codetoanalyze/componentkit/TestIgnoreImports.mm @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#include "HeaderWithMutableLocalVar.h" + +#define nil 0 + +// Mimic importing CKComponnet +@interface CKComponent +@end +@implementation CKComponent +@end + +// Mimic importing CKCompositeComponnet +@interface CKCompositeComponent : CKComponent ++ (instancetype)newWithComponent:(CKComponent*)component; +@end +@implementation CKCompositeComponent ++ (instancetype)newWithComponent:(CKComponent*)component { + return nil; +} +@end + +@interface SomeClass : CKCompositeComponent +@end +@implementation SomeClass ++ (instancetype) new { + int i; // error + return nil; +} +@end diff --git a/infer/tests/build_systems/expected_outputs/componentkit_report.json b/infer/tests/build_systems/expected_outputs/componentkit_report.json new file mode 100644 index 000000000..36a5f875b --- /dev/null +++ b/infer/tests/build_systems/expected_outputs/componentkit_report.json @@ -0,0 +1,7 @@ +[ + { + "bug_type": "MUTABLE_LOCAL_VARIABLE_IN_COMPONENT_FILE", + "file": "TestIgnoreImports.mm", + "procedure": "frontend_checks_8553f84118792da22c2edad39b882724" + } +] \ No newline at end of file