Files
micarrsim/tests/test-runner.js
T

76 lines
2.8 KiB
JavaScript

const registeredTests = [];
globalThis.test = (name, callback) => registeredTests.push({ name, callback });
globalThis.assert = (condition, message = "assertion failed") => {
if (!condition) throw new Error(message);
};
globalThis.assertEqual = (actual, expected, message = "values differ") => {
if (!Object.is(actual, expected)) throw new Error(`${message}: expected ${expected}, received ${actual}`);
};
try {
await import("/tests/unit/contracts.test.js");
await import("/tests/unit/acoustics.test.js");
await import("/tests/unit/gcc-phat.test.js");
await import("/tests/unit/localization.test.js");
await import("/tests/unit/realtime-localizer.test.js");
await import("/tests/unit/builder.test.js");
await import("/tests/unit/evaluation.test.js");
await import("/tests/unit/camera.test.js");
await import("/tests/unit/webgpu.test.js");
await import("/tests/unit/split-pane.test.js");
await import("/tests/unit/array-builder.test.js");
await import("/tests/integration/cpu-baseline.test.js");
await import("/tests/integration/webgpu.test.js");
await import("/tests/integration/server.test.js");
await import("/tests/integration/split-layout-ui.test.js");
await import("/tests/integration/builder-ui.test.js");
await import("/tests/integration/camera-ui.test.js");
await import("/tests/integration/workflow-ui.test.js");
} catch (error) {
registeredTests.push({
name: "테스트 모듈을 불러온다",
callback: () => {
throw error;
},
});
}
if (registeredTests.length === 0) {
registeredTests.push({
name: "하나 이상의 테스트가 등록된다",
callback: () => {
throw new Error("등록된 테스트가 없습니다.");
},
});
}
const resultList = document.querySelector("#test-results");
const summary = document.querySelector("#test-summary");
let passed = 0;
for (const registeredTest of registeredTests) {
const item = document.createElement("li");
item.className = "test-result";
try {
await registeredTest.callback();
passed += 1;
item.classList.add("test-result--pass");
item.textContent = `✓ ${registeredTest.name}`;
} catch (error) {
item.classList.add("test-result--fail");
const title = document.createElement("strong");
title.textContent = `✕ ${registeredTest.name}`;
const details = document.createElement("pre");
details.textContent = error instanceof Error ? error.stack : String(error);
item.append(title, details);
}
resultList.append(item);
}
const failed = registeredTests.length - passed;
summary.textContent = `${registeredTests.length}개 중 ${passed}개 통과, ${failed}개 실패`;
summary.dataset.failed = String(failed);
document.documentElement.dataset.testStatus = failed === 0 ? "pass" : "fail";
document.title = failed === 0 ? "PASS · micarrsim tests" : "FAIL · micarrsim tests";