diff options
Diffstat (limited to 'tools/scan-build-py/tests/unit')
-rw-r--r-- | tools/scan-build-py/tests/unit/test_clang.py | 62 | ||||
-rw-r--r-- | tools/scan-build-py/tests/unit/test_report.py | 13 | ||||
-rw-r--r-- | tools/scan-build-py/tests/unit/test_runner.py | 14 |
3 files changed, 70 insertions, 19 deletions
diff --git a/tools/scan-build-py/tests/unit/test_clang.py b/tools/scan-build-py/tests/unit/test_clang.py index 04414a85b8281..eef8c26bbd19b 100644 --- a/tools/scan-build-py/tests/unit/test_clang.py +++ b/tools/scan-build-py/tests/unit/test_clang.py @@ -8,9 +8,19 @@ import libear import libscanbuild.clang as sut import unittest import os.path +import sys -class GetClangArgumentsTest(unittest.TestCase): +class ClangGetVersion(unittest.TestCase): + def test_get_version_is_not_empty(self): + self.assertTrue(sut.get_version('clang')) + + def test_get_version_throws(self): + with self.assertRaises(OSError): + sut.get_version('notexists') + + +class ClangGetArgumentsTest(unittest.TestCase): def test_get_clang_arguments(self): with libear.TemporaryDirectory() as tmpdir: filename = os.path.join(tmpdir, 'test.c') @@ -25,18 +35,60 @@ class GetClangArgumentsTest(unittest.TestCase): self.assertTrue('var="this is it"' in result) def test_get_clang_arguments_fails(self): - self.assertRaises( - Exception, sut.get_arguments, - ['clang', '-###', '-fsyntax-only', '-x', 'c', 'notexist.c'], '.') + with self.assertRaises(Exception): + sut.get_arguments(['clang', '-x', 'c', 'notexist.c'], '.') + + def test_get_clang_arguments_fails_badly(self): + with self.assertRaises(OSError): + sut.get_arguments(['notexist'], '.') -class GetCheckersTest(unittest.TestCase): +class ClangGetCheckersTest(unittest.TestCase): def test_get_checkers(self): # this test is only to see is not crashing result = sut.get_checkers('clang', []) self.assertTrue(len(result)) + # do check result types + string_type = unicode if sys.version_info < (3,) else str + for key, value in result.items(): + self.assertEqual(string_type, type(key)) + self.assertEqual(string_type, type(value[0])) + self.assertEqual(bool, type(value[1])) def test_get_active_checkers(self): # this test is only to see is not crashing result = sut.get_active_checkers('clang', []) self.assertTrue(len(result)) + # do check result types + for value in result: + self.assertEqual(str, type(value)) + + def test_is_active(self): + test = sut.is_active(['a', 'b.b', 'c.c.c']) + + self.assertTrue(test('a')) + self.assertTrue(test('a.b')) + self.assertTrue(test('b.b')) + self.assertTrue(test('b.b.c')) + self.assertTrue(test('c.c.c.p')) + + self.assertFalse(test('ab')) + self.assertFalse(test('ba')) + self.assertFalse(test('bb')) + self.assertFalse(test('c.c')) + self.assertFalse(test('b')) + self.assertFalse(test('d')) + + def test_parse_checkers(self): + lines = [ + 'OVERVIEW: Clang Static Analyzer Checkers List', + '', + 'CHECKERS:', + ' checker.one Checker One description', + ' checker.two', + ' Checker Two description'] + result = dict(sut.parse_checkers(lines)) + self.assertTrue('checker.one' in result) + self.assertEqual('Checker One description', result.get('checker.one')) + self.assertTrue('checker.two' in result) + self.assertEqual('Checker Two description', result.get('checker.two')) diff --git a/tools/scan-build-py/tests/unit/test_report.py b/tools/scan-build-py/tests/unit/test_report.py index 3f249ce2aa0c8..c82b5593e0dc7 100644 --- a/tools/scan-build-py/tests/unit/test_report.py +++ b/tools/scan-build-py/tests/unit/test_report.py @@ -146,3 +146,16 @@ class GetPrefixFromCompilationDatabaseTest(unittest.TestCase): def test_empty(self): self.assertEqual( sut.commonprefix([]), '') + +class ReportDirectoryTest(unittest.TestCase): + + # Test that successive report directory names ascend in lexicographic + # order. This is required so that report directories from two runs of + # scan-build can be easily matched up to compare results. + def test_directory_name_comparison(self): + with libear.TemporaryDirectory() as tmpdir, \ + sut.report_directory(tmpdir, False) as report_dir1, \ + sut.report_directory(tmpdir, False) as report_dir2, \ + sut.report_directory(tmpdir, False) as report_dir3: + self.assertLess(report_dir1, report_dir2) + self.assertLess(report_dir2, report_dir3) diff --git a/tools/scan-build-py/tests/unit/test_runner.py b/tools/scan-build-py/tests/unit/test_runner.py index b4730a1c5191c..2d09062233292 100644 --- a/tools/scan-build-py/tests/unit/test_runner.py +++ b/tools/scan-build-py/tests/unit/test_runner.py @@ -219,20 +219,6 @@ class AnalyzerTest(unittest.TestCase): self.assertEqual(['-DNDEBUG', '-UNDEBUG'], test(['-DNDEBUG'])) self.assertEqual(['-DSomething', '-UNDEBUG'], test(['-DSomething'])) - def test_set_file_relative_path(self): - def test(expected, input): - spy = Spy() - self.assertEqual(spy.success, - sut.set_file_path_relative(input, spy.call)) - self.assertEqual(expected, spy.arg['file']) - - test('source.c', - {'file': '/home/me/source.c', 'directory': '/home/me'}) - test('me/source.c', - {'file': '/home/me/source.c', 'directory': '/home'}) - test('../home/me/source.c', - {'file': '/home/me/source.c', 'directory': '/tmp'}) - def test_set_language_fall_through(self): def language(expected, input): spy = Spy() |