blob: 9be8f5bb79efb0052b7e35cfdd79d231eba68ad8 [file] [log] [blame]
<!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;
window.onerror = function (message) {
window_error_event_count += 1;
assertIncludes('TypeError: self.Foo is not a function', message);
console.log('window got onerror', message);
};
var message_event_count = 0;
console.log('running');
// This is expected trigger a an error event on window.
var worker_with_error = new Worker('web_worker_test_with_syntax_error.js',
{ name : 'worker_with_error'});
var worker = new Worker('web_worker_test.js', { name : 'test_worker'});
console.log(worker);
worker.onmessage = function (event) {
message_event_count += 1;
console.log('window got message', message_event_count, 'from worker:', event.data);
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(1, window_error_event_count);
onEndTest();
}, 250);
break;
}
};
worker.onerror = function (event) {
console.log('window got onerror');
notReached();
};
console.log('end');
</script>
</body>