UNPKG

3.84 kBJavaScriptView Raw
1/* global navigator:true, window:true, Modernizr:true, describe:true, expect:true, it:true, xit:true, before:true, beforeEach:true, after:true*/
2var DRIVERS = [
3 localforage.INDEXEDDB,
4 localforage.LOCALSTORAGE,
5 localforage.WEBSQL
6];
7
8DRIVERS.forEach(function(driverName) {
9 if ((!Modernizr.indexeddb && driverName === localforage.INDEXEDDB) ||
10 (!Modernizr.localstorage && driverName === localforage.LOCALSTORAGE) ||
11 (!Modernizr.websqldatabase && driverName === localforage.WEBSQL)) {
12 // Browser doesn't support this storage library, so we exit the API
13 // tests.
14 return;
15 }
16
17 describe('Service Worker support in ' + driverName, function() {
18 'use strict';
19
20 // Use this until a test is added to Modernizr
21 if (!('serviceworker' in Modernizr)) {
22 Modernizr.serviceworker = 'serviceWorker' in navigator;
23 }
24
25 if (!Modernizr.serviceworker) {
26 before.skip("doesn't have service worker support");
27 beforeEach.skip("doesn't have service worker support");
28 it.skip("doesn't have service worker support");
29 after.skip("doesn't have service worker support");
30 return;
31 }
32
33 if (!window.MessageChannel) {
34 before.skip("doesn't have MessageChannel support");
35 beforeEach.skip("doesn't have MessageChannel support");
36 it.skip("doesn't have MessageChannel support");
37 after.skip("doesn't have MessageChannel support");
38 return;
39 }
40
41 before(function(done) {
42 navigator.serviceWorker
43 .register('/test/serviceworker-client.js')
44 .then(function() {
45 return localforage.setDriver(driverName);
46 })
47 .then(done);
48 });
49
50 after(function(done) {
51 navigator.serviceWorker.ready
52 .then(function(registration) {
53 return registration.unregister();
54 })
55 .then(function(bool) {
56 if (bool) {
57 done();
58 } else {
59 done('service worker failed to unregister');
60 }
61 });
62 });
63
64 beforeEach(function(done) {
65 localforage.clear(done);
66 });
67
68 if (driverName === localforage.LOCALSTORAGE ||
69 driverName === localforage.WEBSQL) {
70 it.skip(driverName + ' is not supported in service workers');
71 return;
72 }
73
74 xit('should set a value on registration', function(done) {
75 navigator.serviceWorker.ready
76 .then(function() {
77 return localforage.getItem('service worker registration');
78 })
79 .then(function(result) {
80 expect(result)
81 .to.equal('serviceworker present');
82 done();
83 })
84 .catch(function(error) {
85 done(error);
86 });
87 });
88
89 it('saves data', function(done) {
90 var messageChannel = new MessageChannel();
91 messageChannel.port1.onmessage = function(event) {
92 expect(event.data.body)
93 .to.be('I have been set using ' + driverName);
94 done();
95 };
96
97 navigator.serviceWorker.ready
98 .then(function(registration) {
99 registration.active.postMessage({
100 driver: driverName,
101 value: 'I have been set'
102 }, [messageChannel.port2]);
103 })
104 .catch(function(error) {
105 done(error);
106 });
107 });
108 });
109});