| 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..fdb7fd263fc22d2dfc4fffe5ce8b768c6e559a7e 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,41 +41,62 @@ NetworkSimulator.prototype.resolvePromises = function() {
|
| return new Promise(function(resolve, reject) {
|
| var pendingPromises = self._pendingPromises;
|
| self._pendingPromises = [];
|
| - function all_resolved (results) {
|
| + function allResolved(results) {
|
| if (self._pendingPromises.length) {
|
| resolve(self.resolvePromises());
|
| return;
|
| }
|
| resolve(results);
|
| }
|
| - Promise.all(pendingPromises).then(all_resolved, all_resolved);
|
| + Promise.all(pendingPromises).then(allResolved, allResolved);
|
| });
|
| };
|
|
|
| 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);
|
| });
|
| });
|
|
|