blob: 294d0311c52b6b4cb1dc788f4edc37793a3a04de [file] [log] [blame]
Wenzel Jakob6d6fd092015-10-01 17:34:26 +02001import sys
2import os
3import re
4import subprocess
5
6remove_unicode_marker = re.compile(r'u(\'[^\']*\')')
7remove_long_marker = re.compile(r'([0-9])L')
Wenzel Jakob607654f2015-10-13 23:58:10 +02008remove_hex = re.compile(r'0x[0-9a-fA-F]+')
Wenzel Jakob6d6fd092015-10-01 17:34:26 +02009shorten_floats = re.compile(r'([1-9][0-9]*\.[0-9]{4})[0-9]*')
10
11
12def sanitize(lines):
13 lines = lines.split('\n')
14 for i in range(len(lines)):
15 line = lines[i]
16 if line.startswith(" |"):
17 line = ""
18 line = remove_unicode_marker.sub(r'\1', line)
19 line = remove_long_marker.sub(r'\1', line)
Wenzel Jakob3b806d42015-10-11 16:29:35 +020020 line = remove_hex.sub(r'0', line)
Wenzel Jakob6d6fd092015-10-01 17:34:26 +020021 line = shorten_floats.sub(r'\1', line)
22 line = line.replace('__builtin__', 'builtins')
23 line = line.replace('example.', '')
24 line = line.replace('method of builtins.PyCapsule instance', '')
25 line = line.strip()
Wenzel Jakob607654f2015-10-13 23:58:10 +020026 if sys.platform == 'win32':
27 lower = line.lower()
28 if 'constructor' in lower or 'destructor' in lower or 'ref' in lower:
29 line = ""
Wenzel Jakob6d6fd092015-10-01 17:34:26 +020030 lines[i] = line
31
32 lines = '\n'.join(sorted([l for l in lines if l != ""]))
33
34 print('==================')
35 print(lines)
36 return lines
Wenzel Jakob38bd7112015-07-05 20:05:44 +020037
38path = os.path.dirname(__file__)
39if path != '':
40 os.chdir(path)
41
42name = sys.argv[1]
Wenzel Jakob6d6fd092015-10-01 17:34:26 +020043output_bytes = subprocess.check_output([sys.executable, name + ".py"])
44output = sanitize(output_bytes.decode('utf-8'))
45reference = sanitize(open(name + '.ref', 'r').read())
Wenzel Jakob38bd7112015-07-05 20:05:44 +020046
47if output == reference:
48 print('Test "%s" succeeded.' % name)
49 exit(0)
50else:
51 print('Test "%s" FAILED!' % name)
52 exit(-1)