| # -*- 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) |