Roll src/third_party/WebKit 3529d49:06e8485 (svn 202554:202555)
[chromium-blink-merge.git] / remoting / webapp / crd / js / mock_xhr_unittest.js
blob8d83f3a864e46c1caa618e21ab81198c38f8abd1
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 (function() {
6 'use strict';
8 QUnit.module('mock_xhr', {
9   beforeEach: function() {
10     remoting.MockXhr.activate();
11   },
12   afterEach: function() {
13     remoting.MockXhr.restore();
14   }
15 });
17 /**
18  * @param {string=} opt_url The URL to request.
19  * @return {!Promise<!remoting.Xhr.Response>}
20  */
21 function sendRequest(opt_url) {
22   return new remoting.Xhr({
23     method: 'GET',
24     url: opt_url || 'http://foo.com'
25   }).start();
28 /**
29  * @return {!Promise<!remoting.Xhr.Response>}
30  */
31 function sendRequestForJson() {
32   return new remoting.Xhr({
33     method: 'GET',
34     url: 'http://foo.com',
35     acceptJson: true
36   }).start();
39 QUnit.test('unhandled requests fail', function(assert) {
40   assert.throws(sendRequest);
41 });
43 QUnit.test('setEmptyResponseFor', function(assert) {
44   remoting.MockXhr.setEmptyResponseFor('GET', 'http://foo.com');
45   var promise = sendRequest();
46   assert.throws(sendRequest);
47   return promise.then(function(/** remoting.Xhr.Response */ result) {
48     assert.equal(result.status, 204);
49     assert.equal(result.getText(), '');
50     assert.throws(result.getJson.bind(result));
51   });
52 });
54 QUnit.test('setEmptyResponseFor with repeat', function(assert) {
55   remoting.MockXhr.setEmptyResponseFor('GET', 'http://foo.com', 404, true);
56   var promise1 = sendRequest();
57   var promise2 = sendRequest();
58   return promise1.then(function(/** remoting.Xhr.Response */ result) {
59     assert.equal(result.status, 404);
60     assert.equal(result.getText(), '');
61     assert.throws(result.getJson.bind(result));
62     return promise2;
63   }).then(function(/** remoting.Xhr.Response */ result) {
64     assert.equal(result.status, 404);
65     assert.equal(result.getText(), '');
66     assert.throws(result.getJson.bind(result));
67   });
68 });
70 QUnit.test('setEmptyResponseFor with RegExp', function(assert) {
71   remoting.MockXhr.setEmptyResponseFor('GET', /foo/);
72   var promise = sendRequest();
73   assert.throws(sendRequest);
74   return promise.then(function(/** remoting.Xhr.Response */ result) {
75     assert.equal(result.status, 204);
76     assert.equal(result.getText(), '');
77     assert.throws(result.getJson.bind(result));
78   });
79 });
81 QUnit.test('setTextResponseFor', function(assert) {
82   remoting.MockXhr.setTextResponseFor('GET', /foo/, 'first');
83   remoting.MockXhr.setTextResponseFor('GET', /foo/, 'second');
84   var promise1 = sendRequest();
85   var promise2 = sendRequest();
86   return promise1.then(function(/** remoting.Xhr.Response */ result) {
87     assert.equal(result.status, 200);
88     assert.equal(result.getText(), 'first');
89     assert.throws(result.getJson.bind(result));
90     return promise2;
91   }).then(function(/** remoting.Xhr.Response */ result) {
92     assert.equal(result.status, 200);
93     assert.equal(result.getText(), 'second');
94     assert.throws(result.getJson.bind(result));
95   });
96 });
98 QUnit.test('setTextResponseFor with different URLs', function(assert) {
99   remoting.MockXhr.setTextResponseFor('GET', /foo/, 'first');
100   remoting.MockXhr.setTextResponseFor('GET', /bar/, 'second');
101   var promise1 = sendRequest('http://bar.com');
102   var promise2 = sendRequest();
103   return promise1.then(function(/** remoting.Xhr.Response */ result) {
104     assert.equal(result.status, 200);
105     assert.equal(result.getText(), 'second');
106     assert.throws(result.getJson.bind(result));
107     return promise2;
108   }).then(function(/** remoting.Xhr.Response */ result) {
109     assert.equal(result.status, 200);
110     assert.equal(result.getText(), 'first');
111     assert.throws(result.getJson.bind(result));
112   });
116 QUnit.test('setTextResponseFor with default', function(assert) {
117   remoting.MockXhr.setTextResponseFor('GET', /foo/, 'specific');
118   remoting.MockXhr.setTextResponseFor('GET', null, 'default', true);
119   var promise1 = sendRequest('http://bar.com');
120   var promise2 = sendRequest();
121   var promise3 = sendRequest();
122   return promise1.then(function(/** remoting.Xhr.Response */ result) {
123     assert.equal(result.status, 200);
124     assert.equal(result.getText(), 'default');
125     assert.throws(result.getJson.bind(result));
126     return promise2;
127   }).then(function(/** remoting.Xhr.Response */ result) {
128     assert.equal(result.status, 200);
129     assert.equal(result.getText(), 'specific');
130     assert.throws(result.getJson.bind(result));
131     return promise3;
132   }).then(function(/** remoting.Xhr.Response */ result) {
133     assert.equal(result.status, 200);
134     assert.equal(result.getText(), 'default');
135     assert.throws(result.getJson.bind(result));
136   });
140 QUnit.test('setJsonResponseFor', function(assert) {
141   remoting.MockXhr.setJsonResponseFor('GET', 'http://foo.com', 'foo');
142   var promise = sendRequestForJson();
143   assert.throws(sendRequestForJson);
144   return promise.then(function(/** remoting.Xhr.Response */ result) {
145     assert.equal(result.status, 200);
146     assert.equal(JSON.parse(result.getText()), 'foo');
147     assert.equal(result.getJson(), 'foo');
148   });
151 })();