This is an ongoing series of commits that are reformatting our Python code. Reformatting is done with `black`. If you end up having problems merging this commit because you have made changes to a python file, the best way to handle that is to run git checkout --ours <yourfile> and then reformat it with black. If you run into any problems, post to discourse about it and we will try to help. RFC Thread below: https://discourse.llvm.org/t/rfc-document-and-standardize-python-code-style Reviewed By: MatzeB Differential Revision: https://reviews.llvm.org/D150761
139 lines
5.1 KiB
Python
139 lines
5.1 KiB
Python
# -*- 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)
|