OLD | NEW |
1 // extension_apitest.js | 1 // extension_apitest.js |
2 // mini-framework for ExtensionApiTest browser tests | 2 // mini-framework for ExtensionApiTest browser tests |
3 | 3 |
4 var chrome = chrome || {}; | 4 var chrome = chrome || {}; |
5 (function() { | 5 (function() { |
6 chrome.test = chrome.test || {}; | 6 chrome.test = chrome.test || {}; |
7 | 7 |
8 chrome.test.tests = chrome.test.tests || []; | 8 chrome.test.tests = chrome.test.tests || []; |
9 | 9 |
10 var completed = false; | 10 var completed = false; |
(...skipping 30 matching lines...) Expand all Loading... |
41 complete(); | 41 complete(); |
42 }; | 42 }; |
43 | 43 |
44 function allTestsSucceeded() { | 44 function allTestsSucceeded() { |
45 console.log("All tests succeeded"); | 45 console.log("All tests succeeded"); |
46 if (completed) throw "completed"; | 46 if (completed) throw "completed"; |
47 | 47 |
48 chrome.test.notifyPass(); | 48 chrome.test.notifyPass(); |
49 complete(); | 49 complete(); |
50 } | 50 } |
51 | 51 |
52 var pendingCallbacks = 0; | 52 var pendingCallbacks = 0; |
53 | 53 |
54 function callbackAdded() { | 54 chrome.test.callbackAdded = function () { |
55 pendingCallbacks++; | 55 pendingCallbacks++; |
56 }; | |
57 | 56 |
58 function callbackCompleted() { | 57 return function() { |
59 pendingCallbacks--; | 58 pendingCallbacks--; |
60 if (pendingCallbacks == 0) { | 59 if (pendingCallbacks == 0) { |
61 chrome.test.succeed(); | 60 chrome.test.succeed(); |
| 61 } |
62 } | 62 } |
63 }; | 63 }; |
64 | 64 |
65 chrome.test.runNextTest = function() { | 65 chrome.test.runNextTest = function() { |
66 chrome.test.assertEq(pendingCallbacks, 0); | 66 chrome.test.assertEq(pendingCallbacks, 0); |
67 lastTest = currentTest; | 67 lastTest = currentTest; |
68 currentTest = chrome.test.tests.shift(); | 68 currentTest = chrome.test.tests.shift(); |
69 if (!currentTest) { | 69 if (!currentTest) { |
70 allTestsSucceeded(); | 70 allTestsSucceeded(); |
71 return; | 71 return; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 chrome.test.fail(msg); | 141 chrome.test.fail(msg); |
142 } | 142 } |
143 }; | 143 }; |
144 | 144 |
145 // Wrapper for generating test functions, that takes care of calling | 145 // Wrapper for generating test functions, that takes care of calling |
146 // assertNoLastError() and (optionally) succeed() for you. | 146 // assertNoLastError() and (optionally) succeed() for you. |
147 chrome.test.callback = function(func, expectedError) { | 147 chrome.test.callback = function(func, expectedError) { |
148 if (func) { | 148 if (func) { |
149 chrome.test.assertEq(typeof(func), 'function'); | 149 chrome.test.assertEq(typeof(func), 'function'); |
150 } | 150 } |
151 callbackAdded(); | 151 var callbackCompleted = chrome.test.callbackAdded(); |
152 | 152 |
153 return function() { | 153 return function() { |
154 if (expectedError == null) { | 154 if (expectedError == null) { |
155 chrome.test.assertNoLastError(); | 155 chrome.test.assertNoLastError(); |
156 } else { | 156 } else { |
157 chrome.test.assertEq(typeof(expectedError), 'string'); | 157 chrome.test.assertEq(typeof(expectedError), 'string'); |
158 chrome.test.assertEq(expectedError, chrome.extension.lastError.message); | 158 chrome.test.assertEq(expectedError, chrome.extension.lastError.message); |
159 } | 159 } |
160 | 160 |
161 if (func) { | 161 if (func) { |
162 safeFunctionApply(func, arguments); | 162 safeFunctionApply(func, arguments); |
163 } | 163 } |
164 | 164 |
165 callbackCompleted(); | 165 callbackCompleted(); |
166 }; | 166 }; |
167 }; | 167 }; |
168 | 168 |
169 chrome.test.listenOnce = function(event, func) { | 169 chrome.test.listenOnce = function(event, func) { |
170 callbackAdded(); | 170 var callbackCompleted = chrome.test.callbackAdded(); |
171 var listener = function() { | 171 var listener = function() { |
172 event.removeListener(listener); | 172 event.removeListener(listener); |
173 safeFunctionApply(func, arguments); | 173 safeFunctionApply(func, arguments); |
174 callbackCompleted(); | 174 callbackCompleted(); |
175 }; | 175 }; |
176 event.addListener(listener); | 176 event.addListener(listener); |
177 }; | 177 }; |
178 | 178 |
179 chrome.test.listenForever = function(event, func) { | 179 chrome.test.listenForever = function(event, func) { |
180 callbackAdded(); | 180 var callbackCompleted = chrome.test.callbackAdded(); |
181 | 181 |
182 var listener = function() { | 182 var listener = function() { |
183 safeFunctionApply(func, arguments); | 183 safeFunctionApply(func, arguments); |
184 }; | 184 }; |
185 | 185 |
186 var done = {}; | 186 var done = function() { |
187 done.doneListening = function() { | |
188 event.removeListener(listener); | 187 event.removeListener(listener); |
189 callbackCompleted(); | 188 callbackCompleted(); |
190 }; | 189 }; |
191 | 190 |
192 event.addListener(listener); | 191 event.addListener(listener); |
193 return done; | 192 return done; |
194 }; | 193 }; |
195 | 194 |
196 chrome.test.callbackPass = function(func) { | 195 chrome.test.callbackPass = function(func) { |
197 return chrome.test.callback(func); | 196 return chrome.test.callback(func); |
198 }; | 197 }; |
199 | 198 |
200 chrome.test.callbackFail = function(expectedError) { | 199 chrome.test.callbackFail = function(expectedError) { |
201 return chrome.test.callback(null, expectedError); | 200 return chrome.test.callback(null, expectedError); |
202 }; | 201 }; |
203 | 202 |
204 chrome.test.runTests = function(tests) { | 203 chrome.test.runTests = function(tests) { |
205 chrome.test.tests = tests; | 204 chrome.test.tests = tests; |
206 chrome.test.runNextTest(); | 205 chrome.test.runNextTest(); |
207 }; | 206 }; |
208 })(); | 207 })(); |
OLD | NEW |