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 7import libear 8import libscanbuild.clang as sut 9import unittest 10import os.path 11import sys 12 13 14class 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): 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 46class 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')) 95 96 97class ClangIsCtuCapableTest(unittest.TestCase): 98 def test_ctu_not_found(self): 99 is_ctu = sut.is_ctu_capable('not-found-clang-extdef-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) 107