| <!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: |
| assertEqual('Expected exception message 5: SyntaxError', event.data); |
| 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> |