71 lines
2.5 KiB
JavaScript
71 lines
2.5 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/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/integration/cpu-baseline.test.js");
|
|
await import("/tests/integration/webgpu.test.js");
|
|
await import("/tests/integration/server.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";
|