cache-keys.https.any.js (7568B)
1 // META: title=Cache.keys 2 // META: global=window,worker 3 // META: script=./resources/test-helpers.js 4 // META: timeout=long 5 6 cache_test(cache => { 7 return cache.keys() 8 .then(requests => { 9 assert_equals( 10 requests.length, 0, 11 'Cache.keys should resolve to an empty array for an empty cache'); 12 }); 13 }, 'Cache.keys() called on an empty cache'); 14 15 prepopulated_cache_test(simple_entries, function(cache, entries) { 16 return cache.keys('not-present-in-the-cache') 17 .then(function(result) { 18 assert_request_array_equals( 19 result, [], 20 'Cache.keys should resolve with an empty array on failure.'); 21 }); 22 }, 'Cache.keys with no matching entries'); 23 24 prepopulated_cache_test(simple_entries, function(cache, entries) { 25 return cache.keys(entries.a.request.url) 26 .then(function(result) { 27 assert_request_array_equals(result, [entries.a.request], 28 'Cache.keys should match by URL.'); 29 }); 30 }, 'Cache.keys with URL'); 31 32 prepopulated_cache_test(simple_entries, function(cache, entries) { 33 return cache.keys(entries.a.request) 34 .then(function(result) { 35 assert_request_array_equals( 36 result, [entries.a.request], 37 'Cache.keys should match by Request.'); 38 }); 39 }, 'Cache.keys with Request'); 40 41 prepopulated_cache_test(simple_entries, function(cache, entries) { 42 return cache.keys(new Request(entries.a.request.url)) 43 .then(function(result) { 44 assert_request_array_equals( 45 result, [entries.a.request], 46 'Cache.keys should match by Request.'); 47 }); 48 }, 'Cache.keys with new Request'); 49 50 prepopulated_cache_test(simple_entries, function(cache, entries) { 51 return cache.keys(entries.a.request, {ignoreSearch: true}) 52 .then(function(result) { 53 assert_request_array_equals( 54 result, 55 [ 56 entries.a.request, 57 entries.a_with_query.request 58 ], 59 'Cache.keys with ignoreSearch should ignore the ' + 60 'search parameters of cached request.'); 61 }); 62 }, 63 'Cache.keys with ignoreSearch option (request with no search ' + 64 'parameters)'); 65 66 prepopulated_cache_test(simple_entries, function(cache, entries) { 67 return cache.keys(entries.a_with_query.request, {ignoreSearch: true}) 68 .then(function(result) { 69 assert_request_array_equals( 70 result, 71 [ 72 entries.a.request, 73 entries.a_with_query.request 74 ], 75 'Cache.keys with ignoreSearch should ignore the ' + 76 'search parameters of request.'); 77 }); 78 }, 79 'Cache.keys with ignoreSearch option (request with search parameters)'); 80 81 cache_test(function(cache) { 82 var request = new Request('http://example.com/'); 83 var head_request = new Request('http://example.com/', {method: 'HEAD'}); 84 var response = new Response('foo'); 85 return cache.put(request.clone(), response.clone()) 86 .then(function() { 87 return cache.keys(head_request.clone()); 88 }) 89 .then(function(result) { 90 assert_request_array_equals( 91 result, [], 92 'Cache.keys should resolve with an empty array with a ' + 93 'mismatched method.'); 94 return cache.keys(head_request.clone(), 95 {ignoreMethod: true}); 96 }) 97 .then(function(result) { 98 assert_request_array_equals( 99 result, 100 [ 101 request, 102 ], 103 'Cache.keys with ignoreMethod should ignore the ' + 104 'method of request.'); 105 }); 106 }, 'Cache.keys supports ignoreMethod'); 107 108 cache_test(function(cache) { 109 var vary_request = new Request('http://example.com/c', 110 {headers: {'Cookies': 'is-for-cookie'}}); 111 var vary_response = new Response('', {headers: {'Vary': 'Cookies'}}); 112 var mismatched_vary_request = new Request('http://example.com/c'); 113 114 return cache.put(vary_request.clone(), vary_response.clone()) 115 .then(function() { 116 return cache.keys(mismatched_vary_request.clone()); 117 }) 118 .then(function(result) { 119 assert_request_array_equals( 120 result, [], 121 'Cache.keys should resolve with an empty array with a ' + 122 'mismatched vary.'); 123 return cache.keys(mismatched_vary_request.clone(), 124 {ignoreVary: true}); 125 }) 126 .then(function(result) { 127 assert_request_array_equals( 128 result, 129 [ 130 vary_request, 131 ], 132 'Cache.keys with ignoreVary should ignore the ' + 133 'vary of request.'); 134 }); 135 }, 'Cache.keys supports ignoreVary'); 136 137 prepopulated_cache_test(simple_entries, function(cache, entries) { 138 return cache.keys(entries.cat.request.url + '#mouse') 139 .then(function(result) { 140 assert_request_array_equals( 141 result, 142 [ 143 entries.cat.request, 144 ], 145 'Cache.keys should ignore URL fragment.'); 146 }); 147 }, 'Cache.keys with URL containing fragment'); 148 149 prepopulated_cache_test(simple_entries, function(cache, entries) { 150 return cache.keys('http') 151 .then(function(result) { 152 assert_request_array_equals( 153 result, [], 154 'Cache.keys should treat query as a URL and not ' + 155 'just a string fragment.'); 156 }); 157 }, 'Cache.keys with string fragment "http" as query'); 158 159 prepopulated_cache_test(simple_entries, function(cache, entries) { 160 return cache.keys() 161 .then(function(result) { 162 assert_request_array_equals( 163 result, 164 simple_entries.map(entry => entry.request), 165 'Cache.keys without parameters should match all entries.'); 166 }); 167 }, 'Cache.keys without parameters'); 168 169 prepopulated_cache_test(simple_entries, function(cache, entries) { 170 return cache.keys(undefined) 171 .then(function(result) { 172 assert_request_array_equals( 173 result, 174 simple_entries.map(entry => entry.request), 175 'Cache.keys with undefined request should match all entries.'); 176 }); 177 }, 'Cache.keys with explicitly undefined request'); 178 179 cache_test(cache => { 180 return cache.keys(undefined, {}) 181 .then(requests => { 182 assert_equals( 183 requests.length, 0, 184 'Cache.keys should resolve to an empty array for an empty cache'); 185 }); 186 }, 'Cache.keys with explicitly undefined request and empty options'); 187 188 prepopulated_cache_test(vary_entries, function(cache, entries) { 189 return cache.keys() 190 .then(function(result) { 191 assert_request_array_equals( 192 result, 193 [ 194 entries.vary_cookie_is_cookie.request, 195 entries.vary_cookie_is_good.request, 196 entries.vary_cookie_absent.request, 197 ], 198 'Cache.keys without parameters should match all entries.'); 199 }); 200 }, 'Cache.keys without parameters and VARY entries'); 201 202 prepopulated_cache_test(simple_entries, function(cache, entries) { 203 return cache.keys(new Request(entries.cat.request.url, {method: 'HEAD'})) 204 .then(function(result) { 205 assert_request_array_equals( 206 result, [], 207 'Cache.keys should not match HEAD request unless ignoreMethod ' + 208 'option is set.'); 209 }); 210 }, 'Cache.keys with a HEAD Request'); 211 212 done();