# -*- 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 unittest import os.path import subprocess import json def run(source_dir, target_dir): def execute(cmd): return subprocess.check_call(cmd, cwd=target_dir, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) execute(['cmake', source_dir]) execute(['make']) result_file = os.path.join(target_dir, 'result.json') expected_file = os.path.join(target_dir, 'expected.json') execute(['intercept-build', '--cdb', result_file, './exec', expected_file]) return (expected_file, result_file) class ExecAnatomyTest(unittest.TestCase): def assertEqualJson(self, expected, result): def read_json(filename): with open(filename) as handler: return json.load(handler) lhs = read_json(expected) rhs = read_json(result) for item in lhs: self.assertTrue(rhs.count(item)) for item in rhs: self.assertTrue(lhs.count(item)) def test_all_exec_calls(self): this_dir, _ = os.path.split(__file__) source_dir = os.path.abspath(os.path.join(this_dir, '..', 'exec')) with libear.TemporaryDirectory() as tmp_dir: expected, result = run(source_dir, tmp_dir) self.assertEqualJson(expected, result)