/* 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(); });