Chromium Code Reviews| Index: Tools/GardeningServer/scripts/net_unittests.js |
| diff --git a/Tools/GardeningServer/scripts/net_unittests.js b/Tools/GardeningServer/scripts/net_unittests.js |
| index 193d3d4f7ce944d53ecfd56c16bf9f6195211cd4..f43485f5de3a62c9c1c72a867dd15ce854ca3f8c 100644 |
| --- a/Tools/GardeningServer/scripts/net_unittests.js |
| +++ b/Tools/GardeningServer/scripts/net_unittests.js |
| @@ -29,6 +29,8 @@ function NetworkSimulator() |
| this._pendingPromises = []; |
| }; |
| +NetworkSimulator._testInProgress = false; |
| + |
| NetworkSimulator.prototype.schedulePromise = function(promise) { |
| this._pendingPromises.push(promise); |
| return promise; |
| @@ -39,7 +41,7 @@ NetworkSimulator.prototype.resolvePromises = function() { |
| return new Promise(function(resolve, reject) { |
| var pendingPromises = self._pendingPromises; |
| self._pendingPromises = []; |
| - function all_resolved (results) { |
| + function all_resolved(results) { |
|
abarth-chromium
2014/07/20 16:56:17
allResolved ?
|
| if (self._pendingPromises.length) { |
| resolve(self.resolvePromises()); |
| return; |
| @@ -52,28 +54,49 @@ NetworkSimulator.prototype.resolvePromises = function() { |
| NetworkSimulator.prototype.runTest = function(testCase) |
| { |
| + if (NetworkSimulator._testInProgress) { |
| + ok(false, "runTest calls cannot be nested"); |
| + start(); |
| + return; |
| + } |
| + |
| + NetworkSimulator._testInProgress = true; |
| + |
| var self = this; |
| - var realNet = window.net; |
| return new Promise(function(resolve, reject) { |
| + var realNet = window.net; |
| + |
| + function reset() { |
| + window.net = realNet; |
| + NetworkSimulator._testInProgress = false; |
| + } |
| // All net.* methods should return promises. This watches all |
| // promises generated by test-overridden methods. |
| window.net = {}; |
| ['probe', 'jsonp', 'get', 'post', |
| 'ajax', 'json', 'xml'].forEach(function(method) { |
| - if (method in self) { |
| - net[method] = function() { |
| - return self.schedulePromise(self[method].apply(self, arguments)); |
| - }; |
| - }; |
| - }); |
| + if (method in self) { |
| + net[method] = function() { |
| + return self.schedulePromise(self[method].apply(self, arguments)); |
| + }; |
| + }; |
| + }); |
| + |
| + try { |
| + testCase(); |
| + } catch(e) { |
| + // Make sure errors thrown in the test case don't leave window.net in a bad state. |
| + reset(); |
| + ok(false, "Test case threw an error:" + e); |
| + } |
| - testCase(); |
| self.resolvePromises().then(function() { |
| - window.net = realNet; |
| + reset(); |
| equal(window.net, realNet); |
| resolve(); |
| }).catch(function(e) { |
| + reset(); |
| ok(false, "Failed to finish test: " + e); |
| }); |
| }); |