File: test_from_cmd.py

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (138 lines) | stat: -rw-r--r-- 5,179 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# -*- 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
from . import make_args, check_call_and_report, create_empty_file
import unittest

import os
import os.path
import glob


class OutputDirectoryTest(unittest.TestCase):
    @staticmethod
    def run_analyzer(outdir, args, cmd):
        return check_call_and_report(
            ["scan-build-py", "--intercept-first", "-o", outdir] + args, cmd
        )

    def test_regular_keeps_report_dir(self):
        with libear.TemporaryDirectory() as tmpdir:
            make = make_args(tmpdir) + ["build_regular"]
            outdir = self.run_analyzer(tmpdir, [], make)
            self.assertTrue(os.path.isdir(outdir))

    def test_clear_deletes_report_dir(self):
        with libear.TemporaryDirectory() as tmpdir:
            make = make_args(tmpdir) + ["build_clean"]
            outdir = self.run_analyzer(tmpdir, [], make)
            self.assertFalse(os.path.isdir(outdir))

    def test_clear_keeps_report_dir_when_asked(self):
        with libear.TemporaryDirectory() as tmpdir:
            make = make_args(tmpdir) + ["build_clean"]
            outdir = self.run_analyzer(tmpdir, ["--keep-empty"], make)
            self.assertTrue(os.path.isdir(outdir))


class RunAnalyzerTest(unittest.TestCase):
    @staticmethod
    def get_plist_count(directory):
        return len(glob.glob(os.path.join(directory, "report-*.plist")))

    def test_interposition_works(self):
        with libear.TemporaryDirectory() as tmpdir:
            make = make_args(tmpdir) + ["build_regular"]
            outdir = check_call_and_report(
                ["scan-build-py", "--plist", "-o", tmpdir, "--override-compiler"], make
            )

            self.assertTrue(os.path.isdir(outdir))
            self.assertEqual(self.get_plist_count(outdir), 5)

    def test_intercept_wrapper_works(self):
        with libear.TemporaryDirectory() as tmpdir:
            make = make_args(tmpdir) + ["build_regular"]
            outdir = check_call_and_report(
                [
                    "scan-build-py",
                    "--plist",
                    "-o",
                    tmpdir,
                    "--intercept-first",
                    "--override-compiler",
                ],
                make,
            )

            self.assertTrue(os.path.isdir(outdir))
            self.assertEqual(self.get_plist_count(outdir), 5)

    def test_intercept_library_works(self):
        with libear.TemporaryDirectory() as tmpdir:
            make = make_args(tmpdir) + ["build_regular"]
            outdir = check_call_and_report(
                ["scan-build-py", "--plist", "-o", tmpdir, "--intercept-first"], make
            )

            self.assertTrue(os.path.isdir(outdir))
            self.assertEqual(self.get_plist_count(outdir), 5)

    @staticmethod
    def compile_empty_source_file(target_dir, is_cxx):
        compiler = "$CXX" if is_cxx else "$CC"
        src_file_name = "test.cxx" if is_cxx else "test.c"
        src_file = os.path.join(target_dir, src_file_name)
        obj_file = os.path.join(target_dir, "test.o")
        create_empty_file(src_file)
        command = " ".join([compiler, "-c", src_file, "-o", obj_file])
        return ["sh", "-c", command]

    def test_interposition_cc_works(self):
        with libear.TemporaryDirectory() as tmpdir:
            outdir = check_call_and_report(
                ["scan-build-py", "--plist", "-o", tmpdir, "--override-compiler"],
                self.compile_empty_source_file(tmpdir, False),
            )
            self.assertEqual(self.get_plist_count(outdir), 1)

    def test_interposition_cxx_works(self):
        with libear.TemporaryDirectory() as tmpdir:
            outdir = check_call_and_report(
                ["scan-build-py", "--plist", "-o", tmpdir, "--override-compiler"],
                self.compile_empty_source_file(tmpdir, True),
            )
            self.assertEqual(self.get_plist_count(outdir), 1)

    def test_intercept_cc_works(self):
        with libear.TemporaryDirectory() as tmpdir:
            outdir = check_call_and_report(
                [
                    "scan-build-py",
                    "--plist",
                    "-o",
                    tmpdir,
                    "--override-compiler",
                    "--intercept-first",
                ],
                self.compile_empty_source_file(tmpdir, False),
            )
            self.assertEqual(self.get_plist_count(outdir), 1)

    def test_intercept_cxx_works(self):
        with libear.TemporaryDirectory() as tmpdir:
            outdir = check_call_and_report(
                [
                    "scan-build-py",
                    "--plist",
                    "-o",
                    tmpdir,
                    "--override-compiler",
                    "--intercept-first",
                ],
                self.compile_empty_source_file(tmpdir, True),
            )
            self.assertEqual(self.get_plist_count(outdir), 1)