123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- function arraysHaveSameContent(arr1, arr2) {
- if (arr1.length != arr2.length) {
- return false;
- }
- return arr1.every(function(value, index) {
- return arr2[index] === value;
- });
- }
- function testHas() {
- var name = "caches-has" + context;
- return caches.has(name).then(function(has) {
- ok(!has, name + " should not exist yet");
- return caches.open(name);
- }).then(function(c) {
- return caches.has(name);
- }).then(function(has) {
- ok(has, name + " should now exist");
- return caches.delete(name);
- }).then(function(deleted) {
- ok(deleted, "The deletion should finish successfully");
- return caches.has(name);
- }).then(function(has) {
- ok(!has, name + " should not exist any more");
- });
- }
- function testKeys() {
- var names = [
- // The names here are intentionally unsorted, to ensure the insertion order
- // and make sure we don't confuse it with an alphabetically sorted list.
- "caches-keys4" + context,
- "caches-keys0" + context,
- "caches-keys1" + context,
- "caches-keys3" + context,
- ];
- return caches.keys().then(function(keys) {
- is(keys.length, 0, "No keys should exist yet");
- return Promise.all(names.map(function(name) {
- return caches.open(name);
- }));
- }).then(function() {
- return caches.keys();
- }).then(function(keys) {
- ok(arraysHaveSameContent(keys, names), "Keys must match in insertion order");
- return Promise.all(names.map(function(name) {
- return caches.delete(name);
- }));
- }).then(function(deleted) {
- ok(arraysHaveSameContent(deleted, [true, true, true, true]), "All deletions must succeed");
- return caches.keys();
- }).then(function(keys) {
- is(keys.length, 0, "No keys should exist any more");
- });
- }
- function testMatchAcrossCaches() {
- var tests = [
- // The names here are intentionally unsorted, to ensure the insertion order
- // and make sure we don't confuse it with an alphabetically sorted list.
- {
- name: "caches-xmatch5" + context,
- request: "//mochi.test:8888/?5" + context,
- },
- {
- name: "caches-xmatch2" + context,
- request: "//mochi.test:8888/tests/dom/cache/test/mochitest/test_caches.js?2" + context,
- },
- {
- name: "caches-xmatch4" + context,
- request: "//mochi.test:8888/?4" + context,
- },
- ];
- return Promise.all(tests.map(function(test) {
- return caches.open(test.name).then(function(c) {
- return c.add(test.request);
- });
- })).then(function() {
- return caches.match("//mochi.test:8888/?5" + context, {ignoreSearch: true});
- }).then(function(match) {
- ok(match.url.indexOf("?5") > 0, "Match should come from the first cache");
- return caches.delete("caches-xmatch2" + context); // This should not change anything!
- }).then(function(deleted) {
- ok(deleted, "Deletion should finish successfully");
- return caches.match("//mochi.test:8888/?" + context, {ignoreSearch: true});
- }).then(function(match) {
- ok(match.url.indexOf("?5") > 0, "Match should still come from the first cache");
- return caches.delete("caches-xmatch5" + context); // This should eliminate the first match!
- }).then(function(deleted) {
- ok(deleted, "Deletion should finish successfully");
- return caches.match("//mochi.test:8888/?" + context, {ignoreSearch: true});
- }).then(function(match) {
- ok(match.url.indexOf("?4") > 0, "Match should come from the third cache");
- return caches.delete("caches-xmatch4" + context); // Game over!
- }).then(function(deleted) {
- ok(deleted, "Deletion should finish successfully");
- return caches.match("//mochi.test:8888/?" + context, {ignoreSearch: true});
- }).then(function(match) {
- is(typeof match, "undefined", "No matches should be found");
- });
- }
- function testDelete() {
- return caches.delete("delete" + context).then(function(deleted) {
- ok(!deleted, "Attempting to delete a non-existing cache should fail");
- return caches.open("delete" + context);
- }).then(function() {
- return caches.delete("delete" + context);
- }).then(function(deleted) {
- ok(deleted, "Delete should now succeed");
- });
- }
- testHas().then(function() {
- return testKeys();
- }).then(function() {
- return testMatchAcrossCaches();
- }).then(function() {
- return testDelete();
- }).then(function() {
- testDone();
- });
|