summaryrefslogtreecommitdiff
path: root/dom/cache/test/mochitest/test_cache.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/cache/test/mochitest/test_cache.js')
-rw-r--r--dom/cache/test/mochitest/test_cache.js131
1 files changed, 131 insertions, 0 deletions
diff --git a/dom/cache/test/mochitest/test_cache.js b/dom/cache/test/mochitest/test_cache.js
new file mode 100644
index 0000000000..c8927956c9
--- /dev/null
+++ b/dom/cache/test/mochitest/test_cache.js
@@ -0,0 +1,131 @@
+var c = null
+var request = "http://example.com/hmm?q=foobar" + context;
+var response = new Response("This is some Response!");
+var name = 'snafu' + context;
+var foobar = 'foobar' + context;
+
+ok(!!caches, 'caches object should be available on global');
+caches.open(name).then(function(openCache) {
+ ok(openCache instanceof Cache, 'cache object should be resolved from caches.open');
+ return caches.has(name);
+}).then(function(hasResult) {
+ ok(hasResult, 'caches.has() should resolve true');
+ return caches.keys();
+}).then(function(keys) {
+ ok(!!keys, 'caches.keys() should resolve to a truthy value');
+ ok(keys.length >= 1, 'caches.keys() should resolve to an array of length at least 1');
+ ok(keys.indexOf(name) >= 0, 'caches.keys() should resolve to an array containing key');
+ return caches.delete(name);
+}).then(function(deleteResult) {
+ ok(deleteResult, 'caches.delete() should resolve true');
+ return caches.has(name);
+}).then(function(hasMissingCache) {
+ ok(!hasMissingCache, 'missing key should return false from has');
+}).then(function() {
+ return caches.open(name);
+}).then(function(snafu) {
+ return snafu.keys();
+}).then(function(empty) {
+ is(0, empty.length, 'cache.keys() should resolve to an array of length 0');
+}).then(function() {
+ return caches.open(name);
+}).then(function(snafu) {
+ var req = './cachekey';
+ var res = new Response("Hello world");
+ return snafu.put('ftp://invalid', res).then(function() {
+ ok(false, 'This should fail');
+ }).catch(function (err) {
+ is(err.name, 'TypeError', 'put() should throw TypeError for invalid scheme');
+ return snafu.put(req, res);
+ }).then(function(v) {
+ return snafu;
+ });
+}).then(function(snafu) {
+ return Promise.all([snafu, snafu.keys()]);
+}).then(function(args) {
+ var snafu = args[0];
+ var keys = args[1];
+ is(1, keys.length, 'cache.keys() should resolve to an array of length 1');
+ ok(keys[0] instanceof Request, 'key should be a Request');
+ ok(keys[0].url.match(/cachekey$/), 'Request URL should match original');
+ return Promise.all([snafu, snafu.match(keys[0]), snafu.match('ftp://invalid')]);
+}).then(function(args) {
+ var snafu = args[0];
+ var response = args[1];
+ ok(response instanceof Response, 'value should be a Response');
+ is(response.status, 200, 'Response status should be 200');
+ is(undefined, args[2], 'Match with invalid scheme should resolve undefined');
+ return Promise.all([snafu, snafu.put('./cachekey2', response)]);
+}).then(function(args) {
+ var snafu = args[0]
+ return snafu.match('./cachekey2');
+}).then(function(response) {
+ return response.text().then(function(v) {
+ is(v, "Hello world", "Response body should match original");
+ });
+}).then(function() {
+ // FIXME(nsm): Can't use a Request object for now since the operations
+ // consume it's 'body'. See
+ // https://github.com/slightlyoff/ServiceWorker/issues/510.
+ return caches.open(foobar);
+}).then(function(openCache) {
+ c = openCache;
+ return c.put(request, response);
+}).then(function(putResponse) {
+ is(putResponse, undefined, 'The promise should resolve to undefined');
+ return c.keys(request);
+}).then(function(keys) {
+ ok(keys, 'Valid keys object expected');
+ is(keys.length, 1, 'Only one key is expected');
+ return c.keys();
+}).then(function(keys) {
+ ok(keys, 'Valid keys object expected');
+ is(keys.length, 1, 'Only one key is expected');
+ return c.matchAll(request);
+}).then(function(matchAllResponses) {
+ ok(matchAllResponses, 'matchAll should succeed');
+ is(matchAllResponses.length, 1, 'Only one match is expected');
+ return c.match(request);
+}).then(function(matchResponse) {
+ ok(matchResponse, 'match should succeed');
+ return caches.match(request);
+}).then(function(storageMatchResponse) {
+ ok(storageMatchResponse, 'storage match should succeed');
+ return caches.match(request, {cacheName:foobar});
+}).then(function(storageMatchResponse) {
+ ok(storageMatchResponse, 'storage match with cacheName should succeed');
+ var request2 = new Request("http://example.com/hmm?q=snafu" + context);
+ return c.match(request2, {ignoreSearch:true});
+}).then(function(match2Response) {
+ ok(match2Response, 'match should succeed');
+ return c.delete(request);
+}).then(function(deleteResult) {
+ ok(deleteResult, 'delete should succeed');
+ return c.keys();
+}).then(function(keys) {
+ ok(keys, 'Valid keys object expected');
+ is(keys.length, 0, 'Zero keys is expected');
+ return c.matchAll(request);
+}).then(function(matchAll2Responses) {
+ ok(matchAll2Responses, 'matchAll should succeed');
+ is(matchAll2Responses.length, 0, 'Zero matches is expected');
+ return caches.has(foobar);
+}).then(function(hasResult) {
+ ok(hasResult, 'has should succeed');
+ return caches.keys();
+}).then(function(keys) {
+ ok(keys, 'Valid keys object expected');
+ ok(keys.length >= 2, 'At least two keys are expected');
+ ok(keys.indexOf(name) >= 0, 'snafu should exist');
+ ok(keys.indexOf(foobar) >= keys.indexOf(name), 'foobar should come after it');
+ return caches.delete(foobar);
+}).then(function(deleteResult) {
+ ok(deleteResult, 'delete should succeed');
+ return caches.has(foobar);
+}).then(function(hasMissingCache) {
+ ok(!hasMissingCache, 'has should have a result');
+ return caches.delete(name);
+}).then(function(deleteResult) {
+ ok(deleteResult, 'delete should succeed');
+ testDone();
+})