144 lines
11 KiB
Plaintext
144 lines
11 KiB
Plaintext
|
||
> numberswipe-main@1.0.0 check
|
||
> npm run build && npm test && npm run smoke
|
||
|
||
|
||
> numberswipe-main@1.0.0 build
|
||
> node build.mjs
|
||
|
||
Built campaign-200-r2: 200 levels
|
||
|
||
> numberswipe-main@1.0.0 test
|
||
> node --test *.test.mjs
|
||
|
||
✔ 手机没有浏览器音频接口时,原生播放器仍能播放全部 36 步和六类反馈音 (9.8918ms)
|
||
✔ 关闭音效停止播放;再次开启会试听并保存偏好;后台中断停止所有播放器 (1.0694ms)
|
||
✔ 延迟通关音在静音或进入后台时取消,不在返回后突然播放 (65.2169ms)
|
||
✔ 音频错误可诊断,不再静默吞掉 (1.1338ms)
|
||
✔ 所有音频均为非静音 PCM;原版第13步比第1步高一个八度 (108.5817ms)
|
||
✔ 教学和组合规则用具体动作及奇偶例子解释,没有未解释的术语 (15.5719ms)
|
||
✔ 过关提示同步使用实际播放起点,非请求时间 (0.8257ms)
|
||
✔ 过关短句使用用户提供的3秒WAV,不与旧和弦叠加 (2.1141ms)
|
||
✔ jingle end, cancellation and playback error restore BGM without restarting (11.547ms)
|
||
✔ muted effects never duck BGM and unrelated effect errors cannot end jingle ducking (0.6787ms)
|
||
✔ hide and music preference do not revive playback through a late jingle callback (1.9364ms)
|
||
✔ BGMB is absent from the runtime manifest and music package (1.6944ms)
|
||
✔ merged irregular outlines retain holes and never draw internal unit edges (89.6286ms)
|
||
✔ all 200 boards fit four screen budgets with stable safe anchors and real shared entrances (1515.6813ms)
|
||
✔ guides through every irregular block stay inside its occupied shape (63.4561ms)
|
||
✔ visited, conflicting and hinted category cells retain their material identity (19.0667ms)
|
||
✔ five font subsets match their manifest and fit the package budget (5.3115ms)
|
||
✔ upstream adapter fails closed if the inspected render seams change (1.3091ms)
|
||
✔ procedural cushion pixels preserve holes and light the upper bevel without a border (36.6093ms)
|
||
✔ visible glyph bounds are centered independently of font ascent and side bearings (2.7968ms)
|
||
✔ stage with zero depth casts alpha shadows without painting a solid backing (17.0614ms)
|
||
✔ native width-only TextMetrics still centers the rasterized glyph ink (4.0689ms)
|
||
✔ fixed channels remain anchored at their block centers after number enlargement (1664.2221ms)
|
||
✔ checkpoint ribbons trigger on correct arrival only and never duplicate per frame (5.5755ms)
|
||
✔ checkpoint pulse is small, centered in time and settles without looping (0.6015ms)
|
||
✔ event batches preserve every landing and sequence but commit only highest audio and haptic (13.6405ms)
|
||
✔ completion waits at most 120ms and ignores late audio callbacks (4.0339ms)
|
||
✔ light haptics are limited, checkpoint replaces light, and completion adds only one delayed short pulse (2.1007ms)
|
||
✔ unsupported graded haptic falls back to one short pulse, never long vibration (1.1535ms)
|
||
✔ haptic disable, preview and lifecycle cancellation suppress delayed or expired work (1.1302ms)
|
||
✔ late failed haptic requests cannot revive old pulses and ungraded completion falls back once (0.4838ms)
|
||
✔ rectangles, concave shapes and hexagons require geometric inward distance without treating internal seams as walls (11.9548ms)
|
||
✔ one high-speed native move records all intermediate cells and completion without duplicate final node (255.9046ms)
|
||
✔ legal but off-solution moves use public rules, while invalid clues only produce error (323.3563ms)
|
||
✔ drag near a previous-block boundary cannot undo; deeper entry can, and undo button remains immediate (253.6439ms)
|
||
✔ tutorial, redraw, hint and restored saved routes do not generate player feedback (256.1896ms)
|
||
✔ pressure and rebound have bounded amplitude and duration (0.5723ms)
|
||
✔ interpolation cannot duplicate the same failed-cell event within one native movement (0.6345ms)
|
||
✔ nodes are driven by explicit events even when multiple arrive before rendering; at most two ribbons survive (98.1338ms)
|
||
✔ audio fast moves merge to latest pitch and completion stops the whole four-channel pool (3.5604ms)
|
||
✔ settings persist haptic preference independently and chapter cards always use three columns (178.6448ms)
|
||
✔ original audio is preserved and high pitches lose energy rather than growing sharper (19.2762ms)
|
||
✔ empty, partial and wrong routes reveal the first incomplete full segment (6.9429ms)
|
||
✔ completion hides the hint; repeat clicks cannot skip; undo and restart return to earlier segments (0.8126ms)
|
||
✔ all 200 levels reveal consecutive segments without changing the player path (3113.4039ms)
|
||
✔ hint draws skip player edges and mask visited cells on their own layer; compositing is restored (2.9868ms)
|
||
✔ parity is a segment anchor; colour is not; flow moves continuously across cells (2.1693ms)
|
||
✔ soft teaching ribbon preserves visited masks without arrows in reduced motion (2.4006ms)
|
||
✔ hint rounds shared guide junctions and keeps separate runs disconnected (0.8447ms)
|
||
✔ level-transition reset keeps completion source, gain and native playback; natural end restores BGM (5.4094ms)
|
||
✔ UI, hints, errors, restart and numeric nodes share ordinary voices while completion owns fourth channel (0.8477ms)
|
||
✔ a newer completion retains priority and stale completion callbacks cannot unduck it (0.4534ms)
|
||
✔ mute, native error and hard lifecycle stop still terminate the preserved jingle (0.745ms)
|
||
✔ real next-level tap does not stop or reload playing jingle and does not restore BGM early (376.0563ms)
|
||
✔ background stops preserved completion and ignores its late end when resuming the unfinished next level (279.6686ms)
|
||
✔ a failing next-level ordinary voice cannot release completion ducking early (0.7784ms)
|
||
✔ 实际教学关动画:basic (6.571ms)
|
||
✔ 实际教学关动画:walls (33.4329ms)
|
||
✔ 实际教学关动画:straight (2.4198ms)
|
||
✔ 实际教学关动画:vertical (5.7743ms)
|
||
✔ 实际教学关动画:corner (1.0693ms)
|
||
✔ 实际教学关动画:colour (0.7618ms)
|
||
✔ 实际教学关动画:parity (0.6378ms)
|
||
✔ 实际教学关动画:rhythm-door (0.9217ms)
|
||
✔ 实际教学关动画:hex (0.8469ms)
|
||
✔ 实际教学关动画:unknown-start (1.5717ms)
|
||
✔ 200关的组合规则均能找到对应真实教学关 (318.4051ms)
|
||
✔ 教学减速,结束停留1秒后自动循环 (3.7093ms)
|
||
✔ music loops independently, persists mute and cancels in background (9.3779ms)
|
||
✔ old arrows retain distance, rush to endpoint and fresh arrows move at base speed (2.3741ms)
|
||
✔ settings have exactly three independent preferences, and hint has its own cue (415.6986ms)
|
||
✔ actual fixed numeric node uses checkpoint pitch, final cell uses complete chord (279.1492ms)
|
||
✔ selected menu and BGMA loop are stereo PCM WAV with complete musical durations (14.263ms)
|
||
✔ selected runtime WAVs retain the original durations after sample-rate adaptation (21.038ms)
|
||
✔ gameplay ambient uses lower scene volume and keeps independent mute and resume behavior (0.7343ms)
|
||
✔ all 200 levels: valid numeric, parity and direction arrivals play checkpoint pitch; final arrival only completes (37426.224ms)
|
||
✔ drag back and undo button both vibrate lightly; disabling vibration suppresses both (61.9501ms)
|
||
✔ haptic cadence is approximately 15 percent denser without changing light or medium grades (1.9877ms)
|
||
✔ regular and special scale settle at 90ms with a larger special peak (0.2442ms)
|
||
✔ rendered undo target and nonnumeric checkpoint animate immediately without adding ribbons (7.7073ms)
|
||
✔ quick undo cancels removed node rebound, including last-step removal (2.6317ms)
|
||
✔ navigation buttons use the same selection cue and settings include uniform colons (48.7545ms)
|
||
✔ early next during confetti cancels warming; settled ceremony reuses its background (202.4678ms)
|
||
✔ font corpus includes every settings label including music le glyph (0.6479ms)
|
||
✔ first launch goes directly to gameplay (186.7249ms)
|
||
✔ resume unfinished route after exit from gameplay (526.302ms)
|
||
✔ resume unfinished route after exit from selection (387.8133ms)
|
||
✔ completed level resumes next unfinished, including leaving from cleared screen (180.3974ms)
|
||
✔ replaying a cleared level does not replace the unfinished save (170.0196ms)
|
||
✔ legacy saves, malformed data and full completion have valid startup targets (152.2722ms)
|
||
✔ selection pages expose fifteen cards and fit phone safe areas (473.1698ms)
|
||
✔ hint-only frames reuse static UI, and player input invalidates it (100.3652ms)
|
||
✔ hint curves are cached and distance lookup is stable at boundaries (1.8835ms)
|
||
✔ new-mechanic lesson reuses the board while the continuous cursor advances (95.6831ms)
|
||
✔ BGMA stays continuous across level changes and completion redraws (5.0744ms)
|
||
✔ subpackage completion never plays a stale scene after hiding, muting, or clearing (0.6819ms)
|
||
✔ music load failure is silent and one real resume can retry; muted pending loads stay silent (0.9205ms)
|
||
✔ runtime uses supplied WAV hashes and ships music as a subpackage with a small main bundle (235.8265ms)
|
||
✔ title is centered and selection settings share the progress and level-range row (542.0741ms)
|
||
✔ completion ducks BGMA until jingle ends and next level never restarts it (247.148ms)
|
||
✔ title artwork is a transparent, high resolution PNG packaged locally (3.2742ms)
|
||
✔ asynchronous native image load requests a repaint and draws the artwork without a font substitute (0.7537ms)
|
||
✔ artwork stays above progress pills and clear of settings; fifteen cards still fit all phone sizes (659.6098ms)
|
||
✔ A3 width, one wide patch and brighter body preserve original design proportions (7.7278ms)
|
||
✔ ribbon caches its body, draws source-atop only offscreen and starts each frame clean (11.3619ms)
|
||
✔ one patch travels at 60px/s on the full route and does not restart when player advances (0.5258ms)
|
||
✔ reduced motion and missing canvas use a static ribbon without main-board compositing (0.7072ms)
|
||
✔ real target contours and smoothed routes stay attached to actual 200-level geometry (1801.2384ms)
|
||
✔ live target breath uses cached board layers, arrival and background stop obsolete visuals (206.814ms)
|
||
✔ undo button reverses seven played steps as 7,6,5,4,3,2,1 (587.6605ms)
|
||
✔ drag reverses seven played steps as 7,6,5,4,3,2,1 (254.5839ms)
|
||
✔ completion amplitude is reduced 15 percent while node, undo and restart volumes stay unchanged (1.7431ms)
|
||
✔ fast reverse coalesces to the latest descending pitch and cannot replay an old forward note (29.8648ms)
|
||
✔ all prepared routes match the immutable level hash and public rules (31.698ms)
|
||
✔ entering next level draws the live board once and preserves the running BGMA player (2261.4085ms)
|
||
✔ next-board warming advances one item per frame and cancels on deadline, replacement or hide (0.9236ms)
|
||
✔ idle material warming never changes the player path or emits sound and vibration (52.1869ms)
|
||
ℹ tests 117
|
||
ℹ suites 0
|
||
ℹ pass 117
|
||
ℹ fail 0
|
||
ℹ cancelled 0
|
||
ℹ skipped 0
|
||
ℹ todo 0
|
||
ℹ duration_ms 38422.2234
|
||
|
||
> numberswipe-main@1.0.0 smoke
|
||
> node smoke.mjs
|
||
|
||
PASS 200/200: r2源文件哈希一致、唯一解、微信发布包触摸通关、撤销/重开/指路、存档/音效设置恢复、前后台切换。
|