rooibos-roku 5.9.1 → 5.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/framework/BaseTestSuite.bs +60 -11
- package/dist/lib/framework/CodeCoverage.brs +18 -14
- package/dist/lib/framework/CodeCoverageSupport.brs +3 -3
- package/dist/lib/framework/Coverage.bs +27 -9
- package/dist/lib/framework/Rooibos.bs +4 -1
- package/dist/lib/framework/TestResult.bs +4 -0
- package/dist/lib/framework/TestRunner.bs +2 -0
- package/dist/lib/rooibos/Annotation.js +73 -76
- package/dist/lib/rooibos/Annotation.js.map +1 -1
- package/dist/lib/rooibos/CodeCoverageProcessor.js +37 -43
- package/dist/lib/rooibos/CodeCoverageProcessor.js.map +1 -1
- package/dist/lib/rooibos/FileFactory.js +2 -2
- package/dist/lib/rooibos/FileFactory.js.map +1 -1
- package/dist/lib/rooibos/MockUtil.js +78 -46
- package/dist/lib/rooibos/MockUtil.js.map +1 -1
- package/dist/lib/rooibos/RooibosSession.js +25 -16
- package/dist/lib/rooibos/RooibosSession.js.map +1 -1
- package/dist/lib/rooibos/TestGroup.js +34 -16
- package/dist/lib/rooibos/TestGroup.js.map +1 -1
- package/dist/lib/rooibos/Utils.js +19 -12
- package/dist/lib/rooibos/Utils.js.map +1 -1
- package/dist/plugin.js +6 -5
- package/dist/plugin.js.map +1 -1
- package/package.json +4 -4
|
@@ -51,6 +51,7 @@ namespace rooibos
|
|
|
51
51
|
|
|
52
52
|
protected global = invalid
|
|
53
53
|
protected catchCrashes = false
|
|
54
|
+
protected throwOnFailedAssertion = false
|
|
54
55
|
|
|
55
56
|
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
56
57
|
'++ base methods to override
|
|
@@ -262,10 +263,11 @@ namespace rooibos
|
|
|
262
263
|
? ""
|
|
263
264
|
|
|
264
265
|
m.currentResult = test.result
|
|
266
|
+
m.currentResult.throwOnFailedAssertion = m.throwOnFailedAssertion
|
|
265
267
|
if m.catchCrashes and not test.noCatch and not m.noCatch
|
|
266
268
|
try
|
|
267
269
|
test.run()
|
|
268
|
-
if m.isAutoAssertingMocks = true
|
|
270
|
+
if m.isAutoAssertingMocks = true and not test.isAsync
|
|
269
271
|
m.AssertMocks()
|
|
270
272
|
m.CleanMocks()
|
|
271
273
|
m.CleanStubs()
|
|
@@ -276,7 +278,7 @@ namespace rooibos
|
|
|
276
278
|
end try
|
|
277
279
|
else
|
|
278
280
|
test.run()
|
|
279
|
-
if m.isAutoAssertingMocks = true
|
|
281
|
+
if m.isAutoAssertingMocks = true and not test.isAsync
|
|
280
282
|
m.AssertMocks()
|
|
281
283
|
m.CleanMocks()
|
|
282
284
|
m.CleanStubs()
|
|
@@ -302,12 +304,37 @@ namespace rooibos
|
|
|
302
304
|
' */
|
|
303
305
|
function fail(msg = "Error" as string) as dynamic
|
|
304
306
|
if m.currentResult.isFail
|
|
307
|
+
if m.throwOnFailedAssertion
|
|
308
|
+
throw m.currentResult.getMessage()
|
|
309
|
+
end if
|
|
305
310
|
return false
|
|
306
311
|
end if
|
|
307
312
|
m.currentResult.fail(msg, m.currentAssertLineNumber)
|
|
308
313
|
return false
|
|
309
314
|
end function
|
|
310
315
|
|
|
316
|
+
' /**
|
|
317
|
+
' * @memberof module:BaseTestSuite
|
|
318
|
+
' * @name failCrash
|
|
319
|
+
' * @function
|
|
320
|
+
' * @instance
|
|
321
|
+
' * @description Fail immediately, with the given exception
|
|
322
|
+
' * @param {Dynamic} [error] - exception to fail on
|
|
323
|
+
' * @param {Dynamic} [msg=""] - message to display in the test report
|
|
324
|
+
' * @returns {boolean} - true if failure was set, false if the test is already failed
|
|
325
|
+
' */
|
|
326
|
+
function failCrash(error as dynamic, msg = "Error" as string) as dynamic
|
|
327
|
+
if m.currentResult.isFail
|
|
328
|
+
if m.throwOnFailedAssertion
|
|
329
|
+
throw m.currentResult.getMessage()
|
|
330
|
+
end if
|
|
331
|
+
return false
|
|
332
|
+
end if
|
|
333
|
+
m.currentResult.fail(msg, m.currentAssertLineNumber)
|
|
334
|
+
m.currentResult.crash(msg, error)
|
|
335
|
+
return true
|
|
336
|
+
end function
|
|
337
|
+
|
|
311
338
|
function failBecauseOfTimeOut() as dynamic
|
|
312
339
|
if m.currentResult.isFail
|
|
313
340
|
return false
|
|
@@ -1797,8 +1824,25 @@ namespace rooibos
|
|
|
1797
1824
|
return invalid
|
|
1798
1825
|
end function
|
|
1799
1826
|
|
|
1800
|
-
function stubCall(invocation as dynamic,
|
|
1801
|
-
'
|
|
1827
|
+
function stubCall(invocation as dynamic, stubOrReturnValue = invalid as dynamic, functionName = "" as string) as object
|
|
1828
|
+
' When stubbing global functions this will be called. Other wise the test code will be updated to call m._stubCall()
|
|
1829
|
+
if type(invocation).endsWith("Function") and functionName = ""
|
|
1830
|
+
functionName = invocation.toStr().tokenize(" ").peek()
|
|
1831
|
+
else
|
|
1832
|
+
throw "Did not provide a function to be stubbed"
|
|
1833
|
+
end if
|
|
1834
|
+
|
|
1835
|
+
if not type(stubOrReturnValue).endsWith("Function")
|
|
1836
|
+
throw "Did not provide a stub function"
|
|
1837
|
+
end if
|
|
1838
|
+
|
|
1839
|
+
' Store the stub on the component scope
|
|
1840
|
+
globalAa = getGlobalAa()
|
|
1841
|
+
if type(globalAa?.__globalStubs) <> "roAssociativeArray"
|
|
1842
|
+
globalAa.__globalStubs = {}
|
|
1843
|
+
end if
|
|
1844
|
+
|
|
1845
|
+
globalAa.__globalStubs[lCase(functionName)] = stubOrReturnValue
|
|
1802
1846
|
return invalid
|
|
1803
1847
|
end function
|
|
1804
1848
|
|
|
@@ -1850,15 +1894,15 @@ namespace rooibos
|
|
|
1850
1894
|
' * @returns {Object} - mock that was wired into the real method
|
|
1851
1895
|
' */
|
|
1852
1896
|
function expectOnce(target, methodName, expectedArgs = invalid, returnValue = invalid, allowNonExistingMethods = false) as object
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1897
|
+
'HACK
|
|
1898
|
+
'HACK
|
|
1899
|
+
'HACK
|
|
1900
|
+
'HACK
|
|
1901
|
+
'HACK
|
|
1858
1902
|
' try
|
|
1859
|
-
|
|
1903
|
+
return m.mock(target, methodName, 1, expectedArgs, returnValue, allowNonExistingMethods)
|
|
1860
1904
|
' catch error
|
|
1861
|
-
|
|
1905
|
+
'bs:disable-next-line
|
|
1862
1906
|
' m.currentResult.fail("Setting up mock failed: " + error.message, m.currentAssertLineNumber)
|
|
1863
1907
|
' return false
|
|
1864
1908
|
' end try
|
|
@@ -2257,6 +2301,7 @@ namespace rooibos
|
|
|
2257
2301
|
rooibos.resetMocksByFunctionName()
|
|
2258
2302
|
end function
|
|
2259
2303
|
|
|
2304
|
+
|
|
2260
2305
|
' /**
|
|
2261
2306
|
' * @memberof module:BaseTestSuite
|
|
2262
2307
|
' * @name cleanStubs
|
|
@@ -2265,6 +2310,10 @@ namespace rooibos
|
|
|
2265
2310
|
' * @description Cleans up all tracking data associated with stubs
|
|
2266
2311
|
' */
|
|
2267
2312
|
function cleanStubs() as void
|
|
2313
|
+
' Clean up the global functions mocks as well
|
|
2314
|
+
globalAa = getGlobalAa()
|
|
2315
|
+
globalAa.__globalStubs = invalid
|
|
2316
|
+
|
|
2268
2317
|
if m.stubs = invalid
|
|
2269
2318
|
return
|
|
2270
2319
|
end if
|
|
@@ -2,33 +2,37 @@ function init()
|
|
|
2
2
|
m.resolvedMap = {}
|
|
3
3
|
m.top.observeField("entry", "onEntryChange")
|
|
4
4
|
m.top.observeField("save", "onSave")
|
|
5
|
-
|
|
5
|
+
m.results = []
|
|
6
6
|
end function
|
|
7
7
|
|
|
8
8
|
function setExpectedMap()
|
|
9
|
-
m.top.expectedMap = #EXPECTED_MAP#
|
|
9
|
+
m.top.expectedMap = "#EXPECTED_MAP#"
|
|
10
10
|
end function
|
|
11
11
|
|
|
12
12
|
function setFilePathMap()
|
|
13
|
-
m.top.filePathMap = #FILE_PATH_MAP#
|
|
13
|
+
m.top.filePathMap = "#FILE_PATH_MAP#"
|
|
14
14
|
end function
|
|
15
15
|
|
|
16
16
|
function onEntryChange()
|
|
17
|
-
entry = m.top.entry
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if lineMap = invalid
|
|
22
|
-
lineMap = {}
|
|
23
|
-
end if
|
|
24
|
-
lineMap[entry.l] = entry.r
|
|
25
|
-
|
|
26
|
-
m.resolvedMap[entry.f] = lineMap
|
|
27
|
-
end if
|
|
17
|
+
entry = m.top.entry
|
|
18
|
+
' defer till later
|
|
19
|
+
m.results.push(entry)
|
|
28
20
|
end function
|
|
29
21
|
|
|
30
22
|
function onSave()
|
|
31
23
|
? "saving data"
|
|
24
|
+
for each entry in m.results
|
|
25
|
+
if entry <> invalid
|
|
26
|
+
fileId = entry.f
|
|
27
|
+
lineMap = m.resolvedMap[fileId]
|
|
28
|
+
|
|
29
|
+
if lineMap = invalid
|
|
30
|
+
lineMap = {}
|
|
31
|
+
m.resolvedMap[fileId] = lineMap
|
|
32
|
+
end if
|
|
33
|
+
lineMap[entry.l] = entry.r
|
|
34
|
+
end if
|
|
35
|
+
end for
|
|
32
36
|
m.top.resolvedMap = m.resolvedMap
|
|
33
37
|
setExpectedMap()
|
|
34
38
|
setFilePathMap()
|
|
@@ -22,7 +22,7 @@ function RBS_ReportCodeCoverage() as void
|
|
|
22
22
|
resolvedCount = cc.resolvedMap[key].count()
|
|
23
23
|
allLinesHit += resolvedCount
|
|
24
24
|
resolvedPercent = (resolvedCount / expectedCount) * 100
|
|
25
|
-
hitFiles.push({percent:resolvedPercent, text:filename + ": " +str(resolvedPercent).trim() + "% (" + stri(resolvedCount).trim() + "/" + stri(expectedCount).trim() + ")"})
|
|
25
|
+
hitFiles.push({ percent: resolvedPercent, text: filename + ": " + str(resolvedPercent).trim() + "% (" + stri(resolvedCount).trim() + "/" + stri(expectedCount).trim() + ")" })
|
|
26
26
|
else
|
|
27
27
|
missFiles.push(filename + ": MISS!")
|
|
28
28
|
end if
|
|
@@ -41,13 +41,13 @@ function RBS_ReportCodeCoverage() as void
|
|
|
41
41
|
? "HIT FILES"
|
|
42
42
|
? "---------"
|
|
43
43
|
hitFiles.SortBy("percent")
|
|
44
|
-
for i = 0 to hitFiles.count() -1
|
|
44
|
+
for i = 0 to hitFiles.count() - 1
|
|
45
45
|
? hitFiles[i].text
|
|
46
46
|
end for
|
|
47
47
|
? ""
|
|
48
48
|
? "MISSED FILES"
|
|
49
49
|
? "------------"
|
|
50
|
-
for i = 0 to missFiles.count() -1
|
|
50
|
+
for i = 0 to missFiles.count() - 1
|
|
51
51
|
? missFiles[i]
|
|
52
52
|
end for
|
|
53
53
|
|
|
@@ -5,31 +5,46 @@ namespace rooibos.Coverage
|
|
|
5
5
|
? "There was no rooibos code coverage component - not generating coverage report"
|
|
6
6
|
return
|
|
7
7
|
end if
|
|
8
|
+
t = createObject("roTimespan")
|
|
8
9
|
? ""
|
|
9
10
|
? "...Generating code coverage report"
|
|
10
11
|
? ""
|
|
11
12
|
m.global._rbs_ccn.save = true
|
|
12
13
|
cc = m.global._rbs_ccn
|
|
14
|
+
expectedMap = cc.expectedMap
|
|
15
|
+
filePathMap = cc.filePathMap
|
|
16
|
+
resolvedMap = cc.resolvedMap
|
|
17
|
+
|
|
13
18
|
hitFiles = []
|
|
14
19
|
missFiles = []
|
|
15
20
|
allLinesCount = 0
|
|
16
21
|
allLinesHit = 0
|
|
17
|
-
for each key in
|
|
18
|
-
filename =
|
|
19
|
-
expectedCount =
|
|
22
|
+
for each key in expectedMap
|
|
23
|
+
filename = filePathMap[key]
|
|
24
|
+
expectedCount = expectedMap[key].count()
|
|
20
25
|
allLinesCount += expectedCount
|
|
21
26
|
if expectedCount > 0
|
|
22
|
-
if
|
|
23
|
-
resolvedCount =
|
|
27
|
+
if resolvedMap[key] <> invalid
|
|
28
|
+
resolvedCount = resolvedMap[key].count()
|
|
24
29
|
allLinesHit += resolvedCount
|
|
25
|
-
|
|
30
|
+
if resolvedCount = 0
|
|
31
|
+
resolvedPercent = 0
|
|
32
|
+
else
|
|
33
|
+
resolvedPercent = (resolvedCount / expectedCount) * 100
|
|
34
|
+
end if
|
|
26
35
|
hitFiles.push({ percent: resolvedPercent, text: filename + ": " + str(resolvedPercent).trim() + "% (" + stri(resolvedCount).trim() + "/" + stri(expectedCount).trim() + ")" })
|
|
27
36
|
else
|
|
28
37
|
missFiles.push(filename + ": MISS!")
|
|
29
38
|
end if
|
|
39
|
+
else
|
|
40
|
+
missFiles.push(filename + ": MISS!")
|
|
30
41
|
end if
|
|
31
42
|
end for
|
|
32
|
-
|
|
43
|
+
if allLinesHit = 0
|
|
44
|
+
allLinesPercent = 0
|
|
45
|
+
else
|
|
46
|
+
allLinesPercent = (allLinesHit / allLinesCount) * 100
|
|
47
|
+
end if
|
|
33
48
|
? ""
|
|
34
49
|
? ""
|
|
35
50
|
? "+++++++++++++++++++++++++++++++++++++++++++"
|
|
@@ -37,7 +52,7 @@ namespace rooibos.Coverage
|
|
|
37
52
|
? "+++++++++++++++++++++++++++++++++++++++++++"
|
|
38
53
|
? ""
|
|
39
54
|
? "Total Coverage: " ; str(allLinesPercent).trim() ; "% (" ; stri(allLinesHit).trim() ; "/" + stri(allLinesCount).trim() ; ")"
|
|
40
|
-
? "Files: " ;
|
|
55
|
+
? "Files: " ; resolvedMap.count(); "/" ; expectedMap.count()
|
|
41
56
|
? ""
|
|
42
57
|
? "HIT FILES"
|
|
43
58
|
? "---------"
|
|
@@ -51,7 +66,10 @@ namespace rooibos.Coverage
|
|
|
51
66
|
for i = 0 to missFiles.count() - 1
|
|
52
67
|
? missFiles[i]
|
|
53
68
|
end for
|
|
54
|
-
|
|
69
|
+
? ""
|
|
70
|
+
? "+++++++++++++++++++++++++++++++++++++++++++"
|
|
71
|
+
? "Code Coverage Report Complete"; t.totalMilliseconds(); "ms"
|
|
72
|
+
? "+++++++++++++++++++++++++++++++++++++++++++"
|
|
55
73
|
end function
|
|
56
74
|
|
|
57
75
|
function createLCovOutput()
|
|
@@ -18,7 +18,10 @@ namespace rooibos
|
|
|
18
18
|
screen.show()
|
|
19
19
|
|
|
20
20
|
m.global = screen.getGlobalNode()
|
|
21
|
-
m.global.addFields({
|
|
21
|
+
m.global.addFields({
|
|
22
|
+
"testsScene": scene
|
|
23
|
+
"_rbs_ccn": createObject("roSGNode", "CodeCoverage")' bs:disable-line
|
|
24
|
+
})
|
|
22
25
|
|
|
23
26
|
if scene.hasField("isReadyToStartTests") and scene.isReadyToStartTests = false
|
|
24
27
|
? "The scene is not ready yet - waiting for it to set isReadyToStartTests to true"
|
|
@@ -8,6 +8,7 @@ namespace rooibos
|
|
|
8
8
|
public test = invalid
|
|
9
9
|
public time = 0
|
|
10
10
|
public error = invalid
|
|
11
|
+
public throwOnFailedAssertion = false
|
|
11
12
|
|
|
12
13
|
function new(test)
|
|
13
14
|
m.test = test
|
|
@@ -38,6 +39,9 @@ namespace rooibos
|
|
|
38
39
|
m.message = message
|
|
39
40
|
end if
|
|
40
41
|
end if
|
|
42
|
+
if m.throwOnFailedAssertion
|
|
43
|
+
throw m.getMessage()
|
|
44
|
+
end if
|
|
41
45
|
end function
|
|
42
46
|
|
|
43
47
|
function crash(message as string, error)
|
|
@@ -69,6 +69,7 @@ namespace rooibos
|
|
|
69
69
|
testSuite.top = m.nodeContext.top
|
|
70
70
|
testSuite.scene = m.nodeContext.global.testsScene
|
|
71
71
|
testSuite.catchCrashes = m.config.catchCrashes
|
|
72
|
+
testSuite.throwOnFailedAssertion = m.config.throwOnFailedAssertion
|
|
72
73
|
testSuite.scene.testText = `Running Suite ${i} of ${numSuites}: ${name}`
|
|
73
74
|
m.runTestSuite(testSuite)
|
|
74
75
|
if m.stats.hasFailures = true
|
|
@@ -138,6 +139,7 @@ namespace rooibos
|
|
|
138
139
|
testSuite.top = m.nodeContext.top
|
|
139
140
|
testSuite.scene = m.nodeContext.global.testsScene
|
|
140
141
|
testSuite.catchCrashes = m.config.catchCrashes
|
|
142
|
+
testSuite.throwOnFailedAssertion = m.config.throwOnFailedAssertion
|
|
141
143
|
m.nodeContext.testSuite = testSuite
|
|
142
144
|
m.nodeTestName = nodeTestName
|
|
143
145
|
m.nodeContext.testRunner = m
|
|
@@ -95,82 +95,79 @@ class RooibosAnnotation {
|
|
|
95
95
|
(0, Diagnostics_1.diagnosticMultipleDescribeAnnotations)(file, a);
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
case AnnotationType.None:
|
|
172
|
-
default:
|
|
173
|
-
continue;
|
|
98
|
+
// Break up the annotations grouped by Describes
|
|
99
|
+
let blocks = [];
|
|
100
|
+
let currentBlock = [];
|
|
101
|
+
for (const annotation of statement.annotations) {
|
|
102
|
+
currentBlock.push(annotation);
|
|
103
|
+
if (getAnnotationType(annotation.name) === AnnotationType.Describe) {
|
|
104
|
+
blocks.push(currentBlock);
|
|
105
|
+
currentBlock = [];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Make sure to push the last block as the last annotation likely wasn't a Describe
|
|
109
|
+
if (blocks[blocks.length - 1] !== currentBlock) {
|
|
110
|
+
blocks.push(currentBlock);
|
|
111
|
+
}
|
|
112
|
+
for (const annotationBlock of blocks) {
|
|
113
|
+
// eslint-disable-next-line no-inner-declarations
|
|
114
|
+
function getAnnotationsOfType(...names) {
|
|
115
|
+
return annotationBlock.filter(a => names.includes(a.name.toLowerCase()));
|
|
116
|
+
}
|
|
117
|
+
noEarlyExit = getAnnotationsOfType(AnnotationType.NoEarlyExit).length > 0;
|
|
118
|
+
noCatch = getAnnotationsOfType(AnnotationType.NoCatch).length > 0;
|
|
119
|
+
isSolo = getAnnotationsOfType(AnnotationType.Solo).length > 0;
|
|
120
|
+
isIgnore = getAnnotationsOfType(AnnotationType.Ignore).length > 0;
|
|
121
|
+
for (const annotation of getAnnotationsOfType(AnnotationType.Async)) {
|
|
122
|
+
async = true;
|
|
123
|
+
asyncTimeout = annotation.getArguments().length === 1 ? parseInt(annotation.getArguments()[0]) : -1;
|
|
124
|
+
}
|
|
125
|
+
for (const annotation of getAnnotationsOfType(AnnotationType.NodeTest)) {
|
|
126
|
+
nodeName = annotation.getArguments()[0];
|
|
127
|
+
}
|
|
128
|
+
for (const annotation of getAnnotationsOfType(AnnotationType.Tags)) {
|
|
129
|
+
tags = annotation.getArguments().map((a) => a === null || a === void 0 ? void 0 : a.toString());
|
|
130
|
+
}
|
|
131
|
+
for (const annotation of getAnnotationsOfType(AnnotationType.BeforeEach, AnnotationType.AfterEach, AnnotationType.Setup, AnnotationType.TearDown)) {
|
|
132
|
+
testAnnotation = new RooibosAnnotation(file, annotation, getAnnotationType(annotation.name), annotation.name, annotation.name);
|
|
133
|
+
}
|
|
134
|
+
for (const annotation of getAnnotationsOfType(AnnotationType.Describe, AnnotationType.TestSuite)) {
|
|
135
|
+
const groupName = annotation.getArguments()[0];
|
|
136
|
+
blockAnnotation = new RooibosAnnotation(file, annotation, getAnnotationType(annotation.name), annotation.name, groupName, isIgnore, isSolo, null, nodeName, tags, noCatch, noEarlyExit);
|
|
137
|
+
blockAnnotation.isAsync = async;
|
|
138
|
+
blockAnnotation.asyncTimeout = asyncTimeout === -1 ? 60000 : asyncTimeout;
|
|
139
|
+
nodeName = null;
|
|
140
|
+
isSolo = false;
|
|
141
|
+
isIgnore = false;
|
|
142
|
+
async = false;
|
|
143
|
+
asyncTimeout = -1;
|
|
144
|
+
}
|
|
145
|
+
for (const annotation of getAnnotationsOfType(AnnotationType.It)) {
|
|
146
|
+
const testName = annotation.getArguments()[0];
|
|
147
|
+
if (!testName || testName.trim() === '') {
|
|
148
|
+
(0, Diagnostics_1.diagnosticNoTestNameDefined)(file, annotation);
|
|
149
|
+
}
|
|
150
|
+
let newAnnotation = new RooibosAnnotation(file, annotation, getAnnotationType(annotation.name), annotation.name, testName, isIgnore, isSolo, undefined, undefined, tags, noCatch);
|
|
151
|
+
newAnnotation.isAsync = async;
|
|
152
|
+
newAnnotation.asyncTimeout = asyncTimeout === -1 ? 2000 : asyncTimeout;
|
|
153
|
+
if (testAnnotation) {
|
|
154
|
+
(0, Diagnostics_1.diagnosticMultipleTestOnFunctionDefined)(file, newAnnotation.annotation);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
testAnnotation = newAnnotation;
|
|
158
|
+
}
|
|
159
|
+
isSolo = false;
|
|
160
|
+
isIgnore = false;
|
|
161
|
+
async = false;
|
|
162
|
+
asyncTimeout = -1;
|
|
163
|
+
}
|
|
164
|
+
for (const annotation of getAnnotationsOfType(AnnotationType.Params, AnnotationType.SoloParams, AnnotationType.IgnoreParams)) {
|
|
165
|
+
if (testAnnotation) {
|
|
166
|
+
testAnnotation.parseParams(file, annotation, getAnnotationType(annotation.name), noCatch);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
//error
|
|
170
|
+
}
|
|
174
171
|
}
|
|
175
172
|
}
|
|
176
173
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Annotation.js","sourceRoot":"","sources":["../../../src/lib/rooibos/Annotation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Annotation.js","sourceRoot":"","sources":["../../../src/lib/rooibos/Annotation.ts"],"names":[],"mappings":"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"}
|