OLD | NEW |
(Empty) | |
| 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.g
ithub.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/CONTRI
BUTORS.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/PATEN
TS.txt |
| 9 --> |
| 10 <html> |
| 11 <head> |
| 12 <title>core-ajax</title> |
| 13 |
| 14 <script src="../../webcomponentsjs/webcomponents.js"></script> |
| 15 <script src="../../web-component-tester/browser.js"></script> |
| 16 |
| 17 <link rel="import" href="../core-ajax.html"> |
| 18 |
| 19 </head> |
| 20 <body> |
| 21 <core-ajax></core-ajax> |
| 22 |
| 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); |
| 31 }; |
| 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" |
| 46 }; |
| 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(); |
| 54 }, |
| 55 animationFrameFlush, |
| 56 function(cb){ |
| 57 requests[0].respond(200, headers, "test text"); |
| 58 cb(); |
| 59 } |
| 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" |
| 69 }; |
| 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(); |
| 77 }, |
| 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(); |
| 88 } |
| 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" |
| 100 }; |
| 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(); |
| 108 }, |
| 109 animationFrameFlush, |
| 110 function(cb){ |
| 111 requests[0].respond(200, headers, |
| 112 '{"object" : {"list" : [2, 3, {"key": "value"}]}}'); |
| 113 cb(); |
| 114 } |
| 115 ], done); |
| 116 }); |
| 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"); |
| 121 }); |
| 122 }); |
| 123 suite('arraybuffer', function(){ |
| 124 var headers = { |
| 125 "Content-Type": "text/plain" |
| 126 }; |
| 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(); |
| 134 }, |
| 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(); |
| 144 } |
| 145 ], done); |
| 146 }); |
| 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); |
| 152 }); |
| 153 }); |
| 154 suite('blob', function(){}); |
| 155 suite('document', function(){}); |
| 156 }); |
| 157 suite('auto', function() { |
| 158 suiteSetup(function(){ |
| 159 ajax.url = "http://example.com/" |
| 160 ajax.auto = true; |
| 161 }); |
| 162 test('url change should trigger request', function(done){ |
| 163 async.series([ |
| 164 function(cb){ |
| 165 ajax.url = "http://example.com/auto"; |
| 166 cb(); |
| 167 }, |
| 168 animationFrameFlush, |
| 169 function(cb){ |
| 170 assert.equal(requests.length, 1); |
| 171 cb(); |
| 172 } |
| 173 ], done); |
| 174 }); |
| 175 test('params change should trigger request', function(done){ |
| 176 async.series([ |
| 177 function(cb){ |
| 178 ajax.params = {param: "value"}; |
| 179 cb(); |
| 180 }, |
| 181 animationFrameFlush, |
| 182 function(cb){ |
| 183 assert.equal(requests.length, 1); |
| 184 cb(); |
| 185 } |
| 186 ], done); |
| 187 }); |
| 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(); |
| 194 }, |
| 195 animationFrameFlush, |
| 196 function(cb){ |
| 197 assert.equal(requests.length, 1); |
| 198 cb(); |
| 199 } |
| 200 ], done); |
| 201 }); |
| 202 }); |
| 203 suite('events', function(){ |
| 204 var headers = { |
| 205 "Content-Type": "text/plain" |
| 206 }; |
| 207 var body = "somebodytext"; |
| 208 var responded; |
| 209 setup(function(done){ |
| 210 async.series([ |
| 211 function(cb){ |
| 212 ajax.auto = false; |
| 213 cb(); |
| 214 }, |
| 215 animationFrameFlush, |
| 216 function(cb){; |
| 217 ajax.handleAs = 'text'; |
| 218 ajax.url = "http://example.com/text" |
| 219 ajax.auto = true; |
| 220 cb(); |
| 221 }, |
| 222 animationFrameFlush, |
| 223 ], done); |
| 224 responded = false; |
| 225 }); |
| 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; |
| 230 }); |
| 231 requests[0].respond(200, headers, body); |
| 232 assert.isTrue(responded); |
| 233 done(); |
| 234 }); |
| 235 test('core-response should not be fired on failure', function(done){ |
| 236 window.addEventListener('core-response', function(response, xhr){ |
| 237 responded = true; |
| 238 }); |
| 239 requests[0].respond(404, headers, body); |
| 240 assert.isFalse(responded); |
| 241 done(); |
| 242 }); |
| 243 }); |
| 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; |
| 248 }); |
| 249 requests[0].respond(404, headers, body); |
| 250 assert.isTrue(responded); |
| 251 done(); |
| 252 }); |
| 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; |
| 257 }); |
| 258 requests[0].respond(200, headers, body); |
| 259 assert.isFalse(responded); |
| 260 done(); |
| 261 }); |
| 262 }); |
| 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; |
| 267 }); |
| 268 requests[0].respond(200, headers, body); |
| 269 assert.isTrue(responded); |
| 270 done(); |
| 271 }); |
| 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; |
| 276 }); |
| 277 requests[0].respond(404, headers, body); |
| 278 assert.isTrue(responded); |
| 279 done(); |
| 280 }); |
| 281 }); |
| 282 }); |
| 283 }); |
| 284 </script> |
| 285 |
| 286 </body> |
| 287 </html> |
OLD | NEW |