• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# -*- coding: utf-8 -*-
2#                     The LLVM Compiler Infrastructure
3#
4# This file is distributed under the University of Illinois Open Source
5# License. See LICENSE.TXT for details.
6
7import libear
8import unittest
9
10import os.path
11import subprocess
12import json
13
14
15def run(source_dir, target_dir):
16    def execute(cmd):
17        return subprocess.check_call(cmd,
18                                     cwd=target_dir,
19                                     stdout=subprocess.PIPE,
20                                     stderr=subprocess.STDOUT)
21
22    execute(['cmake', source_dir])
23    execute(['make'])
24
25    result_file = os.path.join(target_dir, 'result.json')
26    expected_file = os.path.join(target_dir, 'expected.json')
27    execute(['intercept-build', '--cdb', result_file, './exec',
28             expected_file])
29    return (expected_file, result_file)
30
31
32class ExecAnatomyTest(unittest.TestCase):
33    def assertEqualJson(self, expected, result):
34        def read_json(filename):
35            with open(filename) as handler:
36                return json.load(handler)
37
38        lhs = read_json(expected)
39        rhs = read_json(result)
40        for item in lhs:
41            self.assertTrue(rhs.count(item))
42        for item in rhs:
43            self.assertTrue(lhs.count(item))
44
45    def test_all_exec_calls(self):
46        this_dir, _ = os.path.split(__file__)
47        source_dir = os.path.normpath(os.path.join(this_dir, '..', 'exec'))
48        with libear.TemporaryDirectory() as tmp_dir:
49            expected, result = run(source_dir, tmp_dir)
50            self.assertEqualJson(expected, result)
51