// tests/fileParsers.test.js import { parseVisualizationJson } from '../src/fileParsers.js'; const resultsEl = document.getElementById('results'); // A simple function to run an async test and report the result async function testAsync(description, testFunction) { try { await testFunction(); console.log(`✅ PASS: ${description}`); resultsEl.innerHTML += `
PASS: ${description}
`; } catch (error) { console.error(`❌ FAIL: ${description}`, error); resultsEl.innerHTML += `FAIL: ${description}
${error}`;
}
}
// --- Test Cases for parseVisualizationJson ---
const mockRawData = {
radarFrames: [
{ timestamp: 50, pointCloud: [{ snr: 10 }, { snr: 15 }] },
{ timestamp: 100, pointCloud: [{ snr: 5 }, { snr: 20 }] }
]
};
const radarStartTimeMs = 1725440400000; // Sept 4, 2025 12:30:00 PM GMT
const videoStartDate = new Date(radarStartTimeMs - 1000); // Video starts 1 second earlier
testAsync("fileParsers.js: should correctly calculate timestampMs for each frame", async () => {
const result = await parseVisualizationJson(mockRawData, radarStartTimeMs, videoStartDate);
const expectedTimestamp1 = radarStartTimeMs + 50 - videoStartDate.getTime(); // 1000 + 50 = 1050
const expectedTimestamp2 = radarStartTimeMs + 100 - videoStartDate.getTime(); // 1000 + 100 = 1100
if (result.data.radarFrames[0].timestampMs !== expectedTimestamp1) {
throw new Error(`Expected first frame timestamp to be ${expectedTimestamp1} but got ${result.data.radarFrames[0].timestampMs}`);
}
if (result.data.radarFrames[1].timestampMs !== expectedTimestamp2) {
throw new Error(`Expected second frame timestamp to be ${expectedTimestamp2} but got ${result.data.radarFrames[1].timestampMs}`);
}
});
testAsync("fileParsers.js: should correctly calculate global min and max SNR", async () => {
const result = await parseVisualizationJson(mockRawData, radarStartTimeMs, videoStartDate);
if (result.minSnr !== 5) {
throw new Error(`Expected minSnr to be 5 but got ${result.minSnr}`);
}
if (result.maxSnr !== 20) {
throw new Error(`Expected maxSnr to be 20 but got ${result.maxSnr}`);
}
});
testAsync("fileParsers.js: should return an error if radarFrames are missing", async () => {
const badData = { tracks: [] }; // Missing radarFrames
const result = await parseVisualizationJson(badData, radarStartTimeMs, videoStartDate);
if (!result.error) {
throw new Error("Expected an error for missing radarFrames, but none was returned.");
}
});