blob: 07ac4d9fb80663879ff3cd2b6470afd8693e5e2f [file] [log] [blame]
Laszlo Nagybc687582016-01-12 22:38:41 +00001# -*- 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
Laszlo Nagy8bd63e52016-04-19 12:03:03 +00007import libear
Laszlo Nagybc687582016-01-12 22:38:41 +00008import libscanbuild.clang as sut
Laszlo Nagy8bd63e52016-04-19 12:03:03 +00009import unittest
Laszlo Nagybc687582016-01-12 22:38:41 +000010import os.path
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000011import sys
Laszlo Nagybc687582016-01-12 22:38:41 +000012
13
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000014class 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
23class ClangGetArgumentsTest(unittest.TestCase):
Laszlo Nagybc687582016-01-12 22:38:41 +000024 def test_get_clang_arguments(self):
Laszlo Nagy8bd63e52016-04-19 12:03:03 +000025 with libear.TemporaryDirectory() as tmpdir:
Laszlo Nagybc687582016-01-12 22:38:41 +000026 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
Laszlo Nagy8bd63e52016-04-19 12:03:03 +000034 self.assertTrue('NDEBUG' in result)
35 self.assertTrue('var="this is it"' in result)
Laszlo Nagybc687582016-01-12 22:38:41 +000036
37 def test_get_clang_arguments_fails(self):
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000038 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'], '.')
Laszlo Nagybc687582016-01-12 22:38:41 +000044
45
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000046class ClangGetCheckersTest(unittest.TestCase):
Laszlo Nagybc687582016-01-12 22:38:41 +000047 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))
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000051 # 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]))
Laszlo Nagybc687582016-01-12 22:38:41 +000057
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))
Laszlo Nagy4f6a1752016-09-24 00:20:59 +000062 # 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'))
Gabor Horvatheb0584b2018-02-28 13:23:10 +000095
96
97class ClangIsCtuCapableTest(unittest.TestCase):
98 def test_ctu_not_found(self):
99 is_ctu = sut.is_ctu_capable('not-found-clang-func-mapping')
100 self.assertFalse(is_ctu)
101
102
103class ClangGetTripleArchTest(unittest.TestCase):
104 def test_arch_is_not_empty(self):
105 arch = sut.get_triple_arch(['clang', '-E', '-'], '.')
106 self.assertTrue(len(arch) > 0)