OLD | NEW |
1 importScripts('worker-testharness.js'); | 1 importScripts('worker-testharness.js'); |
2 importScripts('/resources/testharness-helpers.js'); | 2 importScripts('/resources/testharness-helpers.js'); |
3 | 3 |
4 // A set of Request/Response pairs to be used with prepopulated_cache_test(). | 4 // A set of Request/Response pairs to be used with prepopulated_cache_test(). |
5 var simple_entries = { | 5 var simple_entries = { |
6 a: { | 6 a: { |
7 request: new Request('http://example.com/a'), | 7 request: new Request('http://example.com/a'), |
8 response: new Response('') | 8 response: new Response('') |
9 }, | 9 }, |
10 | 10 |
(...skipping 20 matching lines...) Expand all Loading... |
31 a_org: { | 31 a_org: { |
32 request: new Request('http://example.org/a'), | 32 request: new Request('http://example.org/a'), |
33 response: new Response('') | 33 response: new Response('') |
34 }, | 34 }, |
35 | 35 |
36 cat: { | 36 cat: { |
37 request: new Request('http://example.com/cat'), | 37 request: new Request('http://example.com/cat'), |
38 response: new Response('') | 38 response: new Response('') |
39 }, | 39 }, |
40 | 40 |
41 cat_with_fragment: { | 41 catmandu: { |
42 request: new Request('http://example.com/cat#mouse'), | 42 request: new Request('http://example.com/catmandu'), |
| 43 response: new Response('') |
| 44 }, |
| 45 |
| 46 cat_num_lives: { |
| 47 request: new Request('http://example.com/cat?lives=9'), |
43 response: new Response('') | 48 response: new Response('') |
44 }, | 49 }, |
45 | 50 |
46 cat_in_the_hat: { | 51 cat_in_the_hat: { |
47 request: new Request('http://example.com/cat/in/the/hat'), | 52 request: new Request('http://example.com/cat/in/the/hat'), |
48 response: new Response('') | 53 response: new Response('') |
| 54 }, |
| 55 |
| 56 secret_cat: { |
| 57 request: new Request('http://tom:jerry@example.com/cat'), |
| 58 response: new Response('') |
| 59 }, |
| 60 |
| 61 top_secret_cat: { |
| 62 request: new Request('http://tom:j3rry@example.com/cat'), |
| 63 response: new Response('') |
49 } | 64 } |
50 }; | 65 }; |
51 | 66 |
52 // A set of Request/Response pairs to be used with prepopulated_cache_test(). | 67 // A set of Request/Response pairs to be used with prepopulated_cache_test(). |
53 // These contain a mix of test cases that use Vary headers. | 68 // These contain a mix of test cases that use Vary headers. |
54 var vary_entries = { | 69 var vary_entries = { |
55 no_vary_header: { | 70 no_vary_header: { |
56 request: new Request('http://example.com/c'), | 71 request: new Request('http://example.com/c'), |
57 response: new Response('') | 72 response: new Response('') |
58 }, | 73 }, |
(...skipping 20 matching lines...) Expand all Loading... |
79 | 94 |
80 vary_wildcard: { | 95 vary_wildcard: { |
81 request: new Request('http://example.com/c', | 96 request: new Request('http://example.com/c', |
82 {headers: {'Cookies': 'x', 'X-Key': '1'}}), | 97 {headers: {'Cookies': 'x', 'X-Key': '1'}}), |
83 response: new Response('', | 98 response: new Response('', |
84 {headers: {'Vary': '*'}}) | 99 {headers: {'Vary': '*'}}) |
85 } | 100 } |
86 }; | 101 }; |
87 | 102 |
88 prepopulated_cache_test(simple_entries, function(cache) { | 103 prepopulated_cache_test(simple_entries, function(cache) { |
| 104 return cache.matchAll('not-present-in-the-cache') |
| 105 .then(function(result) { |
| 106 assert_array_equivalent( |
| 107 result, [], |
| 108 'Cache.matchAll should resolve with an empty array on failure.'); |
| 109 }); |
| 110 }, 'Cache.matchAll with no matching entries'); |
| 111 |
| 112 prepopulated_cache_test(simple_entries, function(cache) { |
89 return cache.match('not-present-in-the-cache') | 113 return cache.match('not-present-in-the-cache') |
90 .then(function(result) { | 114 .then(function(result) { |
91 assert_equals(result, undefined, | 115 assert_equals(result, undefined, |
92 'Cache.match failures should resolve with undefined.'); | 116 'Cache.match failures should resolve with undefined.'); |
93 }); | 117 }); |
94 }, 'Cache.match failure'); | 118 }, 'Cache.match with no matching entries'); |
95 | 119 |
96 prepopulated_cache_test(simple_entries, function(cache) { | 120 prepopulated_cache_test(simple_entries, function(cache) { |
97 return cache.matchAll(simple_entries.a.request.url) | 121 return cache.matchAll(simple_entries.a.request.url) |
98 .then(function(result) { | 122 .then(function(result) { |
99 assert_array_objects_equals(result, [simple_entries.a.response], | 123 assert_array_objects_equals(result, [simple_entries.a.response], |
100 'Cache.matchAll should match by URL.'); | 124 'Cache.matchAll should match by URL.'); |
101 }); | 125 }); |
102 }, 'Cache.matchAll with URL'); | 126 }, 'Cache.matchAll with URL'); |
103 | 127 |
104 prepopulated_cache_test(simple_entries, function(cache) { | 128 prepopulated_cache_test(simple_entries, function(cache) { |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 simple_entries.a_with_query.response | 204 simple_entries.a_with_query.response |
181 ], | 205 ], |
182 'Cache.matchAll with ignoreSearch should ignore the ' + | 206 'Cache.matchAll with ignoreSearch should ignore the ' + |
183 'search parameters of cached request.'); | 207 'search parameters of cached request.'); |
184 }); | 208 }); |
185 }, | 209 }, |
186 'Cache.matchAll with ignoreSearch option (request with no search ' + | 210 'Cache.matchAll with ignoreSearch option (request with no search ' + |
187 'parameters)'); | 211 'parameters)'); |
188 | 212 |
189 prepopulated_cache_test(simple_entries, function(cache) { | 213 prepopulated_cache_test(simple_entries, function(cache) { |
| 214 return cache.match(simple_entries.a.request, |
| 215 {ignoreSearch: true}) |
| 216 .then(function(result) { |
| 217 assert_object_in_array( |
| 218 result, |
| 219 [ |
| 220 simple_entries.a.response, |
| 221 simple_entries.a_with_query.response |
| 222 ], |
| 223 'Cache.match with ignoreSearch should ignore the ' + |
| 224 'search parameters of cached request.'); |
| 225 }); |
| 226 }, |
| 227 'Cache.match with ignoreSearch option (request with no search ' + |
| 228 'parameters)'); |
| 229 |
| 230 prepopulated_cache_test(simple_entries, function(cache) { |
190 return cache.matchAll(simple_entries.a_with_query.request, | 231 return cache.matchAll(simple_entries.a_with_query.request, |
191 {ignoreSearch: true}) | 232 {ignoreSearch: true}) |
192 .then(function(result) { | 233 .then(function(result) { |
193 assert_array_equivalent( | 234 assert_array_equivalent( |
194 result, | 235 result, |
195 [ | 236 [ |
196 simple_entries.a.response, | 237 simple_entries.a.response, |
197 simple_entries.a_with_query.response | 238 simple_entries.a_with_query.response |
198 ], | 239 ], |
199 'Cache.matchAll with ignoreSearch should ignore the ' + | 240 'Cache.matchAll with ignoreSearch should ignore the ' + |
200 'search parameters of request.'); | 241 'search parameters of request.'); |
201 }); | 242 }); |
202 }, | 243 }, |
203 'Cache.matchAll with ignoreSearch option (request with search parameter)'); | 244 'Cache.matchAll with ignoreSearch option (request with search parameter)'); |
204 | 245 |
205 prepopulated_cache_test(simple_entries, function(cache) { | 246 prepopulated_cache_test(simple_entries, function(cache) { |
206 return cache.matchAll(simple_entries.cat.request) | 247 return cache.match(simple_entries.a_with_query.request, |
| 248 {ignoreSearch: true}) |
| 249 .then(function(result) { |
| 250 assert_object_in_array( |
| 251 result, |
| 252 [ |
| 253 simple_entries.a.response, |
| 254 simple_entries.a_with_query.response |
| 255 ], |
| 256 'Cache.match with ignoreSearch should ignore the ' + |
| 257 'search parameters of request.'); |
| 258 }); |
| 259 }, |
| 260 'Cache.match with ignoreSearch option (request with search parameter)'); |
| 261 |
| 262 prepopulated_cache_test(simple_entries, function(cache) { |
| 263 return cache.matchAll(simple_entries.cat.request.url + '#mouse') |
207 .then(function(result) { | 264 .then(function(result) { |
208 assert_array_equivalent( | 265 assert_array_equivalent( |
209 result, | 266 result, |
210 [ | 267 [ |
211 simple_entries.cat.response, | 268 simple_entries.cat.response, |
212 simple_entries.cat_with_fragment.response | |
213 ], | 269 ], |
214 'Cache.matchAll should ignore URL hash.'); | 270 'Cache.matchAll should ignore URL fragment.'); |
215 }); | 271 }); |
216 }, 'Cache.matchAll with request containing hash'); | 272 }, 'Cache.matchAll with URL containing fragment'); |
| 273 |
| 274 prepopulated_cache_test(simple_entries, function(cache) { |
| 275 return cache.match(simple_entries.cat.request.url + '#mouse') |
| 276 .then(function(result) { |
| 277 assert_object_equals(result, simple_entries.cat.response, |
| 278 'Cache.match should ignore URL fragment.'); |
| 279 }); |
| 280 }, 'Cache.match with URL containing fragment'); |
217 | 281 |
218 prepopulated_cache_test(simple_entries, function(cache) { | 282 prepopulated_cache_test(simple_entries, function(cache) { |
219 return cache.matchAll('http') | 283 return cache.matchAll('http') |
220 .then(function(result) { | 284 .then(function(result) { |
221 assert_array_equivalent( | 285 assert_array_equivalent( |
222 result, [], | 286 result, [], |
223 'Cache.matchAll should treat query as a URL and not ' + | 287 'Cache.matchAll should treat query as a URL and not ' + |
224 'just a string fragment.'); | 288 'just a string fragment.'); |
225 }); | 289 }); |
226 }, 'Cache.matchAll with string fragment "http" as query'); | 290 }, 'Cache.matchAll with string fragment "http" as query'); |
227 | 291 |
228 prepopulated_cache_test(simple_entries, function(cache) { | 292 prepopulated_cache_test(simple_entries, function(cache) { |
| 293 return cache.match('http') |
| 294 .then(function(result) { |
| 295 assert_equals( |
| 296 result, undefined, |
| 297 'Cache.match should treat query as a URL and not ' + |
| 298 'just a string fragment.'); |
| 299 }); |
| 300 }, 'Cache.match with string fragment "http" as query'); |
| 301 |
| 302 prepopulated_cache_test(simple_entries, function(cache) { |
229 return cache.matchAll('http://example.com/cat', | 303 return cache.matchAll('http://example.com/cat', |
230 {prefixMatch: true}) | 304 {prefixMatch: true}) |
231 .then(function(result) { | 305 .then(function(result) { |
232 assert_array_equivalent( | 306 assert_array_equivalent( |
233 result, | 307 result, |
234 [ | 308 [ |
235 simple_entries.cat.response, | 309 simple_entries.cat.response, |
236 simple_entries.cat_with_fragment.response, | 310 simple_entries.catmandu.response, |
| 311 simple_entries.cat_num_lives.response, |
237 simple_entries.cat_in_the_hat.response | 312 simple_entries.cat_in_the_hat.response |
238 ], | 313 ], |
239 'Cache.matchAll should honor prefixMatch.'); | 314 'Cache.matchAll should honor prefixMatch.'); |
240 }); | 315 }); |
241 }, 'Cache.matchAll with prefixMatch option'); | 316 }, 'Cache.matchAll with prefixMatch option'); |
242 | 317 |
243 prepopulated_cache_test(simple_entries, function(cache) { | 318 prepopulated_cache_test(simple_entries, function(cache) { |
| 319 return cache.match('http://example.com/cat', |
| 320 {prefixMatch: true}) |
| 321 .then(function(result) { |
| 322 assert_object_in_array( |
| 323 result, |
| 324 [ |
| 325 simple_entries.cat.response, |
| 326 simple_entries.catmandu.response, |
| 327 simple_entries.cat_num_lives.response, |
| 328 simple_entries.cat_in_the_hat.response |
| 329 ], |
| 330 'Cache.match should honor prefixMatch.'); |
| 331 }); |
| 332 }, 'Cache.match with prefixMatch option'); |
| 333 |
| 334 prepopulated_cache_test(simple_entries, function(cache) { |
244 return cache.matchAll('http://example.com/cat/', | 335 return cache.matchAll('http://example.com/cat/', |
245 {prefixMatch: true}) | 336 {prefixMatch: true}) |
246 .then(function(result) { | 337 .then(function(result) { |
247 assert_array_equivalent( | 338 assert_array_equivalent( |
248 result, [simple_entries.cat_in_the_hat.response], | 339 result, [simple_entries.cat_in_the_hat.response], |
249 'Cache.matchAll should honor prefixMatch.'); | 340 'Cache.matchAll should honor prefixMatch.'); |
250 }); | 341 }); |
251 }, 'Cache.matchAll with prefixMatch option'); | 342 }, 'Cache.matchAll with prefixMatch option (URL ending with path delimiter)'); |
| 343 |
| 344 prepopulated_cache_test(simple_entries, function(cache) { |
| 345 return cache.match('http://example.com/cat/', |
| 346 {prefixMatch: true}) |
| 347 .then(function(result) { |
| 348 assert_object_equals( |
| 349 result, simple_entries.cat_in_the_hat.response, |
| 350 'Cache.match should honor prefixMatch.'); |
| 351 }); |
| 352 }, 'Cache.match with prefixMatch option (URL ending with path delimiter)'); |
| 353 |
| 354 prepopulated_cache_test(simple_entries, function(cache) { |
| 355 return cache.matchAll('http://tom:jerry@example.com', {prefixMatch: true}) |
| 356 .then(function(result) { |
| 357 assert_array_equivalent( |
| 358 result, |
| 359 [ |
| 360 simple_entries.secret_cat.response, |
| 361 ], |
| 362 'Cache.matchAll should honor prefixMatch.'); |
| 363 }); |
| 364 }, 'Cache.matchAll with prefixMatch option (URL with embedded credentials)'); |
| 365 |
| 366 prepopulated_cache_test(simple_entries, function(cache) { |
| 367 return cache.match('http://tom:jerry@example.com', {prefixMatch: true}) |
| 368 .then(function(result) { |
| 369 assert_object_equals( |
| 370 result, simple_entries.secret_cat.response, |
| 371 'Cache.match should honor prefixMatch.'); |
| 372 }); |
| 373 }, 'Cache.match with prefixMatch option (URL with embedded credentials)'); |
| 374 |
| 375 prepopulated_cache_test(simple_entries, function(cache) { |
| 376 // The string 'http://tom' should be converted to a URL and then serialized |
| 377 // yielding 'http://tom/'. The trailing slash prevents the URL from matching |
| 378 // the embedded credentials in the entries already in the cache. |
| 379 return cache.matchAll('http://tom', {prefixMatch: true}) |
| 380 .then(function(result) { |
| 381 assert_array_equivalent( |
| 382 result, [], |
| 383 'Cache.matchAll should honor prefixMatch.'); |
| 384 }); |
| 385 }, |
| 386 'Cache.matchAll with prefixMatch option (URL matching embedded credentials)'); |
| 387 |
| 388 prepopulated_cache_test(simple_entries, function(cache) { |
| 389 // The string 'http://tom' should be converted to a URL and then serialized |
| 390 // yielding 'http://tom/'. The trailing slash prevents the URL from matching |
| 391 // the embedded credentials in the entries already in the cache. |
| 392 return cache.match('http://tom', {prefixMatch: true}) |
| 393 .then(function(result) { |
| 394 assert_equals(result, undefined, |
| 395 'Cache.match should honor prefixMatch.'); |
| 396 }); |
| 397 }, |
| 398 'Cache.match with prefixMatch option (URL matching embedded credentials)'); |
| 399 |
| 400 prepopulated_cache_test(simple_entries, function(cache) { |
| 401 return cache.matchAll(simple_entries.secret_cat.request.url) |
| 402 .then(function(result) { |
| 403 assert_array_equivalent( |
| 404 result, [simple_entries.secret_cat.response], |
| 405 'Cache.matchAll should not ignore embedded credentials'); |
| 406 }); |
| 407 }, 'Cache.matchAll with URL containing credentials'); |
| 408 |
| 409 prepopulated_cache_test(simple_entries, function(cache) { |
| 410 return cache.match(simple_entries.secret_cat.request.url) |
| 411 .then(function(result) { |
| 412 assert_object_equals( |
| 413 result, simple_entries.secret_cat.response, |
| 414 'Cache.match should not ignore embedded credentials'); |
| 415 }); |
| 416 }, 'Cache.match with URL containing credentials'); |
252 | 417 |
253 prepopulated_cache_test(vary_entries, function(cache) { | 418 prepopulated_cache_test(vary_entries, function(cache) { |
254 return cache.matchAll('http://example.com/c') | 419 return cache.matchAll('http://example.com/c') |
255 .then(function(result) { | 420 .then(function(result) { |
256 assert_array_equivalent( | 421 assert_array_equivalent( |
257 result, | 422 result, |
258 [ | 423 [ |
259 vary_entries.no_vary_header.response, | 424 vary_entries.no_vary_header.response, |
260 vary_entries.vary_wildcard.response, | 425 vary_entries.vary_wildcard.response, |
261 vary_entries.vary_cookie_absent.response | 426 vary_entries.vary_cookie_absent.response |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 | 556 |
392 // Run |test_function| with a Cache object as its only parameter. Prior to the | 557 // Run |test_function| with a Cache object as its only parameter. Prior to the |
393 // call, the Cache is populated by cache entries from |entries|. The latter is | 558 // call, the Cache is populated by cache entries from |entries|. The latter is |
394 // expected to be an Object mapping arbitrary keys to objects of the form | 559 // expected to be an Object mapping arbitrary keys to objects of the form |
395 // {request: <Request object>, response: <Response object>}. | 560 // {request: <Request object>, response: <Response object>}. |
396 // | 561 // |
397 // |test_function| should return a Promise that can be used with promise_test. | 562 // |test_function| should return a Promise that can be used with promise_test. |
398 function prepopulated_cache_test(entries, test_function, description) { | 563 function prepopulated_cache_test(entries, test_function, description) { |
399 cache_test(function(cache) { | 564 cache_test(function(cache) { |
400 return Promise.all(Object.keys(entries).map(function(k) { | 565 return Promise.all(Object.keys(entries).map(function(k) { |
401 return cache.put(entries[k].request, entries[k].response); | 566 return cache.put(entries[k].request, entries[k].response) |
| 567 .catch(function(e) { |
| 568 assert_unreached('Test setup failed for entry ' + k + ' : ' + e)
; |
| 569 }); |
402 })) | 570 })) |
403 .catch(function(reason) { | |
404 assert_unreached('Test setup failed: ' + reason.message); | |
405 }) | |
406 .then(function() { | 571 .then(function() { |
407 return test_function(cache); | 572 return test_function(cache); |
408 }); | 573 }); |
409 }, description); | 574 }, description); |
410 } | 575 } |
OLD | NEW |