blob: 0ce4cfee510dda9378c1228b26c768bc45ba5f81 [file] [log] [blame]
// 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);
}
}
};