Add an exponential backoff to rechecking the app list doodle.
[chromium-blink-merge.git] / third_party / polymer / components-chromium / core-ajax / test / core-ajax.html
blobea21f097897366df164bf9e135feaec0d2c2f318
1 <!doctype html>
2 <!--
3 Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
4 This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
6 The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
7 Code distributed by Google as part of the polymer project is also
8 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
9 -->
10 <html>
11 <head>
12 <title>core-ajax</title>
14 <script src="../../webcomponentsjs/webcomponents.js"></script>
15 <script src="../../web-component-tester/browser.js"></script>
17 <link rel="import" href="../core-ajax.html">
19 </head>
20 <body>
21 <core-ajax></core-ajax>
23 <script>
24 suite('core-ajax', function() {
25 var xhr, requests, ajax;
26 suiteSetup(function() {
27 xhr = sinon.useFakeXMLHttpRequest();
28 ajax = document.querySelector("core-ajax");
29 xhr.onCreate = function (xhr) {
30 requests.push(xhr);
32 // Reset the core-ajax element before each test.
33 ajax.auto = false;
34 ajax.url = '';
35 ajax.params = '';
36 ajax.handleAs = 'text';
37 ajax.body = '';
38 });
39 setup(function() {
40 requests = [];
41 });
42 suite('handleAs', function() {
43 suite('text', function(){
44 var headers = {
45 "Content-Type": "text/plain"
47 setup(function(done){
48 async.series([
49 function(cb){
50 ajax.handleAs = 'text';
51 ajax.url = "http://example.com/text"
52 ajax.auto = true;
53 cb();
55 animationFrameFlush,
56 function(cb){
57 requests[0].respond(200, headers, "test text");
58 cb();
60 ], done);
61 });
62 test('Raw text should pass through', function(){
63 assert.equal(ajax.response, "test text")
64 });
65 });
66 suite('xml', function(){
67 var headers = {
68 "Content-Type": "text/xml"
70 setup(function(done){
71 async.series([
72 function(cb){
73 ajax.handleAs = 'xml';
74 ajax.url = "http://example.com/xml"
75 ajax.auto = true;
76 cb();
78 animationFrameFlush,
79 function(cb){
80 requests[0].respond(200, headers,
81 "<note>" +
82 "<to>AJ</to>" +
83 "<from>Dog</from>" +
84 "<subject>Reminder</subject>" +
85 "<body><q>Feed me!</q></body>" +
86 "</note>");
87 cb();
89 ], done);
90 });
91 test('XML should be returned with queryable structure', function(){
92 var q = ajax.response.querySelector("note body q");
93 assert.equal(q.childNodes[0].textContent, "Feed me!");
94 var to = ajax.response.querySelector("to");
95 assert.equal(to.childNodes[0].textContent, "AJ");
96 })});
97 suite('json', function(){
98 var headers = {
99 "Content-Type": "text/json"
101 setup(function(done){
102 async.series([
103 function(cb){
104 ajax.handleAs = 'json';
105 ajax.url = "http://example.com/json"
106 ajax.auto = true;
107 cb();
109 animationFrameFlush,
110 function(cb){
111 requests[0].respond(200, headers,
112 '{"object" : {"list" : [2, 3, {"key": "value"}]}}');
113 cb();
115 ], done);
117 test('JSON should be returned as an Object', function(){
118 var r = ajax.response;
119 assert.equal(r.object.list[1], 3);
120 assert.equal(r.object.list[2].key, "value");
123 suite('arraybuffer', function(){
124 var headers = {
125 "Content-Type": "text/plain"
127 setup(function(done){
128 async.series([
129 function(cb){
130 ajax.handleAs = 'arraybuffer';
131 ajax.url = "http://example.com/data"
132 ajax.auto = true;
133 cb();
135 animationFrameFlush,
136 function(cb){
137 var buf = new ArrayBuffer(8*4);
138 var resp = new Int32Array(buf);
139 resp[3] = 12;
140 resp[6] = 21;
141 requests[0].response = buf;
142 requests[0].respond(200, headers, 'blahblahblah');
143 cb();
145 ], done);
147 test('arraybuffer response should be passed through', function(){
148 var r = ajax.response;
149 var ints = new Int32Array(r);
150 assert.equal(ints[3], 12);
151 assert.equal(ints[6], 21);
154 suite('blob', function(){});
155 suite('document', function(){});
157 suite('auto', function() {
158 suiteSetup(function(){
159 ajax.url = "http://example.com/"
160 ajax.auto = true;
162 test('url change should trigger request', function(done){
163 async.series([
164 function(cb){
165 ajax.url = "http://example.com/auto";
166 cb();
168 animationFrameFlush,
169 function(cb){
170 assert.equal(requests.length, 1);
171 cb();
173 ], done);
175 test('params change should trigger request', function(done){
176 async.series([
177 function(cb){
178 ajax.params = {param: "value"};
179 cb();
181 animationFrameFlush,
182 function(cb){
183 assert.equal(requests.length, 1);
184 cb();
186 ], done);
188 test('body change should trigger request', function(done){
189 async.series([
190 function(cb){
191 ajax.method = "POST";
192 ajax.body = "bodystuff";
193 cb();
195 animationFrameFlush,
196 function(cb){
197 assert.equal(requests.length, 1);
198 cb();
200 ], done);
203 suite('events', function(){
204 var headers = {
205 "Content-Type": "text/plain"
207 var body = "somebodytext";
208 var responded;
209 setup(function(done){
210 async.series([
211 function(cb){
212 ajax.auto = false;
213 cb();
215 animationFrameFlush,
216 function(cb){;
217 ajax.handleAs = 'text';
218 ajax.url = "http://example.com/text"
219 ajax.auto = true;
220 cb();
222 animationFrameFlush,
223 ], done);
224 responded = false;
226 suite('core-response', function(){
227 test('core-response should be fired on success', function(done){
228 window.addEventListener('core-response', function(response, xhr){
229 responded = true;
231 requests[0].respond(200, headers, body);
232 assert.isTrue(responded);
233 done();
235 test('core-response should not be fired on failure', function(done){
236 window.addEventListener('core-response', function(response, xhr){
237 responded = true;
239 requests[0].respond(404, headers, body);
240 assert.isFalse(responded);
241 done();
244 suite('core-error', function(){
245 test('core-error should be fired on failure', function(done){
246 window.addEventListener('core-error', function(response, xhr){
247 responded = true;
249 requests[0].respond(404, headers, body);
250 assert.isTrue(responded);
251 done();
253 test('core-error should not be fired on success', function(done){
254 var responded = false;
255 window.addEventListener('core-error', function(response, xhr){
256 responded = true;
258 requests[0].respond(200, headers, body);
259 assert.isFalse(responded);
260 done();
263 suite('core-complete', function(){
264 test('core-complete should be fired on success', function(done){
265 window.addEventListener('core-complete', function(response, xhr){
266 responded = true;
268 requests[0].respond(200, headers, body);
269 assert.isTrue(responded);
270 done();
272 test('core-complete should be fired on failure', function(done){
273 var responded = false;
274 window.addEventListener('core-complete', function(response, xhr){
275 responded = true;
277 requests[0].respond(404, headers, body);
278 assert.isTrue(responded);
279 done();
284 </script>
286 </body>
287 </html>