Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(519)

Unified Diff: Tools/GardeningServer/scripts/network_simulator.js

Issue 459463003: Convert moar Sheriff-o-Matic tests to Polymer. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Tools/GardeningServer/scripts/network_simulator.js
diff --git a/Tools/GardeningServer/scripts/network_simulator.js b/Tools/GardeningServer/scripts/network_simulator.js
new file mode 100644
index 0000000000000000000000000000000000000000..f572b6480832632e90a28ff9b28bc6809c37570f
--- /dev/null
+++ b/Tools/GardeningServer/scripts/network_simulator.js
@@ -0,0 +1,83 @@
+/*
ojan 2014/08/12 02:01:18 This should be an html file so we can pull it in w
michaelpg 2014/08/14 00:46:02 Done.
+ * Copyright 2014 The Chromium Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+function NetworkSimulator(assert, done) {
+ this._assert = assert;
+ this._done = done;
+ this._pendingPromises = [];
+}
+
+NetworkSimulator._testInProgress = false;
+
+NetworkSimulator.prototype.schedulePromise = function(promise) {
+ this._pendingPromises.push(promise);
+ return promise;
+};
+
+NetworkSimulator.prototype.resolvePromises = function() {
+ var self = this;
+ return new Promise(function(resolve, reject) {
+ var pendingPromises = self._pendingPromises;
+ self._pendingPromises = [];
+ function allResolved(results) {
+ if (self._pendingPromises.length) {
+ resolve(self.resolvePromises());
+ return;
+ }
+ resolve(results);
+ }
+ Promise.all(pendingPromises).then(allResolved, allResolved);
+ });
+};
+
+NetworkSimulator.prototype.runTest = function(testCase) {
+ if (NetworkSimulator._testInProgress) {
+ this._assert(false, "runTest calls cannot be nested");
+ this._done();
+ return;
+ }
+
+ NetworkSimulator._testInProgress = true;
+
+ var self = this;
+ 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));
+ };
+ };
+ });
+
+ try {
+ testCase();
+ } catch(e) {
+ // Make sure errors thrown in the test case don't leave window.net in a bad state.
+ reset();
+ self._assert(false, "Test case threw an error:" + e);
+ }
+
+ self.resolvePromises().then(function() {
+ reset();
+ self._assert(window.net == realNet);
+ resolve();
+ }).catch(function(e) {
+ reset();
+ self._assert(false, "Failed to finish test: " + e);
+ });
+ });
+};

Powered by Google App Engine
This is Rietveld 408576698