Index: remoting/webapp/crd/js/mock_xhr_unittest.js |
diff --git a/remoting/webapp/crd/js/mock_xhr_unittest.js b/remoting/webapp/crd/js/mock_xhr_unittest.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f8033542b9f458e0ee96143e2999a01fbfc8a08c |
--- /dev/null |
+++ b/remoting/webapp/crd/js/mock_xhr_unittest.js |
@@ -0,0 +1,171 @@ |
+// Copyright 2015 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() { |
+'use strict'; |
+ |
+/** @type {boolean} */ |
+var oldThrowOnAssert; |
+ |
+QUnit.module('mock_xhr', { |
+ beforeEach: function() { |
+ oldThrowOnAssert = base.debug.throwOnAssert; |
+ base.debug.throwOnAssert = true; |
+ remoting.MockXhr.activate(); |
+ }, |
+ afterEach: function() { |
+ remoting.MockXhr.restore(); |
+ base.debug.throwOnAssert = oldThrowOnAssert; |
+ } |
+}); |
+ |
+QUnit.test('multiple calls to activate() fail', function(assert) { |
+ assert.throws(function() { |
+ remoting.MockXhr.activate(); |
+ }); |
+}); |
+ |
+QUnit.test('restore() without activate() fails', function(assert) { |
+ remoting.MockXhr.restore(); |
+ assert.throws(function() { |
+ remoting.MockXhr.restore(); |
+ }); |
+ remoting.MockXhr.activate(); |
+}); |
+ |
+/** |
+ * @param {string=} opt_url The URL to request. |
+ * @return {!Promise<!remoting.Xhr.Response>} |
+ */ |
+function sendRequest(opt_url) { |
+ return new remoting.Xhr({ |
+ method: 'GET', |
+ url: opt_url || 'http://foo.com' |
+ }).start(); |
+}; |
+ |
+/** |
+ * @return {!Promise<!remoting.Xhr.Response>} |
+ */ |
+function sendRequestForJson() { |
+ return new remoting.Xhr({ |
+ method: 'GET', |
+ url: 'http://foo.com', |
+ acceptJson: true |
+ }).start(); |
+} |
+ |
+QUnit.test('unhandled requests fail', function(assert) { |
+ assert.throws(sendRequest); |
+}); |
+ |
+QUnit.test('setEmptyResponseFor', function(assert) { |
+ remoting.MockXhr.setEmptyResponseFor('GET', 'http://foo.com'); |
+ var promise = sendRequest(); |
+ assert.throws(sendRequest); |
+ return promise.then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 204); |
+ assert.equal(result.getText(), ''); |
+ assert.throws(result.getJson.bind(result)); |
+ }); |
+}); |
+ |
+QUnit.test('setEmptyResponseFor with repeat', function(assert) { |
+ remoting.MockXhr.setEmptyResponseFor('GET', 'http://foo.com', true); |
+ var promise1 = sendRequest(); |
+ var promise2 = sendRequest(); |
+ return promise1.then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 204); |
+ assert.equal(result.getText(), ''); |
+ assert.throws(result.getJson.bind(result)); |
+ return promise2; |
+ }).then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 204); |
+ assert.equal(result.getText(), ''); |
+ assert.throws(result.getJson.bind(result)); |
+ }); |
+}); |
+ |
+QUnit.test('setEmptyResponseFor with RegExp', function(assert) { |
+ remoting.MockXhr.setEmptyResponseFor('GET', /foo/); |
+ var promise = sendRequest(); |
+ assert.throws(sendRequest); |
+ return promise.then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 204); |
+ assert.equal(result.getText(), ''); |
+ assert.throws(result.getJson.bind(result)); |
+ }); |
+}); |
+ |
+QUnit.test('setTextResponseFor', function(assert) { |
+ remoting.MockXhr.setTextResponseFor('GET', /foo/, 'first'); |
+ remoting.MockXhr.setTextResponseFor('GET', /foo/, 'second'); |
+ var promise1 = sendRequest(); |
+ var promise2 = sendRequest(); |
+ return promise1.then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 200); |
+ assert.equal(result.getText(), 'first'); |
+ assert.throws(result.getJson.bind(result)); |
+ return promise2; |
+ }).then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 200); |
+ assert.equal(result.getText(), 'second'); |
+ assert.throws(result.getJson.bind(result)); |
+ }); |
+}); |
+ |
+QUnit.test('setTextResponseFor with different URLs', function(assert) { |
+ remoting.MockXhr.setTextResponseFor('GET', /foo/, 'first'); |
+ remoting.MockXhr.setTextResponseFor('GET', /bar/, 'second'); |
+ var promise1 = sendRequest('http://bar.com'); |
+ var promise2 = sendRequest(); |
+ return promise1.then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 200); |
+ assert.equal(result.getText(), 'second'); |
+ assert.throws(result.getJson.bind(result)); |
+ return promise2; |
+ }).then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 200); |
+ assert.equal(result.getText(), 'first'); |
+ assert.throws(result.getJson.bind(result)); |
+ }); |
+}); |
+ |
+ |
+QUnit.test('setTextResponseFor with default', function(assert) { |
+ remoting.MockXhr.setTextResponseFor('GET', /foo/, 'specific'); |
+ remoting.MockXhr.setTextResponseFor('GET', null, 'default', true); |
+ var promise1 = sendRequest('http://bar.com'); |
+ var promise2 = sendRequest(); |
+ var promise3 = sendRequest(); |
+ return promise1.then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 200); |
+ assert.equal(result.getText(), 'default'); |
+ assert.throws(result.getJson.bind(result)); |
+ return promise2; |
+ }).then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 200); |
+ assert.equal(result.getText(), 'specific'); |
+ assert.throws(result.getJson.bind(result)); |
+ return promise3; |
+ }).then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 200); |
+ assert.equal(result.getText(), 'default'); |
+ assert.throws(result.getJson.bind(result)); |
+ }); |
+}); |
+ |
+ |
+QUnit.test('setJsonResponseFor', function(assert) { |
+ remoting.MockXhr.setJsonResponseFor('GET', 'http://foo.com', 'foo'); |
+ var promise = sendRequestForJson(); |
+ assert.throws(sendRequestForJson); |
+ return promise.then(function(/** remoting.Xhr.Response */ result) { |
+ assert.equal(result.status, 200); |
+ assert.equal(JSON.parse(result.getText()), 'foo'); |
+ assert.equal(result.getJson(), 'foo'); |
+ }); |
+}); |
+ |
+})(); |