Chromium Code Reviews| 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..be4124de0e3ec1394a1bc161120bd38b9b609731 |
| --- /dev/null |
| +++ b/remoting/webapp/crd/js/mock_xhr_unittest.js |
| @@ -0,0 +1,166 @@ |
| +// 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'; |
| + |
| +QUnit.module('mock_xhr', { |
| + beforeEach: function() { |
| + base.debug.throwOnAssert = true; |
|
Jamie
2015/04/03 01:45:58
You're setting a global here without restoring it
John Williams
2015/04/04 01:40:26
Couldn't find a good place to move it to, so I jus
|
| + remoting.MockXhr.activate(); |
| + }, |
| + afterEach: function() { |
| + remoting.MockXhr.restore(); |
| + } |
| +}); |
| + |
| +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'); |
| + }); |
| +}); |
| + |
| +})(); |