From c65501f8bc6e5094b57caf40583f3a9c244b8aae Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Mon, 23 Mar 2015 16:36:17 -0400 Subject: [PATCH] Bug 1146585 - Add a test for Cache.delete; r=bkelly --- dom/cache/test/mochitest/mochitest.ini | 2 + .../test/mochitest/test_cache_delete.html | 20 ++++ dom/cache/test/mochitest/test_cache_delete.js | 111 ++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 dom/cache/test/mochitest/test_cache_delete.html create mode 100644 dom/cache/test/mochitest/test_cache_delete.js diff --git a/dom/cache/test/mochitest/mochitest.ini b/dom/cache/test/mochitest/mochitest.ini index 9c7600517974..60df62647a92 100644 --- a/dom/cache/test/mochitest/mochitest.ini +++ b/dom/cache/test/mochitest/mochitest.ini @@ -18,6 +18,7 @@ support-files = test_cache_keys.js test_cache_put.js test_cache_requestCache.js + test_cache_delete.js [test_cache.html] [test_cache_add.html] @@ -29,3 +30,4 @@ support-files = [test_cache_keys.html] [test_cache_put.html] [test_cache_requestCache.html] +[test_cache_delete.html] diff --git a/dom/cache/test/mochitest/test_cache_delete.html b/dom/cache/test/mochitest/test_cache_delete.html new file mode 100644 index 000000000000..a9bcf4328fe0 --- /dev/null +++ b/dom/cache/test/mochitest/test_cache_delete.html @@ -0,0 +1,20 @@ + + + + + Validate the Cache.delete() method + + + + + + + + + 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 000000000000..aa7bc94eb8eb --- /dev/null +++ b/dom/cache/test/mochitest/test_cache_delete.js @@ -0,0 +1,111 @@ +var name = "delete" + context; +var c; + +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.indexOf(tests[1]) >= 0, "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.indexOf(tests[1]) >= 0, "The correct entry must be deleted"); + ok(keys[1].url.indexOf(tests[2].replace("#fragment", "")) >= 0, "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.indexOf(tests[1]) >= 0, "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.indexOf(tests[0]) >= 0, "The correct entry must be deleted"); + ok(keys[1].url.indexOf(tests[1]) >= 0, "The correct entry must be deleted"); + ok(keys[2].url.indexOf(newURL) >= 0, "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(); +});