summaryrefslogtreecommitdiffstats
path: root/Tests/RunCMake/CommandLine/trace-json-v1-check.py
blob: 69dfc20b3468a7d5c9bdaafff6b936a091b17162 (plain)
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
#!/usr/bin/env python3

import argparse
import json
import os
import sys

if sys.version_info[0] >= 3:
    unicode = str

parser = argparse.ArgumentParser(description='Checks the trace output')
parser.add_argument('-e', '--expand', action='store_true')
parser.add_argument('trace', type=str, help='the trace file to check')

args = parser.parse_args()

assert os.path.exists(args.trace)

if args.expand:
    msg_args = ['STATUS', 'fff', 'fff;sss;  SPACES !!!  ', ' 42  space in string!', '  SPACES !!!  ']
else:
    msg_args = ['STATUS', 'fff', '${ASDF}', ' ${FOO} ${BAR}', '  SPACES !!!  ']

required_traces = [
    {
        'args': ['STATUS', 'JSON-V1 str', 'spaces'],
        'cmd': 'message',
    },
    {
        'args': ['ASDF', 'fff', 'sss', '  SPACES !!!  '],
        'cmd': 'set',
    },
    {
        'args': ['FOO', '42'],
        'cmd': 'set',
    },
    {
        'args': ['BAR', ' space in string!'],
        'cmd': 'set',
    },
    {
        'args': msg_args,
        'cmd': 'message',
    },
]

with open(args.trace, 'r') as fp:
    # Check for version (must be the first document)
    vers = json.loads(fp.readline())
    assert sorted(vers.keys()) == ['version']
    assert sorted(vers['version'].keys()) == ['major', 'minor']
    assert vers['version']['major'] == 1
    assert vers['version']['minor'] == 0

    for i in fp.readlines():
        line = json.loads(i)
        assert sorted(line.keys()) == ['args', 'cmd', 'file', 'line']
        assert isinstance(line['args'], list)
        assert isinstance(line['cmd'], unicode)
        assert isinstance(line['file'], unicode)
        assert isinstance(line['line'], int)

        for j in required_traces:
            if j['cmd'] == line['cmd'] and j['args'] == line['args']:
                j['found'] = True

assert all([x.get('found', False) == True for x in required_traces])