Chromium Code Reviews| 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 .catch(unreached_rejection(test, 'Unregister should not fail')) |
| 7 return navigator.serviceWorker.register(url, options); | 7 .then(test.step_func(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 .catch(unreached_rejection(test, 'Registration should not fail')); |
| 11 return Promise.resolve(worker); | |
| 12 }), | |
| 13 unreached_rejection(test, 'Registration should not fail') | |
| 14 ); | |
| 15 } | 11 } |
| 16 | 12 |
| 17 function service_worker_unregister_and_done(test, scope) { | 13 function service_worker_unregister_and_done(test, scope) { |
| 18 return navigator.serviceWorker.unregister(scope).then( | 14 return navigator.serviceWorker.unregister(scope) |
| 19 test.done.bind(test), | 15 .then(test.done.bind(test), |
| 20 unreached_rejection(test, 'Unregister should not fail')); | 16 unreached_rejection(test, 'Unregister should not fail')); |
| 21 } | 17 } |
| 22 | 18 |
| 23 // Rejection-specific helper that provides more details | 19 // Rejection-specific helper that provides more details |
| 24 function unreached_rejection(test, prefix) { | 20 function unreached_rejection(test, prefix) { |
| 25 return test.step_func(function(error) { | 21 return test.step_func(function(error) { |
| 26 var reason = error.name ? error.name : error; | 22 var reason = error.message || error.name || error; |
|
falken
2014/08/07 12:45:45
Thank you for this!!! I've been using this locally
| |
| 27 var prefix = prefix ? prefix : "unexpected rejection"; | 23 var error_prefix = prefix || 'unexpected rejection'; |
| 28 assert_unreached(prefix + ': ' + reason); | 24 assert_unreached(error_prefix + ': ' + reason); |
| 29 }); | 25 }); |
| 30 } | 26 } |
| 31 | 27 |
| 32 // FIXME: Clean up the iframe when the test completes. | 28 // FIXME: Clean up the iframe when the test completes. |
| 33 function with_iframe(url, f) { | 29 function with_iframe(url, f) { |
| 34 return new Promise(function(resolve, reject) { | 30 return new Promise(function(resolve, reject) { |
| 35 var frame = document.createElement('iframe'); | 31 var frame = document.createElement('iframe'); |
| 36 frame.src = url; | 32 frame.src = url; |
| 37 frame.onload = function() { | 33 frame.onload = function() { |
| 38 if (f) { | 34 if (f) { |
| 39 f(frame); | 35 f(frame); |
| 40 } | 36 } |
| 41 resolve(frame); | 37 resolve(frame); |
| 42 }; | 38 }; |
| 43 document.body.appendChild(frame); | 39 document.body.appendChild(frame); |
| 44 }); | 40 }); |
| 45 } | 41 } |
| 46 | 42 |
| 47 function normalizeURL(url) { | 43 function normalizeURL(url) { |
| 48 return new URL(url, document.location).toString().replace(/#.*$/, ''); | 44 return new URL(url, document.location).toString().replace(/#.*$/, ''); |
| 49 } | 45 } |
| 50 | 46 |
| 51 function wait_for_state(test, worker, state) { | 47 function wait_for_state(test, worker, state) { |
| 52 return new Promise(test.step_func(function(resolve, reject) { | 48 return new Promise(test.step_func(function(resolve, reject) { |
| 53 worker.addEventListener('statechange', test.step_func(function() { | 49 worker.addEventListener('statechange', |
| 50 test.step_func(function() { | |
| 54 if (worker.state === state) | 51 if (worker.state === state) |
| 55 resolve(state); | 52 resolve(state); |
| 56 })); | 53 })); |
| 57 })); | 54 })); |
| 58 } | 55 } |
| 59 | 56 |
| 60 (function() { | 57 (function() { |
| 61 function fetch_tests_from_worker(worker) { | 58 function fetch_tests_from_worker(worker) { |
| 62 return new Promise(function(resolve, reject) { | 59 return new Promise(function(resolve, reject) { |
| 63 var messageChannel = new MessageChannel(); | 60 var messageChannel = new MessageChannel(); |
| 64 messageChannel.port1.addEventListener('message', function(message) { | 61 messageChannel.port1.addEventListener('message', function(message) { |
| 65 if (message.data.type == 'complete') { | 62 if (message.data.type == 'complete') { |
| 66 synthesize_tests(message.data.tests, message.data.status); | 63 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); | 99 var test = async_test(description); |
| 103 service_worker_unregister_and_register(test, url, scope) | 100 service_worker_unregister_and_register(test, url, scope) |
| 104 .then(function(worker) { return fetch_tests_from_worker(worker); }) | 101 .then(function(worker) { return fetch_tests_from_worker(worker); }) |
| 105 .then(function() { return navigator.serviceWorker.unregister(scope); }) | 102 .then(function() { return navigator.serviceWorker.unregister(scope); }) |
| 106 .then(function() { test.done(); }) | 103 .then(function() { test.done(); }) |
| 107 .catch(test.step_func(function(e) { throw e; })); | 104 .catch(test.step_func(function(e) { throw e; })); |
| 108 }; | 105 }; |
| 109 | 106 |
| 110 self.service_worker_test = service_worker_test; | 107 self.service_worker_test = service_worker_test; |
| 111 })(); | 108 })(); |
| OLD | NEW |