| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // This script runs in HTML files and loads and instantiates dart unit tests |
| // that are compiled to WebAssembly. It is based off of the `test/dart.js` |
| // script from the `test` dart package. |
| |
| window.onload = async function () { |
| // Sends an error message to the server indicating that the script failed to |
| // load. |
| // |
| // This mimics a MultiChannel-formatted message. |
| var sendLoadException = function (message) { |
| window.parent.postMessage({ |
| "href": window.location.href, |
| "data": [0, { "type": "loadException", "message": message }], |
| "exception": true, |
| }, window.location.origin); |
| } |
| |
| // Listen for dartLoadException events and forward to the server. |
| window.addEventListener('dartLoadException', function (e) { |
| sendLoadException(e.detail); |
| }); |
| |
| // The basename of the current page. |
| var name = window.location.href.replace(/.*\//, '').replace(/#.*/, ''); |
| |
| // Find <link rel="x-dart-test">. |
| var links = document.getElementsByTagName("link"); |
| var testLinks = []; |
| var length = links.length; |
| for (var i = 0; i < length; ++i) { |
| if (links[i].rel == "x-dart-test") testLinks.push(links[i]); |
| } |
| |
| if (testLinks.length != 1) { |
| sendLoadException( |
| 'Expected exactly 1 <link rel="x-dart-test"> in ' + name + ', found ' + |
| testLinks.length + '.'); |
| return; |
| } |
| |
| var link = testLinks[0]; |
| |
| if (link.href == '') { |
| sendLoadException( |
| 'Expected <link rel="x-dart-test"> in ' + name + ' to have an "href" ' + |
| 'attribute.'); |
| return; |
| } |
| |
| let dart2wasm_runtime; |
| let moduleInstance; |
| try { |
| dart2wasm_runtime = await import('./dart2wasm_runtime.mjs'); |
| const dartModulePromise = WebAssembly.compileStreaming(fetch(link.href + ".browser_test.dart.wasm")); |
| moduleInstance = await dart2wasm_runtime.instantiate(dartModulePromise, {}); |
| } catch (exception) { |
| const message = `Failed to fetch and instantiate wasm module: ${exception}`; |
| sendLoadException(message); |
| } |
| |
| if (moduleInstance) { |
| try { |
| await dart2wasm_runtime.invoke(moduleInstance); |
| } catch (exception) { |
| const message = `Exception while invoking test: ${exception}`; |
| sendLoadException(message); |
| } |
| } |
| }; |