brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 7549a3f Raw
139 lines · python
1# -*- coding: utf-8 -*-2# 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-exception5 6import libear7from . import make_args, check_call_and_report, create_empty_file8import unittest9 10import os11import os.path12import glob13 14 15class OutputDirectoryTest(unittest.TestCase):16    @staticmethod17    def run_analyzer(outdir, args, cmd):18        return check_call_and_report(19            ["scan-build-py", "--intercept-first", "-o", outdir] + args, cmd20        )21 22    def test_regular_keeps_report_dir(self):23        with libear.TemporaryDirectory() as tmpdir:24            make = make_args(tmpdir) + ["build_regular"]25            outdir = self.run_analyzer(tmpdir, [], make)26            self.assertTrue(os.path.isdir(outdir))27 28    def test_clear_deletes_report_dir(self):29        with libear.TemporaryDirectory() as tmpdir:30            make = make_args(tmpdir) + ["build_clean"]31            outdir = self.run_analyzer(tmpdir, [], make)32            self.assertFalse(os.path.isdir(outdir))33 34    def test_clear_keeps_report_dir_when_asked(self):35        with libear.TemporaryDirectory() as tmpdir:36            make = make_args(tmpdir) + ["build_clean"]37            outdir = self.run_analyzer(tmpdir, ["--keep-empty"], make)38            self.assertTrue(os.path.isdir(outdir))39 40 41class RunAnalyzerTest(unittest.TestCase):42    @staticmethod43    def get_plist_count(directory):44        return len(glob.glob(os.path.join(directory, "report-*.plist")))45 46    def test_interposition_works(self):47        with libear.TemporaryDirectory() as tmpdir:48            make = make_args(tmpdir) + ["build_regular"]49            outdir = check_call_and_report(50                ["scan-build-py", "--plist", "-o", tmpdir, "--override-compiler"], make51            )52 53            self.assertTrue(os.path.isdir(outdir))54            self.assertEqual(self.get_plist_count(outdir), 5)55 56    def test_intercept_wrapper_works(self):57        with libear.TemporaryDirectory() as tmpdir:58            make = make_args(tmpdir) + ["build_regular"]59            outdir = check_call_and_report(60                [61                    "scan-build-py",62                    "--plist",63                    "-o",64                    tmpdir,65                    "--intercept-first",66                    "--override-compiler",67                ],68                make,69            )70 71            self.assertTrue(os.path.isdir(outdir))72            self.assertEqual(self.get_plist_count(outdir), 5)73 74    def test_intercept_library_works(self):75        with libear.TemporaryDirectory() as tmpdir:76            make = make_args(tmpdir) + ["build_regular"]77            outdir = check_call_and_report(78                ["scan-build-py", "--plist", "-o", tmpdir, "--intercept-first"], make79            )80 81            self.assertTrue(os.path.isdir(outdir))82            self.assertEqual(self.get_plist_count(outdir), 5)83 84    @staticmethod85    def compile_empty_source_file(target_dir, is_cxx):86        compiler = "$CXX" if is_cxx else "$CC"87        src_file_name = "test.cxx" if is_cxx else "test.c"88        src_file = os.path.join(target_dir, src_file_name)89        obj_file = os.path.join(target_dir, "test.o")90        create_empty_file(src_file)91        command = " ".join([compiler, "-c", src_file, "-o", obj_file])92        return ["sh", "-c", command]93 94    def test_interposition_cc_works(self):95        with libear.TemporaryDirectory() as tmpdir:96            outdir = check_call_and_report(97                ["scan-build-py", "--plist", "-o", tmpdir, "--override-compiler"],98                self.compile_empty_source_file(tmpdir, False),99            )100            self.assertEqual(self.get_plist_count(outdir), 1)101 102    def test_interposition_cxx_works(self):103        with libear.TemporaryDirectory() as tmpdir:104            outdir = check_call_and_report(105                ["scan-build-py", "--plist", "-o", tmpdir, "--override-compiler"],106                self.compile_empty_source_file(tmpdir, True),107            )108            self.assertEqual(self.get_plist_count(outdir), 1)109 110    def test_intercept_cc_works(self):111        with libear.TemporaryDirectory() as tmpdir:112            outdir = check_call_and_report(113                [114                    "scan-build-py",115                    "--plist",116                    "-o",117                    tmpdir,118                    "--override-compiler",119                    "--intercept-first",120                ],121                self.compile_empty_source_file(tmpdir, False),122            )123            self.assertEqual(self.get_plist_count(outdir), 1)124 125    def test_intercept_cxx_works(self):126        with libear.TemporaryDirectory() as tmpdir:127            outdir = check_call_and_report(128                [129                    "scan-build-py",130                    "--plist",131                    "-o",132                    tmpdir,133                    "--override-compiler",134                    "--intercept-first",135                ],136                self.compile_empty_source_file(tmpdir, True),137            )138            self.assertEqual(self.get_plist_count(outdir), 1)139