blob: 27f1fa3ce91cefcd0a6e7929a2e60ce6bb30787d [file] [log] [blame]
<!DOCTYPE html>
<html>
<!--
Copyright 2022 The IREE Authors
Licensed under the Apache License v2.0 with LLVM Exceptions.
See https://llvm.org/LICENSE.txt for license information.
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-->
<head>
<meta charset="utf-8" />
<title>IREE Tests</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="./IREE_Logo_Icon_Color.svg" type="image/svg+xml">
<style>
.test-output-container {
font-family: monospace;
background-color: #111122;
color: #88EE33;
overflow-wrap: anywhere;
}
.test-output {
white-space: pre-wrap;
display: inline;
}
.stderr {
color: red;
}
.start-of-line {
user-select: none;
color: #eeeeff;
}
</style>
<!-- https://getbootstrap.com/ for some webpage styling-->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
</head>
<body class="bg-dark bg-opacity-10">
<div class="container-fluid p-2" style="font-family: monospace;">
<div>
Test name: <span id="test-name"></span>
<br>
Test output:
</div>
<div id="test-output" class="test-output-container border border-dark shadow-sm p-3 mb-2 rounded"></div>
<div>
Test result: <span id="test-result"></span>
</div>
</div>
<script>
const testNameElement = document.getElementById("test-name");
const testOutputElement = document.getElementById("test-output");
const testResultElement = document.getElementById("test-result")
const searchParams = new URLSearchParams(window.location.search);
const testName = searchParams.get("testName");
// Load test script from URL params. This is sketchy, so keep this test
// page local. If hosting the tests somewhere, prefer to populate the list
// of test sources statically.
const sourceFile = searchParams.get("sourceFile");
const workingDirectory = searchParams.get("workingDirectory");
document.title = "IREE Tests - " + testName;
testNameElement.innerText = testName;
function parseListFromString(inputString) {
// Remove opening and closing brackets.
let listString = inputString.replace(/^\[/, '').replace(/\]$/,'');
if (listString == "") { return []; }
// Remove spaces after commas.
listString = listString.replace(/\s*,\s*/g, ",");
// Split into an array.
return listString.split(',');
}
const args = parseListFromString(searchParams.get("args") || "");
const requiredFiles = parseListFromString(searchParams.get("requiredFiles") || "");
function handleMessageFromWorker(messageEvent) {
const {messageType, payload} = messageEvent.data;
function addStartOfLine() {
const startOfLine = document.createElement("span");
startOfLine.textContent = "> ";
startOfLine.classList.add("start-of-line");
testOutputElement.appendChild(startOfLine);
}
function addEndOfLine() {
const endOfLine = document.createElement("br");
testOutputElement.appendChild(endOfLine);
}
if (messageType == "testResult") {
// TODO(scotttodd): do more with result (pass/fail #s for suites)
if (payload == 0) {
testResultElement.innerText = "PASS";
} else {
testResultElement.innerText = "FAIL";
}
} else if (messageType == "print") {
addStartOfLine();
const div = document.createElement("div");
div.textContent = payload;
div.classList.add("test-output");
testOutputElement.appendChild(div);
addEndOfLine();
} else if (messageType == "printErr") {
addStartOfLine();
const div = document.createElement("div");
div.textContent = payload;
div.classList.add("test-output");
div.classList.add("stderr");
testOutputElement.appendChild(div);
addEndOfLine();
}
}
const testWorker = new Worker('test_worker.js', {name: 'IREE Test Worker'});
testWorker.onmessage = handleMessageFromWorker;
testWorker.postMessage({
"messageType": "runTest",
"payload": {
"name": testName,
"sourceFile": sourceFile,
"workingDirectory": workingDirectory,
"requiredFiles": requiredFiles,
"args": args,
},
});
</script>
</body>
</html>