| <!DOCTYPE html> | |
| <!-- | |
| Copyright 2022 The Cobalt Authors. All Rights Reserved. | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| <!-- | |
| Note: This is a very basic test of the existing minimal Web Worker | |
| functionality. This can be expanded as more functionality is implemented, | |
| but probably will be superseded by Web Platform Tests. | |
| --> | |
| <head> | |
| <title>Cobalt Web Worker Test</title> | |
| <script src='black_box_js_test_utils.js'></script> | |
| </head> | |
| <body> | |
| <script> | |
| var window_error_event_count = 0; | |
| var worker_error_event_count = 0; | |
| window.onerror = function (message) { | |
| window_error_event_count += 1; | |
| console.error('window got onerror', message); | |
| notReached(); | |
| }; | |
| var message_event_count = 0; | |
| // This is expected trigger an error event on the Worker object. | |
| var worker_with_error = new Worker('web_worker_test_with_syntax_error.js', | |
| { name: 'worker_with_error' }); | |
| worker_with_error.onerror = function (event) { | |
| worker_error_event_count += 1; | |
| assertIncludes('TypeError: self.Foo is not a function', event.message); | |
| }; | |
| var worker = new Worker('web_worker_test.js', { name: 'test_worker' }); | |
| worker.onerror = function (event) { | |
| worker_error_event_count += 1; | |
| console.error('worker got onerror', event.message); | |
| notReached(); | |
| }; | |
| worker.onmessage = function (event) { | |
| message_event_count += 1; | |
| switch (message_event_count) { | |
| case 1: | |
| assertEqual('web worker test loaded', event.data); | |
| break; | |
| case 2: | |
| // The first script is expected to execute even though the next | |
| // one has a syntax error. | |
| assertEqual('Imported Script 1', event.data); | |
| break; | |
| case 3: | |
| assertEqual('Imported Script Before Syntax Error', event.data); | |
| break; | |
| case 4: | |
| assertEqual('Expected exception message 4: SyntaxError', event.data); | |
| break; | |
| case 5: | |
| const expected = 'Expected exception message 5: NetworkError'; | |
| assertEqual(expected, event.data.slice(0, expected.length)); | |
| worker.postMessage('import scripts now'); | |
| worker.postMessage('just some data'); | |
| worker.postMessage('a special message'); | |
| break; | |
| case 6: | |
| // Scripts loaded with importScripts are guaranteed to execute | |
| // in order. | |
| assertEqual('Imported Script 1', event.data); | |
| break; | |
| case 7: | |
| assertEqual('Imported Script 2', event.data); | |
| break; | |
| case 8: | |
| assertEqual('Imported Script 3', event.data); | |
| break; | |
| case 9: | |
| assertEqual('worker received import scripts now', event.data); | |
| break; | |
| case 10: | |
| assertEqual('IMPORT SCRIPTS NOW', event.data); | |
| break; | |
| case 11: | |
| assertEqual('worker received just some data', event.data); | |
| break; | |
| case 12: | |
| assertEqual('JUST SOME DATA', event.data); | |
| break; | |
| case 13: | |
| assertEqual('worker received a special message', event.data); | |
| break; | |
| case 14: | |
| assertEqual('A SPECIAL MESSAGE', event.data); | |
| worker.terminate(); | |
| window.setTimeout( | |
| () => { | |
| assertEqual(14, message_event_count); | |
| assertEqual(0, window_error_event_count); | |
| assertEqual(1, worker_error_event_count); | |
| onEndTest(); | |
| }, 250); | |
| break; | |
| } | |
| }; | |
| </script> | |
| </body> |