blob: 5ea64609b0a9f8b44848cf837309cf263b63112e [file] [log] [blame]
// This helper will setup a small test framework that will use TESTS and run
// them sequentially and call self.postMessage('quit') when done.
// This helper also exposes |client|, |postMessage()|, |runNextTestOrQuit()|,
// |synthesizeNotificationClick()| and |initialize()|.
importScripts('sw-test-helpers.js');
var TESTS = [
function testWithNoNotificationClick() {
clients.openWindow('/foo.html').catch(function() {
self.postMessage('openWindow() outside of a notificationclick event failed');
}).then(runNextTestOrQuit);
},
function testInStackOutOfWaitUntil() {
synthesizeNotificationClick().then(function() {
clients.openWindow('/foo.html').then(function() {
self.postMessage('openWindow() in notificationclick outside of waitUntil but in stack succeeded');
}).then(runNextTestOrQuit);
});
},
function testOutOfStackOutOfWaitUntil() {
synthesizeNotificationClick().then(function() {
self.clients.matchAll().then(function() {
clients.openWindow('/foo.html').catch(function() {
self.postMessage('openWindow() in notificationclick outside of waitUntil not in stack failed');
}).then(runNextTestOrQuit);
});
});
},
function testInWaitUntilAsyncAndDoubleCall() {
synthesizeNotificationClick().then(function(e) {
e.waitUntil(self.clients.matchAll().then(function() {
return clients.openWindow('/foo.html').then(function() {
self.postMessage('openWindow() in notificationclick\'s waitUntil suceeded');
}).then(runNextTestOrQuit);
}));
});
},
function testDoubleCallInWaitUntilAsync() {
synthesizeNotificationClick().then(function(e) {
e.waitUntil(self.clients.matchAll().then(function() {
return clients.openWindow('/foo.html').then(function() {
return clients.openWindow('/foo.html');
}).catch(function() {
self.postMessage('openWindow() called twice failed');
}).then(runNextTestOrQuit);
}));
});
},
function testWaitUntilTimeout() {
var p = new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, 2000);
});
synthesizeNotificationClick().then(function(e) {
e.waitUntil(p.then(function() {
return clients.openWindow('/foo.html').catch(function() {
self.postMessage('openWindow() failed after timeout');
}).then(runNextTestOrQuit);
}));
});
},
function testFocusWindowOpenWindowCombo() {
synthesizeNotificationClick().then(function(e) {
e.waitUntil(client.focus().then(function() {
clients.openWindow().catch(function() {
self.postMessage('openWindow() failed because a window was focused before');
}).then(runNextTestOrQuit);
}));
});
},
];
self.onmessage = function(e) {
if (e.data == 'start') {
e.waitUntil(initialize().then(runNextTestOrQuit));
} else {
e.waitUntil(initialize().then(function() {
self.postMessage('received unexpected message');
self.postMessage('quit');
}));
}
};