rooibos-roku 5.10.0 → 5.12.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 +48 -4
- package/dist/lib/framework/CodeCoverage.brs +18 -14
- package/dist/lib/framework/CodeCoverageSupport.brs +3 -3
- package/dist/lib/framework/Coverage.bs +57 -20
- package/dist/lib/framework/Rooibos.bs +7 -2
- package/dist/lib/framework/TestResult.bs +1 -1
- package/dist/lib/framework/TestRunner.bs +8 -4
- package/dist/lib/rooibos/Annotation.js +73 -76
- package/dist/lib/rooibos/Annotation.js.map +1 -1
- package/dist/lib/rooibos/CodeCoverageProcessor.js +43 -44
- 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 +24 -16
- package/dist/lib/rooibos/RooibosSession.js.map +1 -1
- package/dist/lib/rooibos/TestGroup.js +29 -11
- package/dist/lib/rooibos/TestGroup.js.map +1 -1
- package/dist/lib/rooibos/Utils.js +19 -1
- package/dist/lib/rooibos/Utils.js.map +1 -1
- package/dist/plugin.js +8 -5
- package/dist/plugin.js.map +1 -1
- package/package.json +2 -2
|
@@ -267,7 +267,7 @@ namespace rooibos
|
|
|
267
267
|
if m.catchCrashes and not test.noCatch and not m.noCatch
|
|
268
268
|
try
|
|
269
269
|
test.run()
|
|
270
|
-
if m.isAutoAssertingMocks = true
|
|
270
|
+
if m.isAutoAssertingMocks = true and not test.isAsync
|
|
271
271
|
m.AssertMocks()
|
|
272
272
|
m.CleanMocks()
|
|
273
273
|
m.CleanStubs()
|
|
@@ -278,7 +278,7 @@ namespace rooibos
|
|
|
278
278
|
end try
|
|
279
279
|
else
|
|
280
280
|
test.run()
|
|
281
|
-
if m.isAutoAssertingMocks = true
|
|
281
|
+
if m.isAutoAssertingMocks = true and not test.isAsync
|
|
282
282
|
m.AssertMocks()
|
|
283
283
|
m.CleanMocks()
|
|
284
284
|
m.CleanStubs()
|
|
@@ -313,6 +313,28 @@ namespace rooibos
|
|
|
313
313
|
return false
|
|
314
314
|
end function
|
|
315
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
|
+
|
|
316
338
|
function failBecauseOfTimeOut() as dynamic
|
|
317
339
|
if m.currentResult.isFail
|
|
318
340
|
return false
|
|
@@ -1802,8 +1824,25 @@ namespace rooibos
|
|
|
1802
1824
|
return invalid
|
|
1803
1825
|
end function
|
|
1804
1826
|
|
|
1805
|
-
function stubCall(invocation as dynamic,
|
|
1806
|
-
'
|
|
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
|
|
1807
1846
|
return invalid
|
|
1808
1847
|
end function
|
|
1809
1848
|
|
|
@@ -2262,6 +2301,7 @@ namespace rooibos
|
|
|
2262
2301
|
rooibos.resetMocksByFunctionName()
|
|
2263
2302
|
end function
|
|
2264
2303
|
|
|
2304
|
+
|
|
2265
2305
|
' /**
|
|
2266
2306
|
' * @memberof module:BaseTestSuite
|
|
2267
2307
|
' * @name cleanStubs
|
|
@@ -2270,6 +2310,10 @@ namespace rooibos
|
|
|
2270
2310
|
' * @description Cleans up all tracking data associated with stubs
|
|
2271
2311
|
' */
|
|
2272
2312
|
function cleanStubs() as void
|
|
2313
|
+
' Clean up the global functions mocks as well
|
|
2314
|
+
globalAa = getGlobalAa()
|
|
2315
|
+
globalAa.__globalStubs = invalid
|
|
2316
|
+
|
|
2273
2317
|
if m.stubs = invalid
|
|
2274
2318
|
return
|
|
2275
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,10 +66,13 @@ 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
|
-
function createLCovOutput()
|
|
75
|
+
function createLCovOutput(logToConsole = true as boolean)
|
|
58
76
|
? "Generating lcov.info file..."
|
|
59
77
|
|
|
60
78
|
cc = m.global._rbs_ccn
|
|
@@ -62,9 +80,10 @@ namespace rooibos.Coverage
|
|
|
62
80
|
filePathMap = cc.filePathMap
|
|
63
81
|
resolvedMap = cc.resolvedMap
|
|
64
82
|
|
|
65
|
-
|
|
83
|
+
results = []
|
|
66
84
|
|
|
67
85
|
for each module in filePathMap.items()
|
|
86
|
+
buffer = ""
|
|
68
87
|
moduleNumber = module.key
|
|
69
88
|
filePath = module.value
|
|
70
89
|
packageName = "."
|
|
@@ -72,33 +91,51 @@ namespace rooibos.Coverage
|
|
|
72
91
|
relativePath = filePath.replace("pkg:", packageName)
|
|
73
92
|
sanitizedPath = relativePath.replace("\\", "/")
|
|
74
93
|
|
|
75
|
-
buffer
|
|
76
|
-
buffer
|
|
94
|
+
buffer += "TN:" + chr(10)
|
|
95
|
+
buffer += "SF:" + sanitizedPath + chr(10)
|
|
77
96
|
|
|
78
97
|
for each expected in expectedMap[moduleNumber]
|
|
79
|
-
lineNumber = expected
|
|
98
|
+
lineNumber = val(expected)
|
|
80
99
|
SHIFT = 1
|
|
81
100
|
|
|
82
|
-
if resolvedMap[moduleNumber] <> invalid and resolvedMap[moduleNumber].doesExist(
|
|
83
|
-
buffer
|
|
101
|
+
if resolvedMap[moduleNumber] <> invalid and resolvedMap[moduleNumber].doesExist(expected)
|
|
102
|
+
buffer += "DA:" + str(lineNumber + SHIFT).trim() + "," + str(resolvedMap[moduleNumber][expected]).trim() + chr(10)
|
|
84
103
|
else
|
|
85
|
-
buffer
|
|
104
|
+
buffer += "DA:" + str(lineNumber + SHIFT).trim() + ",0" + chr(10)
|
|
86
105
|
end if
|
|
87
106
|
end for
|
|
88
107
|
|
|
89
|
-
buffer
|
|
108
|
+
buffer += "LF:" + str(expectedMap[moduleNumber].count()).trim() + chr(10)
|
|
109
|
+
|
|
110
|
+
if resolvedMap[moduleNumber] <> invalid
|
|
111
|
+
buffer += "LH:" + str(resolvedMap[moduleNumber].count()).trim() + chr(10)
|
|
112
|
+
else
|
|
113
|
+
buffer += "LH:0" + chr(10)
|
|
114
|
+
end if
|
|
115
|
+
|
|
116
|
+
buffer += "end_of_record"
|
|
117
|
+
if logToConsole
|
|
118
|
+
? buffer
|
|
119
|
+
' When logging to the console it is very possible to flood the buffer and cause the application to exit.
|
|
120
|
+
' Sleep for a short amount of time so as to give console scrapers time to empty the buffer
|
|
121
|
+
sleep(30)
|
|
122
|
+
else
|
|
123
|
+
results.push(buffer)
|
|
124
|
+
end if
|
|
90
125
|
end for
|
|
91
|
-
|
|
126
|
+
|
|
127
|
+
return results.join(chr(10))
|
|
92
128
|
end function
|
|
93
129
|
|
|
94
130
|
function printLCovInfo()
|
|
131
|
+
|
|
95
132
|
?
|
|
96
133
|
? "+++++++++++++++++++++++++++++++++++++++++++"
|
|
97
134
|
? "LCOV.INFO FILE"
|
|
98
135
|
? "+++++++++++++++++++++++++++++++++++++++++++"
|
|
99
136
|
?
|
|
100
137
|
? "+-=-coverage:start"
|
|
101
|
-
|
|
138
|
+
rooibos.coverage.createLCovOutput()
|
|
102
139
|
? "+-=-coverage:end"
|
|
103
140
|
end function
|
|
104
141
|
|
|
@@ -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"
|
|
@@ -31,7 +34,9 @@ namespace rooibos
|
|
|
31
34
|
|
|
32
35
|
if runner.config.keepAppOpen = false
|
|
33
36
|
? "keepAppOpen is false; exiting Rooibos"
|
|
34
|
-
|
|
37
|
+
' End statement will also exit the caller of this function
|
|
38
|
+
' leading to an instant exit of the application
|
|
39
|
+
end
|
|
35
40
|
end if
|
|
36
41
|
end if
|
|
37
42
|
|
|
@@ -111,9 +111,7 @@ namespace rooibos
|
|
|
111
111
|
}
|
|
112
112
|
m.nodeContext.global.testsScene.rooibosTestResult = rooibosResult
|
|
113
113
|
|
|
114
|
-
|
|
115
|
-
if rooibos.common.isFunction(rooibos.Coverage.reportCodeCoverage)
|
|
116
|
-
'bs:disable-next-line
|
|
114
|
+
if m.config.isRecordingCodeCoverage
|
|
117
115
|
rooibos.Coverage.reportCodeCoverage()
|
|
118
116
|
|
|
119
117
|
if m.config.printLcov = true
|
|
@@ -252,7 +250,13 @@ namespace rooibos
|
|
|
252
250
|
timeout = testSuite.asyncTimeout = invalid ? 60000 : testSuite.asyncTimeout
|
|
253
251
|
|
|
254
252
|
? "Waiting max " timeout "ms for the test suite to finish"
|
|
255
|
-
|
|
253
|
+
t = createObject("roTimespan")
|
|
254
|
+
while node.rooibosSuiteFinished = false
|
|
255
|
+
m.wait(10)
|
|
256
|
+
if t.totalMilliseconds() >= timeout
|
|
257
|
+
exit while
|
|
258
|
+
end if
|
|
259
|
+
end while
|
|
256
260
|
end if
|
|
257
261
|
end if
|
|
258
262
|
nodeResults = node.asyncRooibosTestResult
|
|
@@ -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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"}
|