blob: 80ce61a1fab17473d699963db1b19dfccdbdc6d5 [file] [log] [blame]
Laszlo Nagybc687582016-01-12 22:38:41 +00001# -*- coding: utf-8 -*-
Chandler Carruth2946cd72019-01-19 08:50:56 +00002# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
3# See https://llvm.org/LICENSE.txt for license information.
4# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Laszlo Nagybc687582016-01-12 22:38:41 +00005
Laszlo Nagy8bd63e52016-04-19 12:03:03 +00006import libear
Laszlo Nagybc687582016-01-12 22:38:41 +00007import libscanbuild.clang as sut
Laszlo Nagy8bd63e52016-04-19 12:03:03 +00008import unittest
Laszlo Nagybc687582016-01-12 22:38:41 +00009import os.path
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000010import sys
Laszlo Nagybc687582016-01-12 22:38:41 +000011
12
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000013class ClangGetVersion(unittest.TestCase):
14 def test_get_version_is_not_empty(self):
15 self.assertTrue(sut.get_version('clang'))
16
17 def test_get_version_throws(self):
18 with self.assertRaises(OSError):
19 sut.get_version('notexists')
20
21
22class ClangGetArgumentsTest(unittest.TestCase):
Laszlo Nagybc687582016-01-12 22:38:41 +000023 def test_get_clang_arguments(self):
Laszlo Nagy8bd63e52016-04-19 12:03:03 +000024 with libear.TemporaryDirectory() as tmpdir:
Laszlo Nagybc687582016-01-12 22:38:41 +000025 filename = os.path.join(tmpdir, 'test.c')
26 with open(filename, 'w') as handle:
27 handle.write('')
28
29 result = sut.get_arguments(
30 ['clang', '-c', filename, '-DNDEBUG', '-Dvar="this is it"'],
31 tmpdir)
32
Laszlo Nagy8bd63e52016-04-19 12:03:03 +000033 self.assertTrue('NDEBUG' in result)
34 self.assertTrue('var="this is it"' in result)
Laszlo Nagybc687582016-01-12 22:38:41 +000035
36 def test_get_clang_arguments_fails(self):
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000037 with self.assertRaises(Exception):
38 sut.get_arguments(['clang', '-x', 'c', 'notexist.c'], '.')
39
40 def test_get_clang_arguments_fails_badly(self):
41 with self.assertRaises(OSError):
42 sut.get_arguments(['notexist'], '.')
Laszlo Nagybc687582016-01-12 22:38:41 +000043
44
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000045class ClangGetCheckersTest(unittest.TestCase):
Laszlo Nagybc687582016-01-12 22:38:41 +000046 def test_get_checkers(self):
47 # this test is only to see is not crashing
48 result = sut.get_checkers('clang', [])
49 self.assertTrue(len(result))
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000050 # do check result types
51 string_type = unicode if sys.version_info < (3,) else str
52 for key, value in result.items():
53 self.assertEqual(string_type, type(key))
54 self.assertEqual(string_type, type(value[0]))
55 self.assertEqual(bool, type(value[1]))
Laszlo Nagybc687582016-01-12 22:38:41 +000056
57 def test_get_active_checkers(self):
58 # this test is only to see is not crashing
59 result = sut.get_active_checkers('clang', [])
60 self.assertTrue(len(result))
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000061 # do check result types
62 for value in result:
63 self.assertEqual(str, type(value))
64
65 def test_is_active(self):
66 test = sut.is_active(['a', 'b.b', 'c.c.c'])
67
68 self.assertTrue(test('a'))
69 self.assertTrue(test('a.b'))
70 self.assertTrue(test('b.b'))
71 self.assertTrue(test('b.b.c'))
72 self.assertTrue(test('c.c.c.p'))
73
74 self.assertFalse(test('ab'))
75 self.assertFalse(test('ba'))
76 self.assertFalse(test('bb'))
77 self.assertFalse(test('c.c'))
78 self.assertFalse(test('b'))
79 self.assertFalse(test('d'))
80
81 def test_parse_checkers(self):
82 lines = [
83 'OVERVIEW: Clang Static Analyzer Checkers List',
84 '',
85 'CHECKERS:',
86 ' checker.one Checker One description',
87 ' checker.two',
88 ' Checker Two description']
89 result = dict(sut.parse_checkers(lines))
90 self.assertTrue('checker.one' in result)
91 self.assertEqual('Checker One description', result.get('checker.one'))
92 self.assertTrue('checker.two' in result)
93 self.assertEqual('Checker Two description', result.get('checker.two'))
Ilya Biryukov8b9b3bd2018-03-01 14:54:16 +000094
95
96class ClangIsCtuCapableTest(unittest.TestCase):
97 def test_ctu_not_found(self):
Rafael Stahl8c487052019-01-10 17:44:04 +000098 is_ctu = sut.is_ctu_capable('not-found-clang-extdef-mapping')
Ilya Biryukov8b9b3bd2018-03-01 14:54:16 +000099 self.assertFalse(is_ctu)
100
101
102class ClangGetTripleArchTest(unittest.TestCase):
103 def test_arch_is_not_empty(self):
104 arch = sut.get_triple_arch(['clang', '-E', '-'], '.')
105 self.assertTrue(len(arch) > 0)