-
Notifications
You must be signed in to change notification settings - Fork 4
/
karma-qunit_0.1.7.patch
199 lines (185 loc) · 6.6 KB
/
karma-qunit_0.1.7.patch
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
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
--- old/contrail-webui-third-party/node_modules/karma-qunit/lib/adapter.js 2015-11-03 14:33:59.000000000 -0800
+++ new/contrail-webui-third-party/node_modules/karma-qunit/lib/adapter.js 2015-11-03 14:31:05.000000000 -0800
@@ -14,91 +14,125 @@
return config
}
-function createQUnitStartFn (tc, runnerPassedIn) { // eslint-disable-line no-unused-vars
+ /**
+ * Additional Parameters to support running multiple tests in a single karma run
+ * @param tc (window.__karma__ )
+ * @param defObj (A promise that will resolve once all tests in a test file is executed.)
+ * @param loadRunner (Set to true when Karma is called for first time)
+ * @param runnerPassedIn
+ * @returns {Function}
+ */
+function createQUnitStartFn (tc, defObj, loadRunner, runnerPassedIn) { // eslint-disable-line no-unused-vars
return function () {
var FIXTURE_ID = 'qunit-fixture'
var runner = runnerPassedIn || window.QUnit
- var totalNumberOfTest = 0
+ var totalNumberOfTest = ifNull(window.QUnit.config.totalNumberOfTest, 0)
var timer = null
var testResult = {}
var supportsTestTracking = false
- if (runner.begin) {
- runner.begin(function (args) {
- if (args && typeof args.totalTests === 'number') {
- tc.info({ total: args.totalTests })
- supportsTestTracking = true
- }
- })
- }
+ if (loadRunner == undefined) loadRunner = true
- runner.done(function () {
- if (!supportsTestTracking) {
- tc.info({ total: totalNumberOfTest })
+ /**
+ * when loadRunner is set, test is running for the first time.
+ * set all the required CB that needs to be set only once in running life cycle.
+ */
+ if (loadRunner) {
+
+ if (runner.begin) {
+ runner.begin(function (args) {
+ if (args && typeof args.totalTests === 'number') {
+ tc.info({ total: args.totalTests})
+ supportsTestTracking = true
+ }
+ })
}
- tc.complete({
- coverage: window.__coverage__
+ runner.done(function () {
+ if (!supportsTestTracking) {
+ tc.info({ total: totalNumberOfTest })
+ }
+ // This will be taken care out side.
+ //tc.complete({
+ // coverage: window.__coverage__
+ //})
+ window.QUnit.config.totalNumberOfTest = totalNumberOfTest
})
- })
- runner.testStart(function (test) {
- totalNumberOfTest += 1
- timer = new Date().getTime()
- testResult = { success: true, errors: [] }
-
- // create a qunit-fixture element to match behaviour of regular qunit
- // runner. The fixture is only removed at the start of a subsequent test
- // so it can be inspected after a test run.
- var fixture = document.getElementById(FIXTURE_ID)
- if (fixture) {
- fixture.parentNode.removeChild(fixture)
- }
- fixture = document.createElement('div')
- fixture.id = FIXTURE_ID
- // style to match qunit runner's CSS
- fixture.style.position = 'absolute'
- fixture.style.left = '-10000px'
- fixture.style.top = '-10000px'
- fixture.style.width = '1000px'
- fixture.style.height = '1000px'
- document.body.appendChild(fixture)
- })
+ runner.testStart(function (test) {
+ totalNumberOfTest += 1
+ timer = new Date().getTime()
+ testResult = { success: true, errors: [] }
+
+ // create a qunit-fixture element to match behaviour of regular qunit
+ // runner. The fixture is only removed at the start of a subsequent test
+ // so it can be inspected after a test run.
+ var fixture = document.getElementById(FIXTURE_ID)
+ if (fixture) {
+ fixture.parentNode.removeChild(fixture)
+ }
+ fixture = document.createElement('div')
+ fixture.id = FIXTURE_ID
+ // style to match qunit runner's CSS
+ fixture.style.position = 'absolute'
+ fixture.style.left = '-10000px'
+ fixture.style.top = '-10000px'
+ fixture.style.width = '1000px'
+ fixture.style.height = '1000px'
+ document.body.appendChild(fixture)
+ })
- runner.log(function (details) {
- if (!details.result) {
- var msg = ''
+ runner.log(function (details) {
+ if (!details.result) {
+ var msg = ''
+
+ if (details.message) {
+ msg += details.message + '\n'
+ }
+
+ if (typeof details.expected !== 'undefined') {
+ msg += 'Expected: ' + details.expected + '\n' + 'Actual: ' + details.actual + '\n'
+ }
+
+ if (details.source) {
+ msg += details.source + '\n'
+ }
- if (details.message) {
- msg += details.message + '\n'
+ testResult.success = false
+ testResult.errors.push(msg)
}
+ })
- if (typeof details.expected !== 'undefined') {
- msg += 'Expected: ' + details.expected + '\n' + 'Actual: ' + details.actual + '\n'
+ runner.testDone(function (test) {
+ var result = {
+ description: test.name,
+ suite: test.module && [test.module] || [],
+ success: testResult.success,
+ log: testResult.errors || [],
+ time: new Date().getTime() - timer
}
- if (details.source) {
- msg += details.source + '\n'
- }
+ tc.result(result)
+ })
- testResult.success = false
- testResult.errors.push(msg)
- }
- })
+ //Load the QUnit only after the test page has the AsyncTest regiestered. for safety adding setTimeout
+ setTimeout(function() {
+ runner.load()
+ }, 50)
- runner.testDone(function (test) {
- var result = {
- description: test.name,
- suite: test.module && [test.module] || [],
- success: testResult.success,
- log: testResult.errors || [],
- time: new Date().getTime() - timer
- }
+ }
+
+ // we need only 2 done callbacks totaly. pop last one if there's already 2
+ // before pushing new one.
+ if (runner.config.callbacks.done.length > 1) {
+ runner.config.callbacks.done.pop();
+ }
- tc.result(result)
+ // instead of resolving the defObj in the initial done CB, have a second CB pushed with defObj
+ runner.done(function (details) {
+ if (defObj) defObj.resolve()
})
- runner.load()
runner.start()
}
}
@@ -117,5 +151,7 @@
window.detachEvent('onload', window.QUnit.load);
}
-window.__karma__.start = createQUnitStartFn(window.__karma__);
+window.__karma__.start = function(defObj, loadRunner){
+ return createQUnitStartFn(window.__karma__, defObj, loadRunner);
+}
})(window);