]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tools/scan-build-py/tests/unit/test_clang.py
Vendor import of clang trunk r290819:
[FreeBSD/FreeBSD.git] / tools / scan-build-py / tests / unit / test_clang.py
1 # -*- coding: utf-8 -*-
2 #                     The LLVM Compiler Infrastructure
3 #
4 # This file is distributed under the University of Illinois Open Source
5 # License. See LICENSE.TXT for details.
6
7 import libear
8 import libscanbuild.clang as sut
9 import unittest
10 import os.path
11 import sys
12
13
14 class ClangGetVersion(unittest.TestCase):
15     def test_get_version_is_not_empty(self):
16         self.assertTrue(sut.get_version('clang'))
17
18     def test_get_version_throws(self):
19         with self.assertRaises(OSError):
20             sut.get_version('notexists')
21
22
23 class ClangGetArgumentsTest(unittest.TestCase):
24     def test_get_clang_arguments(self):
25         with libear.TemporaryDirectory() as tmpdir:
26             filename = os.path.join(tmpdir, 'test.c')
27             with open(filename, 'w') as handle:
28                 handle.write('')
29
30             result = sut.get_arguments(
31                 ['clang', '-c', filename, '-DNDEBUG', '-Dvar="this is it"'],
32                 tmpdir)
33
34             self.assertTrue('NDEBUG' in result)
35             self.assertTrue('var="this is it"' in result)
36
37     def test_get_clang_arguments_fails(self):
38         with self.assertRaises(Exception):
39             sut.get_arguments(['clang', '-x', 'c', 'notexist.c'], '.')
40
41     def test_get_clang_arguments_fails_badly(self):
42         with self.assertRaises(OSError):
43             sut.get_arguments(['notexist'], '.')
44
45
46 class ClangGetCheckersTest(unittest.TestCase):
47     def test_get_checkers(self):
48         # this test is only to see is not crashing
49         result = sut.get_checkers('clang', [])
50         self.assertTrue(len(result))
51         # do check result types
52         string_type = unicode if sys.version_info < (3,) else str
53         for key, value in result.items():
54             self.assertEqual(string_type, type(key))
55             self.assertEqual(string_type, type(value[0]))
56             self.assertEqual(bool, type(value[1]))
57
58     def test_get_active_checkers(self):
59         # this test is only to see is not crashing
60         result = sut.get_active_checkers('clang', [])
61         self.assertTrue(len(result))
62         # do check result types
63         for value in result:
64             self.assertEqual(str, type(value))
65
66     def test_is_active(self):
67         test = sut.is_active(['a', 'b.b', 'c.c.c'])
68
69         self.assertTrue(test('a'))
70         self.assertTrue(test('a.b'))
71         self.assertTrue(test('b.b'))
72         self.assertTrue(test('b.b.c'))
73         self.assertTrue(test('c.c.c.p'))
74
75         self.assertFalse(test('ab'))
76         self.assertFalse(test('ba'))
77         self.assertFalse(test('bb'))
78         self.assertFalse(test('c.c'))
79         self.assertFalse(test('b'))
80         self.assertFalse(test('d'))
81
82     def test_parse_checkers(self):
83         lines = [
84             'OVERVIEW: Clang Static Analyzer Checkers List',
85             '',
86             'CHECKERS:',
87             '  checker.one       Checker One description',
88             '  checker.two',
89             '                    Checker Two description']
90         result = dict(sut.parse_checkers(lines))
91         self.assertTrue('checker.one' in result)
92         self.assertEqual('Checker One description', result.get('checker.one'))
93         self.assertTrue('checker.two' in result)
94         self.assertEqual('Checker Two description', result.get('checker.two'))