# -*- coding: utf-8 -*- # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception import libear import libscanbuild.clang as sut import unittest import os.path import sys 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") with open(filename, "w") as handle: handle.write("") result = sut.get_arguments( ["clang", "-c", filename, "-DNDEBUG", '-Dvar="this is it"'], tmpdir ) self.assertTrue("NDEBUG" in result) self.assertTrue('var="this is it"' in result) def test_get_clang_arguments_fails(self): 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 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")) class ClangIsCtuCapableTest(unittest.TestCase): def test_ctu_not_found(self): is_ctu = sut.is_ctu_capable("not-found-clang-extdef-mapping") self.assertFalse(is_ctu) class ClangGetTripleArchTest(unittest.TestCase): def test_arch_is_not_empty(self): arch = sut.get_triple_arch(["clang", "-E", "-"], ".") self.assertTrue(len(arch) > 0)