96 lines
6.9 KiB
Plaintext
96 lines
6.9 KiB
Plaintext
✔ derives automatic frame names from current animation name and position (0.808ms)
|
||
✔ keeps custom frame names and restores automatic names when cleared (0.1255ms)
|
||
✔ builds non-repeating animation edit context names (0.1235ms)
|
||
✔ selects saved animation preview frames by ordered durations (0.7779ms)
|
||
✔ loads every preview frame through revision-checked pagination (0.6472ms)
|
||
✔ validates configurable animation preview concurrency (0.2981ms)
|
||
✔ rejects mixed revisions instead of showing a partial animation (0.3864ms)
|
||
✔ validates frame duration only when explicitly called (0.4326ms)
|
||
✔ moves selected frames as one ordered group (0.235ms)
|
||
✔ protects an eight pixel ring around interactive drag controls (0.1911ms)
|
||
✔ reorders mixed library keys without mutating the source list (0.12ms)
|
||
✔ restores drag eligibility after protected pointer cancellation and drag end (0.497ms)
|
||
✔ animation workspace exposes two previews and the simplified control order (6.8882ms)
|
||
✔ normal and pixel modes expose independent ranges and presets (1.2686ms)
|
||
✔ pixel stamps are exact squares from 1x1 through 4x4 (0.2839ms)
|
||
✔ pixel stamps clip at every canvas edge (0.2249ms)
|
||
✔ normal circle geometry remains unchanged (0.0917ms)
|
||
✔ line interpolation includes endpoints without coordinate gaps (0.2369ms)
|
||
✔ older tools migrate while v3 restores the coordinate guide choice (0.2616ms)
|
||
✔ coordinate guide spacing adapts to the transformed logical pixel size (0.1598ms)
|
||
✔ coordinate guide ticks preserve logical values through zoom and pan (0.2017ms)
|
||
✔ pixel mode markup and grid stay accessible and non-interactive (7.2448ms)
|
||
✔ pixel undo history stores changed snapshots, caps entries, and clears (0.3945ms)
|
||
✔ canvas view clamps scale and keeps a visible section in the viewport (0.1984ms)
|
||
✔ zooming around an anchor preserves its logical position (0.1317ms)
|
||
✔ floating editor button stays inside its safe viewport bounds (0.0831ms)
|
||
✔ canvas editor markup, guarded input, and checkpoint events stay wired (3.1863ms)
|
||
✔ normalizes and converts hexadecimal colors (1.5345ms)
|
||
✔ converts RGB and HSV boundaries (0.9382ms)
|
||
✔ round trips representative colors within 8-bit rounding (0.2933ms)
|
||
✔ recent colors deduplicate, normalize, and evict the oldest (0.3496ms)
|
||
✔ formats and projects looping playback without moving paused content (1.2628ms)
|
||
✔ seek dispatcher keeps one request in flight and flushes the newest position (2.7001ms)
|
||
✔ topbar current display dialog exposes static close and animation controls (3.7402ms)
|
||
✔ device workspace exposes the compact immediate pure-color test flow (6.3507ms)
|
||
✔ font catalog normalization, grouping, and search are stable (2.0276ms)
|
||
✔ font picker implements commit-only searchable combobox keyboard behavior (3.427ms)
|
||
✔ settings places unrestricted FRP maintenance at the bottom (5.1351ms)
|
||
✔ FRP editor uses raw server storage and official validation errors (0.9648ms)
|
||
✔ network diagnostics renders layered evidence (1.527ms)
|
||
✔ unavailable controls never masquerade as indefinite loading (6.4433ms)
|
||
✔ action controls do not bypass the shared state module (6.9201ms)
|
||
✔ HTTP requests time out with a stable user-facing error (10.9783ms)
|
||
✔ demo library actions stay black, explain restrictions, and preserve copy (1.3072ms)
|
||
✔ sortable cards protect controls and keep demo cards fixed (1.2485ms)
|
||
✔ media import workspace exposes streaming upload, crop controls, and queue polling (1.6826ms)
|
||
✔ free framing starts from the complete source and keeps one pixel visible (0.8104ms)
|
||
✔ free framing copy is stable and catalogued (0.1191ms)
|
||
✔ upload action has visible ordinary-build copy (0.4106ms)
|
||
✔ media naming happens after analysis and conflicts keep the draft (0.2591ms)
|
||
✔ awaiting-settings cards survive polling without hiding server transitions (0.1535ms)
|
||
✔ old scene migration rejects unknown fields and duplicate text without filtering (47.9235ms)
|
||
✔ PNG compression round trips sparse and full brush pixels without DOM (6.3474ms)
|
||
✔ blank and black are distinct; independent backgrounds follow layer order (3.1552ms)
|
||
✔ disabled background colors stay independent through storage and copy (15.4641ms)
|
||
✔ extended pixels survive storage but never enter the central output (5.6959ms)
|
||
✔ move preview does not mutate source; confirmed clipping removes only outside ink (9.8782ms)
|
||
✔ text clipping follows anchor and scale and is retained after edit/reload/copy (7.7534ms)
|
||
✔ multiple text groups isolate edits, copies and IDs (0.7824ms)
|
||
✔ strict v2 storage protects unknown data and the final brush invariant (4.1681ms)
|
||
✔ creates a fixed 64x64 RGB scene (5.3096ms)
|
||
✔ serializes pixelRgb as base64 and round trips an independent scene (25.3775ms)
|
||
✔ moves a valid v1 draft to the stable key before removing exact legacy keys (27.5528ms)
|
||
✔ keeps the v1 draft and all legacy keys when stable-key migration cannot write (13.5803ms)
|
||
✔ preserves and blocks a future stable draft instead of falling back or writing blank (5.8011ms)
|
||
✔ preserves and blocks a damaged stable draft (0.4566ms)
|
||
✔ does not discard a damaged higher-priority legacy key during fallback migration (1.941ms)
|
||
✔ rejects damaged scene roots while skipping only damaged elements (11.0519ms)
|
||
✔ normalizes text fields and creates a centered lowercase ok element (0.337ms)
|
||
✔ migrates the first valid canvas by v3, v2, legacy priority and merges text v1 (9.0729ms)
|
||
✔ supports independent add, update, and delete operations for multiple text elements (0.6678ms)
|
||
✔ duplicates with a deep copy, new id, 2px offset, and topmost order (0.3218ms)
|
||
✔ alpha-composites full RGBA layers in array order without mutating inputs (1.4592ms)
|
||
✔ settings brightness explains an active temporary display-test override (7.2325ms)
|
||
✔ settings exposes full OTA upload progress and service recovery polling (2.9749ms)
|
||
✔ settings automatically opens and safely copies a detailed OTA failure log (1.7251ms)
|
||
✔ settings exposes a transactional performance-mode switch with the fixed warning (2.449ms)
|
||
✔ settings exposes persisted animation preview concurrency below performance mode (1.8539ms)
|
||
✔ template edit baseline distinguishes clean, dirty, and unbound scenes (1.1902ms)
|
||
✔ template manager uses a monitor and unified four-row card actions (7.157ms)
|
||
✔ animation editing backs up and restores template edit ownership (1.9429ms)
|
||
✔ special editor exposes the agreed modes and guarded editing flow (6.9422ms)
|
||
✔ latched WiFi draft state remains dirty until explicitly cleared (2.0016ms)
|
||
✔ WiFi settings expose independent network and prompt-delay controls (1.8652ms)
|
||
✔ workspace order resolves saved ids and appends new registrations (1.0842ms)
|
||
✔ workspace order movement is immutable and respects both boundaries (0.2086ms)
|
||
✔ drawer exposes one editable list and commits only from the save action (4.9742ms)
|
||
ℹ tests 87
|
||
ℹ suites 0
|
||
ℹ pass 87
|
||
ℹ fail 0
|
||
ℹ cancelled 0
|
||
ℹ skipped 0
|
||
ℹ todo 0
|
||
ℹ duration_ms 650.3177
|