1 |
|
2 | var DRIVERS = [
|
3 | localforage.INDEXEDDB,
|
4 | localforage.LOCALSTORAGE,
|
5 | localforage.WEBSQL
|
6 | ];
|
7 |
|
8 | DRIVERS.forEach(function(driverName) {
|
9 | if ((!Modernizr.indexeddb && driverName === localforage.INDEXEDDB) ||
|
10 | (!Modernizr.localstorage && driverName === localforage.LOCALSTORAGE) ||
|
11 | (!Modernizr.websqldatabase && driverName === localforage.WEBSQL)) {
|
12 |
|
13 |
|
14 | return;
|
15 | }
|
16 |
|
17 | describe('Service Worker support in ' + driverName, function() {
|
18 | 'use strict';
|
19 |
|
20 |
|
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 | });
|