OLD | NEW |
---|---|
1 // Adapter for testharness.js-style tests with Service Workers | 1 // Adapter for testharness.js-style tests with Service Workers |
2 | 2 |
3 function service_worker_unregister_and_register(test, url, scope) { | 3 function service_worker_unregister_and_register(test, url, scope) { |
4 var options = scope ? { scope: scope } : {}; | 4 var options = scope ? {scope: scope} : {}; |
5 return navigator.serviceWorker.unregister(scope).then( | 5 return navigator.serviceWorker.unregister(scope) |
6 test.step_func(function() { | 6 .then(test.step_func( |
7 return navigator.serviceWorker.register(url, options); | 7 function() { |
8 }), | 8 return navigator.serviceWorker.register(url, options); |
9 unreached_rejection(test, 'Unregister should not fail') | 9 }), |
10 ).then(test.step_func(function(worker) { | 10 unreached_rejection(test, 'Unregister should not fail')) |
11 return Promise.resolve(worker); | 11 .then( |
12 }), | 12 test.step_func(function(worker) { return Promise.resolve(worker); }), |
jsbell
2014/07/31 20:37:23
Is this .then() clause necessary, or can we drop i
asanka
2014/08/01 05:15:52
Replaced with a .catch().then().catch() chain.
| |
13 unreached_rejection(test, 'Registration should not fail') | 13 unreached_rejection(test, 'Registration should not fail')); |
14 ); | |
15 } | 14 } |
16 | 15 |
17 function service_worker_unregister_and_done(test, scope) { | 16 function service_worker_unregister_and_done(test, scope) { |
18 return navigator.serviceWorker.unregister(scope).then( | 17 return navigator.serviceWorker.unregister(scope) |
19 test.done.bind(test), | 18 .then(test.done.bind(test), |
20 unreached_rejection(test, 'Unregister should not fail')); | 19 unreached_rejection(test, 'Unregister should not fail')); |
21 } | 20 } |
22 | 21 |
23 // Rejection-specific helper that provides more details | 22 // Rejection-specific helper that provides more details |
24 function unreached_rejection(test, prefix) { | 23 function unreached_rejection(test, prefix) { |
25 return test.step_func(function(error) { | 24 return test.step_func(function(error) { |
26 var reason = error.name ? error.name : error; | 25 var reason = error.message || error.name || error; |
27 var prefix = prefix ? prefix : "unexpected rejection"; | 26 var error_prefix = prefix || 'unexpected rejection'; |
28 assert_unreached(prefix + ': ' + reason); | 27 assert_unreached(error_prefix + ': ' + reason); |
29 }); | 28 }); |
30 } | 29 } |
31 | 30 |
32 // FIXME: Clean up the iframe when the test completes. | 31 // FIXME: Clean up the iframe when the test completes. |
33 function with_iframe(url, f) { | 32 function with_iframe(url, f) { |
34 return new Promise(function(resolve, reject) { | 33 return new Promise(function(resolve, reject) { |
35 var frame = document.createElement('iframe'); | 34 var frame = document.createElement('iframe'); |
36 frame.src = url; | 35 frame.src = url; |
37 frame.onload = function() { | 36 frame.onload = function() { |
38 if (f) { | 37 if (f) { |
39 f(frame); | 38 f(frame); |
40 } | 39 } |
41 resolve(frame); | 40 resolve(frame); |
42 }; | 41 }; |
43 document.body.appendChild(frame); | 42 document.body.appendChild(frame); |
44 }); | 43 }); |
45 } | 44 } |
46 | 45 |
47 function normalizeURL(url) { | 46 function normalizeURL(url) { |
48 return new URL(url, document.location).toString().replace(/#.*$/, ''); | 47 return new URL(url, document.location).toString().replace(/#.*$/, ''); |
49 } | 48 } |
50 | 49 |
51 function wait_for_state(test, worker, state) { | 50 function wait_for_state(test, worker, state) { |
52 return new Promise(test.step_func(function(resolve, reject) { | 51 return new Promise(test.step_func(function(resolve, reject) { |
53 worker.addEventListener('statechange', test.step_func(function() { | 52 worker.addEventListener('statechange', |
53 test.step_func(function() { | |
54 if (worker.state === state) | 54 if (worker.state === state) |
55 resolve(state); | 55 resolve(state); |
56 })); | 56 })); |
57 })); | 57 })); |
58 } | 58 } |
59 | 59 |
60 (function() { | 60 (function() { |
61 var fetch_tests_from_worker = function(worker) { | 61 var fetch_tests_from_worker = function(worker) { |
62 return new Promise(function(resolve, reject) { | 62 return new Promise(function(resolve, reject) { |
63 var messageChannel = new MessageChannel(); | 63 var messageChannel = new MessageChannel(); |
64 on_event(messageChannel.port1, 'message', function(message) { | 64 on_event(messageChannel.port1, 'message', function(message) { |
65 if (message.data.type == 'complete') { | 65 if (message.data.type == 'complete') { |
66 synthesize_tests(message.data.tests, message.data.status); | 66 synthesize_tests(message.data.tests, message.data.status); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
102 var test = async_test(description); | 102 var test = async_test(description); |
103 service_worker_unregister_and_register(test, url, scope) | 103 service_worker_unregister_and_register(test, url, scope) |
104 .then(function(worker) { return fetch_tests_from_worker(worker); }) | 104 .then(function(worker) { return fetch_tests_from_worker(worker); }) |
105 .then(function() { return navigator.serviceWorker.unregister(scope); }) | 105 .then(function() { return navigator.serviceWorker.unregister(scope); }) |
106 .then(function() { test.done(); }) | 106 .then(function() { test.done(); }) |
107 .catch(test.step_func(function(e) { throw e; })); | 107 .catch(test.step_func(function(e) { throw e; })); |
108 }; | 108 }; |
109 | 109 |
110 self.service_worker_test = service_worker_test; | 110 self.service_worker_test = service_worker_test; |
111 })(); | 111 })(); |
OLD | NEW |