Files
StarPilot/openpilot/starpilot/galaxy/tests/test_layout_preview_visibility.mjs
T

76 lines
4.1 KiB
JavaScript

import assert from "node:assert/strict"
import { OnroadLayoutPage } from "../web/js/onroad-layout.js"
const originalStorage = globalThis.localStorage
const saved = new Map()
const editor = projection => {
const vm = { ...OnroadLayoutPage.setup({ projection, mode: "local", unauthorized() {} }), projection }
for (const name of ["sceneHidden", "previewHidden", "togglePreviewVisibility"])
vm[name] = OnroadLayoutPage.methods[name].bind(vm)
return vm
}
try {
globalThis.localStorage = { getItem: key => saved.get(key) ?? null, setItem: (key, value) => saved.set(key, value) }
for (const projection of [false, true]) {
const vm = editor(projection)
assert.equal(vm.state.scene, "general")
assert.equal(vm.previewHidden("stopped_timer"), false)
assert.equal(vm.previewHidden("current_speed"), false, "targets have separate preferences")
vm.togglePreviewVisibility("stopped_timer")
vm.togglePreviewVisibility("current_speed")
vm.state.profile = "compact"
vm.togglePreviewVisibility("driver_monitor")
const reopened = editor(projection)
assert.equal(reopened.previewHidden("stopped_timer"), true, "General edit eye preferences survive reopening")
assert.equal(reopened.previewHidden("current_speed"), true)
assert.equal(reopened.previewHidden("driver_monitor"), false)
reopened.state.profile = "compact"
assert.equal(reopened.previewHidden("driver_monitor"), true)
assert.equal(reopened.previewHidden("current_speed"), false, "profiles have separate preferences")
assert.equal(reopened.state.draft, null, "visibility is independent of the saved driving layout")
reopened.state.scene = "stopped"
assert.equal(reopened.previewHidden("stopped_timer"), false, "General edit cannot hide the stopped scene's timer")
reopened.togglePreviewVisibility("stopped_timer")
assert.equal(reopened.previewHidden("stopped_timer"), true)
reopened.state.scene = "engaged"
assert.equal(reopened.previewHidden("stopped_timer"), true)
reopened.togglePreviewVisibility("stopped_timer")
assert.equal(reopened.previewHidden("stopped_timer"), true, "Driving scenes cannot show an impossible timer")
reopened.togglePreviewVisibility("current_speed")
reopened.state.scene = "experimental"
assert.equal(reopened.previewHidden("current_speed"), false, "Eye preferences do not leak between scenes")
assert.equal(reopened.previewHidden("stopped_timer"), true)
}
const starport = editor(true)
const before = [...saved]
starport.togglePreviewVisibility("car_exit")
assert.equal(starport.previewHidden("car_exit"), false)
assert.deepEqual([...saved], before)
saved.delete('gx-layout-preview-visibility-v2:comma')
saved.set('gx-layout-preview-visibility-v1:comma', JSON.stringify({ large: { current_speed: true }, compact: { stopped_timer: true } }))
const migrated = editor(false)
assert.equal(migrated.previewHidden('current_speed'), true, 'Old preview preferences become General edit preferences')
migrated.state.profile = 'compact'
assert.equal(migrated.previewHidden('stopped_timer'), false, 'The old automatic timer default does not hide General edit samples')
for (const stored of ["broken JSON", "null", JSON.stringify({ large: [true], compact: "invalid" }),
JSON.stringify({ large: { stopped_timer: "false", current_speed: 1 } })]) {
globalThis.localStorage.getItem = () => stored
const vm = editor(false)
assert.equal(vm.previewHidden("stopped_timer"), false)
assert.equal(vm.previewHidden("current_speed"), false)
}
globalThis.localStorage = {
getItem() { throw new Error("Storage unavailable") },
setItem() { throw new Error("Storage unavailable") },
}
const unavailable = editor(false)
unavailable.togglePreviewVisibility("current_speed")
assert.equal(unavailable.previewHidden("current_speed"), true)
} finally {
if (originalStorage === undefined) delete globalThis.localStorage
else globalThis.localStorage = originalStorage
}
console.log("Preview visibility: General edit persistence, scene/target/profile isolation, timer eligibility, required exit and unavailable storage passed")