-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Expand file tree
/
Copy pathpointer-transparency.test.ts
More file actions
60 lines (53 loc) · 2.4 KB
/
Copy pathpointer-transparency.test.ts
File metadata and controls
60 lines (53 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { describe, expect, test } from 'bun:test'
import { hiddenWallPointerEventsHeld, holdHiddenWallPointerEvents } from '@pascal-app/core'
import { wallPointerEventsSuppressed } from './pointer-transparency'
// Semantics pinned here (the wall renderer's gated handlers evaluate this
// predicate per pointer event):
// - #683 / night-5 D4: a wall hidden by the wall-mode pass swallows NO
// pointer events, so clicks reach the visible device / service boxes
// behind its invisible collision mesh.
// - night-6 door-drag: while a door / window move / place tool holds
// hidden-wall pointer events, hidden walls DO keep raycasting — the tools
// track the cursor through wall:enter / wall:move / wall:click, and
// without the wall the opening free-follows the floor as a detached red
// world-axis ghost instead of sliding along its wall.
// - delete mode keeps events regardless (deleteInvisible hover flow).
// - visible walls never suppress.
describe('wallPointerEventsSuppressed', () => {
const base = {
wallHidden: true,
hoverHighlightMode: 'default' as string | null | undefined,
hiddenWallHoldActive: false,
}
test('hidden wall, no tool: pointer-transparent (the D4 outlet fix)', () => {
expect(wallPointerEventsSuppressed(base)).toBe(true)
})
test('hidden wall, opening tool hold: events flow (door/window drags slide)', () => {
expect(wallPointerEventsSuppressed({ ...base, hiddenWallHoldActive: true })).toBe(false)
})
test('hidden wall, delete mode: events flow (deleteInvisible hover)', () => {
expect(wallPointerEventsSuppressed({ ...base, hoverHighlightMode: 'delete' })).toBe(false)
})
test('visible wall: never suppressed, in any mode', () => {
for (const hoverHighlightMode of ['default', 'delete', null, undefined]) {
for (const hiddenWallHoldActive of [false, true]) {
expect(
wallPointerEventsSuppressed({
wallHidden: false,
hoverHighlightMode,
hiddenWallHoldActive,
}),
).toBe(false)
}
}
})
test('composes with the real core hold lifecycle', () => {
const suppressedNow = () =>
wallPointerEventsSuppressed({ ...base, hiddenWallHoldActive: hiddenWallPointerEventsHeld() })
expect(suppressedNow()).toBe(true)
const release = holdHiddenWallPointerEvents()
expect(suppressedNow()).toBe(false)
release()
expect(suppressedNow()).toBe(true)
})
})