-
Notifications
You must be signed in to change notification settings - Fork 0
/
buildLauncher.py
105 lines (86 loc) · 2.72 KB
/
buildLauncher.py
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import os
import re
import sys
###
# @class BuildLauncher
# @brief Creates unit testing launcher including all Oscar tests
###
class BuildLauncher:
###
# Collects all Oscar test classes
###
def __collect(self, path):
collected = []
pattern = 'class (.*) extends UnitTestClass'
for root, dirs, files in os.walk(path):
for fileName in files:
ext = os.path.splitext(fileName)[1]
if ext == '.ts':
with open(os.path.join(root, fileName), 'r') as f:
for line in f:
outcome = re.findall(pattern, line)
for e in outcome:
collected.append(e)
return collected
###
# Runs engine to collect each class then appending it to output
# @param output Where launcher will be appended
# @param path Folder where engine can find all tests
# @param testOutput Output for oscar's outcome (console|html)
# @param maxRuntime Max runtime for each test
# @param buildFailure If true, build will return a failure code (useful for continous integration)
###
def run(self, output, path, testOutput, maxRuntime, buildFailure):
print('\nProcessing...')
collected = self.__collect(path)
print ('Collected classes:')
outcome = '\nnew TestSuite()'
for e in collected:
print('\t' + e)
outcome += '.add(new ' + e + '())'
outcome += '.run(' + str(testOutput) + ', ' + str(maxRuntime) + ', ' + buildFailure + ');\n'
with open(output, 'a') as outputFile:
outputFile.write(outcome)
print('\nDone!')
if __name__ == '__main__':
output = 'output.js'
path = '.'
testOutput = 0
maxRuntime = 30 * 1000
buildFailure = 'true'
if len(sys.argv) < 2:
# Wizard
prompt = ' > '
print('--- Auto test launcher wizard ---')
print('\nEnter js destination file (where I am going to append launcher):')
output = raw_input(prompt)
print('\nPath where I can find all your test classes: (default \'.\')')
data = raw_input(prompt)
if data != '':
path = data
print('\nWhich format for output? (0 = Console - default, 1 = HTML)')
data = raw_input(prompt)
if data == '0' or data == '1':
testOutput = data
print('\nMaximum runtime in ms? (default 30*1000ms)')
data = raw_input(prompt)
if data.isdigit():
maxRuntime = data
print('\nMust Oscar exit with failure if at least one test has failed? (y - default/n)')
data = raw_input(prompt)
if data == 'y' or data == 'n':
if data == 'y':
buildFailure = 'true'
else:
buildFailure = 'false'
else:
output = sys.argv[1]
if len(sys.argv) >= 3:
path = sys.argv[2]
if len(sys.argv) >= 4:
testOutput = sys.argv[3]
if len(sys.argv) >= 5:
maxRuntime = sys.argv[4]
if len(sys.argv) >= 6:
buildFailure = sys.argv[5]
BuildLauncher().run(output, path, testOutput, maxRuntime, buildFailure)