diff options
Diffstat (limited to 'dom/cache/test/mochitest/test_cache_keys.js')
-rw-r--r-- | dom/cache/test/mochitest/test_cache_keys.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/dom/cache/test/mochitest/test_cache_keys.js b/dom/cache/test/mochitest/test_cache_keys.js new file mode 100644 index 0000000000..fa37a60cb6 --- /dev/null +++ b/dom/cache/test/mochitest/test_cache_keys.js @@ -0,0 +1,98 @@ +/* global context testDone:true */ + +var name = "keys" + context; +var c; + +var tests = [ + "//mochi.test:8888/?page" + context, + "//mochi.test:8888/?another" + context, +]; + +caches + .open(name) + .then(function(cache) { + c = cache; + return c.addAll(tests); + }) + .then(function() { + // Add another cache entry using Cache.add + var another = "//mochi.test:8888/?yetanother" + context; + tests.push(another); + return c.add(another); + }) + .then(function() { + // Add another cache entry with URL fragment using Cache.add + var anotherWithFragment = + "//mochi.test:8888/?fragment" + context + "#fragment"; + tests.push(anotherWithFragment); + return c.add(anotherWithFragment); + }) + .then(function() { + return c.keys(); + }) + .then(function(keys) { + is(keys.length, tests.length, "Same number of elements"); + // Verify both the insertion order of the requests and their validity. + keys.forEach(function(r, i) { + ok(r instanceof Request, "Valid request object"); + ok(r.url.includes(tests[i]), "Valid URL"); + }); + // Try searching for just one request + return c.keys(tests[1]); + }) + .then(function(keys) { + is(keys.length, 1, "One match should be found"); + ok(keys[0].url.includes(tests[1]), "Valid URL"); + // Try to see if ignoreSearch works as expected. + return c.keys(new Request("//mochi.test:8888/?foo"), { + ignoreSearch: true, + }); + }) + .then(function(key_arr) { + is(key_arr.length, tests.length, "Same number of elements"); + key_arr.forEach(function(r, i) { + ok(r instanceof Request, "Valid request object"); + ok(r.url.includes(tests[i]), "Valid URL"); + }); + // Try to see if ignoreMethod works as expected + return Promise.all( + ["POST", "PUT", "DELETE", "OPTIONS"].map(function(method) { + var req = new Request(tests[2], { method }); + return c + .keys(req) + .then(function(keys) { + is( + keys.length, + 0, + "No request should be matched without ignoreMethod" + ); + return c.keys(req, { ignoreMethod: true }); + }) + .then(function(keys) { + is(keys.length, 1, "One match should be found"); + ok(keys[0].url.includes(tests[2]), "Valid URL"); + }); + }) + ); + }) + .then(function() { + // But HEAD should be allowed only when ignoreMethod is ture + return c.keys(new Request(tests[0], { method: "HEAD" }), { + ignoreMethod: true, + }); + }) + .then(function(keys) { + is(keys.length, 1, "One match should be found"); + ok(keys[0].url.includes(tests[0]), "Valid URL"); + // Make sure cacheName is ignored. + return c.keys(tests[0], { cacheName: "non-existing-cache" }); + }) + .then(function(keys) { + is(keys.length, 1, "One match should be found"); + ok(keys[0].url.includes(tests[0]), "Valid URL"); + return caches.delete(name); + }) + .then(function(deleted) { + ok(deleted, "The cache should be successfully deleted"); + testDone(); + }); |