Index: LayoutTests/http/tests/cachestorage/resources/test-helpers.js |
diff --git a/LayoutTests/http/tests/cachestorage/resources/test-helpers.js b/LayoutTests/http/tests/cachestorage/resources/test-helpers.js |
index 91110950d568d5cb7b1808fa2c6cb2de947a02de..179b02e769b44a1a15116f2c168a2be8d4ca46be 100644 |
--- a/LayoutTests/http/tests/cachestorage/resources/test-helpers.js |
+++ b/LayoutTests/http/tests/cachestorage/resources/test-helpers.js |
@@ -35,3 +35,153 @@ function cache_test(test_function, description) { |
.then(test_function); |
}, description); |
} |
+ |
+// A set of Request/Response pairs to be used with prepopulated_cache_test(). |
+var simple_entries = [ |
+ { |
+ name: 'a', |
+ request: new Request('http://example.com/a'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'b', |
+ request: new Request('http://example.com/b'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'a_with_query', |
+ request: new Request('http://example.com/a?q=r'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'A', |
+ request: new Request('http://example.com/A'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'a_https', |
+ request: new Request('https://example.com/a'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'a_org', |
+ request: new Request('http://example.org/a'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'cat', |
+ request: new Request('http://example.com/cat'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'catmandu', |
+ request: new Request('http://example.com/catmandu'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'cat_num_lives', |
+ request: new Request('http://example.com/cat?lives=9'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'cat_in_the_hat', |
+ request: new Request('http://example.com/cat/in/the/hat'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'secret_cat', |
+ request: new Request('http://tom:jerry@example.com/cat'), |
+ response: new Response('') |
+ }, |
+ |
+ { |
+ name: 'top_secret_cat', |
+ request: new Request('http://tom:j3rry@example.com/cat'), |
+ response: new Response('') |
+ }, |
+ { |
+ name: 'non_2xx_response', |
+ request: new Request('http://example.com/non2xx'), |
+ response: new Response('', {status: 404, statusText: 'nope'}) |
+ }, |
+ |
+ { |
+ name: 'error_response', |
+ request: new Request('http://example.com/error'), |
+ response: Response.error() |
+ }, |
+]; |
+ |
+// A set of Request/Response pairs to be used with prepopulated_cache_test(). |
+// These contain a mix of test cases that use Vary headers. |
+var vary_entries = [ |
+ { |
+ name: 'vary_cookie_is_cookie', |
+ request: new Request('http://example.com/c', |
+ {headers: {'Cookies': 'is-for-cookie'}}), |
+ response: new Response('', |
+ {headers: {'Vary': 'Cookies'}}) |
+ }, |
+ |
+ { |
+ name: 'vary_cookie_is_good', |
+ request: new Request('http://example.com/c', |
+ {headers: {'Cookies': 'is-good-enough-for-me'}}), |
+ response: new Response('', |
+ {headers: {'Vary': 'Cookies'}}) |
+ }, |
+ |
+ { |
+ name: 'vary_cookie_absent', |
+ request: new Request('http://example.com/c'), |
+ response: new Response('', |
+ {headers: {'Vary': 'Cookies'}}) |
+ }, |
+ |
+ { |
+ name: 'vary_wildcard', |
+ request: new Request('http://example.com/c', |
+ {headers: {'Cookies': 'x', 'X-Key': '1'}}), |
+ response: new Response('', |
+ {headers: {'Vary': '*'}}) |
+ } |
+]; |
+ |
+// Run |test_function| with a Cache object and a map of entries. Prior to the |
+// call, the Cache is populated by cache entries from |entries|. The latter is |
+// expected to be an Object mapping arbitrary keys to objects of the form |
+// {request: <Request object>, response: <Response object>}. There's no |
+// guarantee on the order in which entries will be added to the cache. |
+// |
+// |test_function| should return a Promise that can be used with promise_test. |
+function prepopulated_cache_test(entries, test_function, description) { |
+ cache_test(function(cache) { |
+ var p = Promise.resolve(); |
+ var hash = {}; |
+ return Promise.all(entries.map(function(entry) { |
+ hash[entry.name] = entry; |
+ return cache.put(entry.request.clone(), |
+ entry.response.clone()) |
+ .catch(function(e) { |
+ assert_unreached( |
+ 'Test setup failed for entry ' + entry.name + ': ' + e); |
+ }); |
+ })) |
+ .then(function() { |
+ assert_equals(Object.keys(hash).length, entries.length); |
+ }) |
+ .then(function() { |
+ return test_function(cache, hash); |
+ }); |
+ }, description); |
+} |