Chromium Code Reviews| Index: LayoutTests/http/tests/serviceworker/resources/cache-match-test-worker.js |
| diff --git a/LayoutTests/http/tests/serviceworker/resources/cache-match-test-worker.js b/LayoutTests/http/tests/serviceworker/resources/cache-match-test-worker.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5752b7976a05e9d6481aa95f292bdae9fc56f908 |
| --- /dev/null |
| +++ b/LayoutTests/http/tests/serviceworker/resources/cache-match-test-worker.js |
| @@ -0,0 +1,205 @@ |
| +importScripts('worker-test-harness.js'); |
| +// |
| +// Variations: |
| +// - ignoreSearch : Ignores search parameter. |
| +// - prefixMatch : only matches a prefix of the URL. |
| +// - ignoreVary : ignores a 'Vary' header if there is one. |
| +var entries = { |
| + a: { |
| + request: new Request('http://example.com/a'), |
| + response: new Response('') |
| + }, |
| + |
| + b: { |
| + request: new Request('http://example.com/b'), |
| + response: new Response('') |
| + }, |
| + |
| + a_with_query: { |
| + request: new Request('http://example.com/a?q=r'), |
| + response: new Response('') |
| + }, |
| + |
| + A: { |
| + request: new Request('http://example.com/A'), |
| + response: new Response('') |
| + }, |
| + |
| + a_https: { |
| + request: new Request('https://example.com/a'), |
| + response: new Response('') |
| + }, |
| + |
| + a_org: { |
| + request: new Request('http://example.org/a'), |
| + response: new Response('') |
| + }, |
| + |
| + cat: { |
| + request: new Request('http://example.com/cat'), |
| + response: new Response('') |
| + }, |
| + |
| + cat_with_fragment: { |
| + request: new Request('http://example.com/cat#mouse'), |
| + response: new Response('') |
| + }, |
| + |
| + cat_in_the_hat: { |
| + request: new Request('http://example.com/cat/in/the/hat'), |
| + response: new Response('') |
| + }, |
| + |
| + c_is_for_cookie: { |
| + request: new Request('http://example.com/c', |
| + { headers: { 'Cookies': 'is-for-cookie' } }), |
|
jsbell
2014/08/15 20:49:34
That's good enough for me!
|
| + response: new Response('', |
| + { headers: { 'Vary': 'Cookies' } }) |
|
jsbell
2014/08/15 20:49:34
But actually.. per style guide, no space after { o
|
| + }, |
| + |
| + c_is_for_cake: { |
| + request: new Request('http://example.com/c', |
| + { headers: { 'Cookies': 'is-for-cake' } }), |
| + response: new Response('', |
| + { headers: { 'Vary': 'Cookies' } }) |
| + }, |
| + |
| + c_x_key_is_1: { |
| + request: new Request('http://example.com/c', |
| + { headers: { 'Cookies': 'x', 'X-Key': '1'} }), |
| + response: new Response('', |
| + { headers: { 'Vary': '*' } }) |
| + }, |
| + |
| + c_y_key_is_1: { |
| + request: new Request('http://example.com/c', |
| + { headers: { 'Cookies': 'y', 'X-Key': '1' } }), |
| + response: new Response('', |
| + { headers: { 'Vary': 'Cookies,X-Key'} }) |
| + }, |
| + |
| + c_y_key_is_2: { |
| + request: new Request('http://example.com/c', |
| + { headers: { 'Cookies': 'y', 'X-Key': '2' } }), |
| + response: new Response('', |
| + { headers: { 'Vary': 'Cookies,X-Key'} }) |
| + } |
| +}; |
| + |
| +promise_test(function(t) { |
| + var cache = new Cache(); |
|
jsbell
2014/08/15 20:49:33
Just noticing that the constructor isn't actually
asanka
2014/08/20 03:11:58
I replaced the Cache() constructor with a helper t
jsbell
2014/08/20 18:18:08
Great idea!
|
| + |
| + put_all_requests_in_cache(cache) |
| + |
| + .then(function() { |
| + return cache.matchAll(entries.a.request.url); |
| + }) |
| + .then(t.step_func(function(result) { |
|
jsbell
2014/08/15 20:49:33
t.step_func shouldn't be necessary in a promise_te
asanka
2014/08/20 03:11:58
Removed.
|
| + assert_array_equals(result, [entries.a.response], |
| + 'Cache.matchAll should match by URL.'); |
| + })) |
| + |
| + .then(function() { |
|
jsbell
2014/08/15 20:49:33
Since these cases are independent, can we split th
asanka
2014/08/20 03:11:58
Done.
|
| + return cache.matchAll(entries.a.request); |
| + }) |
| + .then(t.step_func(function(result) { |
| + assert_array_equals(result, [entries.a.response], |
| + 'Cache.matchAll should match by Request.'); |
| + })) |
| + |
| + .then(function() { |
| + return cache.matchAll(new Request(entries.a.request.url)); |
| + }) |
| + .then(t.step_func(function(result) { |
| + assert_array_equals(result, [entries.a.response], |
| + 'Cache.matchAll should match by Request.'); |
| + })) |
| + |
| + .then(function() { |
| + return cache.match(entries.a.request); |
| + }) |
| + .then(t.step_func(function(result) { |
| + assert_equals(result, entries.a.response, |
| + 'Cache.match should match by Request.'); |
| + })) |
| + |
| + .then(function() { |
| + return cache.matchAll(entries.a.request, { ignoreSearch: true }); |
| + }) |
| + .then(t.step_func(function(result) { |
| + assert_array_equivalent( |
| + result, [entries.a.response, entries.a_with_query.response], |
| + 'Cache.matchAll with ignoreSearch should ignore the search ' + |
| + 'parameters of cached request.'); |
| + })) |
| + |
| + .then(function() { |
| + return cache.matchAll(entries.a_with_query.request, |
| + { ignoreSearch: true }); |
| + }) |
| + .then(t.step_func(function(result) { |
| + assert_array_equivalent( |
| + result, [entries.a.response, entries.a_with_query.response], |
| + 'Cache.matchAll with ignoreSearch should ignore the search ' + |
| + 'parameters of request.'); |
| + })) |
| + |
| + .then(function() { |
| + return cache.matchAll(entries.cat.request); |
| + }) |
| + .then(t.step_func(function(result) { |
| + assert_array_equivalent( |
| + result, [entries.cat.response, entries.cat_with_fragment.response], |
| + 'Cache.matchAll should ignore URL hash.'); |
| + })) |
| + |
| + .then(function() { |
| + return cache.matchAll('http'); |
| + }) |
| + .then(t.step_func(function(result) { |
| + assert_array_equivalent( |
| + result, [], |
| + 'Cache.matchAll should treat query as a URL and not just a string fragment.'); |
|
jsbell
2014/08/15 20:49:34
nit: line length (80 cols)
asanka
2014/08/20 03:11:58
Done.
|
| + })) |
| + |
| + .then(function() { |
| + return cache.matchAll('http://example.com/cat', { prefixMatch: true }); |
|
jsbell
2014/08/15 20:49:34
nit: line length (80 cols)
asanka
2014/08/20 03:11:58
Done.
|
| + }) |
| + .then(t.step_func(function(result) { |
| + assert_array_equivalent( |
| + result, |
| + [ entries.cat.response, |
|
jsbell
2014/08/15 20:49:33
nit: break after [ and before ] for multi-line ini
asanka
2014/08/20 03:11:58
Done.
|
| + entries.cat_with_fragment.response, |
| + entries.cat_in_the_hat.response ], |
| + 'Cache.matchAll should honor prefixMatch.'); |
| + })) |
| + |
| + .then(function() { |
| + return cache.matchAll('http://example.com/cat/', { prefixMatch: true }); |
|
jsbell
2014/08/15 20:49:34
nit: line length (80 cols)
asanka
2014/08/20 03:11:58
Done.
|
| + }) |
| + .then(t.step_func(function(result) { |
| + assert_array_equivalent( |
| + result, [ entries.cat_in_the_hat.response ], |
| + 'Cache.matchAll should honor prefixMatch.'); |
| + })); |
| + |
| + }, 'Cache.match'); |
| + |
| +// Helpers --- |
| + |
| +function put_all_requests_in_cache(cache) { |
|
jsbell
2014/08/15 20:49:34
Could be written as:
return Promise.all(entries.m
asanka
2014/08/20 03:11:58
Ah. Thanks! Changed.
|
| + var promise_array = []; |
| + for (v in entries) { |
| + promise_array.push(cache.put(entries[v].request, |
| + entries[v].response)); |
| + } |
| + return Promise.all(promise_array); |
| +} |
| + |
| +function assert_array_equivalent(actual, expected, description) { |
|
jsbell
2014/08/15 20:49:34
For consistency with assert_array_equals(), rename
jsbell
2014/08/15 20:49:34
Can you add a comment that this is comparing the c
asanka
2014/08/20 03:11:58
Added a comment.
asanka
2014/08/20 03:11:58
Hmm. Were you going to suggest a different name?
jsbell
2014/08/20 18:18:08
I must have been misreading it. Name is fine, sorr
|
| + assert_true(Array.isArray(actual), description); |
| + assert_equals(actual.length, expected.length, description); |
| + for (var index = 0; index < expected.length; ++index) { |
| + assert_greater_than_equal(actual.indexOf(expected[index]), 0, description); |
|
jsbell
2014/08/15 20:49:34
This could use assert_in_array()
asanka
2014/08/20 03:11:58
Done.
|
| + } |
| +} |