diff options
Diffstat (limited to 'dom/cache/test/mochitest/test_cache_delete.js')
-rw-r--r-- | dom/cache/test/mochitest/test_cache_delete.js | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/dom/cache/test/mochitest/test_cache_delete.js b/dom/cache/test/mochitest/test_cache_delete.js new file mode 100644 index 0000000000..3f1324493a --- /dev/null +++ b/dom/cache/test/mochitest/test_cache_delete.js @@ -0,0 +1,132 @@ +/* global context testDone:true */ + +var name = "delete" + context; + +function setupTest(reqs) { + return new Promise(function(resolve, reject) { + var cache; + caches + .open(name) + .then(function(c) { + cache = c; + return c.addAll(reqs); + }) + .then(function() { + resolve(cache); + }) + .catch(function(err) { + reject(err); + }); + }); +} + +function testBasics() { + var tests = [ + "//mochi.test:8888/?foo" + context, + "//mochi.test:8888/?bar" + context, + ]; + var cache; + return setupTest(tests) + .then(function(c) { + cache = c; + return cache.delete("//mochi.test:8888/?baz"); + }) + .then(function(deleted) { + ok(!deleted, "Deleting a non-existing entry should fail"); + return cache.keys(); + }) + .then(function(keys) { + is(keys.length, 2, "No entries from the cache should be deleted"); + return cache.delete(tests[0]); + }) + .then(function(deleted) { + ok(deleted, "Deleting an existing entry should succeed"); + return cache.keys(); + }) + .then(function(keys) { + is(keys.length, 1, "Only one entry should exist now"); + ok(keys[0].url.includes(tests[1]), "The correct entry must be deleted"); + }); +} + +function testFragment() { + var tests = [ + "//mochi.test:8888/?foo" + context, + "//mochi.test:8888/?bar" + context, + "//mochi.test:8888/?baz" + context + "#fragment", + ]; + var cache; + return setupTest(tests) + .then(function(c) { + cache = c; + return cache.delete(tests[0] + "#fragment"); + }) + .then(function(deleted) { + ok(deleted, "Deleting an existing entry should succeed"); + return cache.keys(); + }) + .then(function(keys) { + is(keys.length, 2, "Only one entry should exist now"); + ok(keys[0].url.includes(tests[1]), "The correct entry must be deleted"); + ok( + keys[1].url.includes(tests[2].replace("#fragment", "")), + "The correct entry must be deleted" + ); + // Now, delete a request that was added with a fragment + return cache.delete("//mochi.test:8888/?baz" + context); + }) + .then(function(deleted) { + ok(deleted, "Deleting an existing entry should succeed"); + return cache.keys(); + }) + .then(function(keys) { + is(keys.length, 1, "Only one entry should exist now"); + ok(keys[0].url.includes(tests[1]), "3The correct entry must be deleted"); + }); +} + +function testInterleaved() { + var tests = [ + "//mochi.test:8888/?foo" + context, + "//mochi.test:8888/?bar" + context, + ]; + var newURL = "//mochi.test:8888/?baz" + context; + var cache; + return setupTest(tests) + .then(function(c) { + cache = c; + // Simultaneously add and delete a request + return Promise.all([cache.delete(newURL), cache.add(newURL)]); + }) + .then(function(result) { + ok(!result[1], "deletion should fail"); + return cache.keys(); + }) + .then(function(keys) { + is(keys.length, 3, "Tree entries should still exist"); + ok(keys[0].url.includes(tests[0]), "The correct entry must be deleted"); + ok(keys[1].url.includes(tests[1]), "The correct entry must be deleted"); + ok( + keys[2].url.includes(newURL), + "The new entry should be correctly inserted" + ); + }); +} + +// Make sure to clean up after each test step. +function step(testPromise) { + return testPromise.then(function() { + caches.delete(name); + }); +} + +step(testBasics()) + .then(function() { + return step(testFragment()); + }) + .then(function() { + return step(testInterleaved()); + }) + .then(function() { + testDone(); + }); |