mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-10 21:06:15 -08:00
test(thumbnail): [PKG-TOOL-THUMB-02] reproduce extraction and resource lifecycle gaps
This commit is contained in:
1 parent
0338e0b8b1
commit
1cb7779192
14 files changed
+3907
-11
No files matched your search
@@ -0,0 +1,79 @@
|
||||
# PKG-TOOL-THUMB-02 extraction and lifecycle baseline
|
||||
|
||||
Started from 0338e0b8b1d9814ebe1628c7b55d08003ffa6347. No production runtime or
|
||||
distribution changes. This task reproduces behavior before the resource/module
|
||||
work in 03 and TS migration in 04. The old default-semantics conflict remains open.
|
||||
|
||||
## Repeatable controlled tests
|
||||
|
||||
`yarn test:thumbnail` runs the 26 frozen contract assertions and 36 extraction
|
||||
assertions against recovered CDN 3.5.31 and frozen workspace main/legacy.
|
||||
The new behavior file also runs in the normal unit/CI command.
|
||||
|
||||
Controlled timers and deferred Blob callbacks allow assertions without arbitrary
|
||||
waiting: serial frames, interval clamps/density guards, progress/done ordering,
|
||||
repeat generation, duplicate start/download, pending callback gating, null Blob,
|
||||
late callback after destroy, replacement URLs, missing metadata, changed input,
|
||||
seek setter failure, throwing done/update listeners. These are baseline tests,
|
||||
not assertions that the defects are fixed. Future candidate regression tests
|
||||
must assert corrected resource ownership separately while preserving old evidence.
|
||||
|
||||
The old and current implementations leak the first source URL on replacement,
|
||||
retain changed-input listeners and generated wrapper inputs, permit late update
|
||||
after destroy, and leave several callback-failure promises unsettled. Missing
|
||||
metadata rejects with an unbound receiver in 3.5.31; workspace keeps polling even
|
||||
after destruction. Seek-assignment failure rejects correctly in both; a throwing
|
||||
done listener emits error twice in 3.5.31 and once in workspace. Normal progress
|
||||
and PNG URL replacement remain ordered. These distinctions guide 03 fixes.
|
||||
|
||||
## Actual browser evidence and limitations
|
||||
|
||||
Run `yarn test:browser test/browser/thumbnail-tool.spec.js test/browser/thumbnail-native.spec.js`.
|
||||
The final 39 rows have zero retries/skips: **24 actual tool scenarios** in
|
||||
Chromium/Firefox, **12 Windows WebKit Blob-unavailable controls**, and **3 native
|
||||
media comparison tests**. The 12 controls do not establish successful extraction.
|
||||
Every control proves that the same file loads in native HTTP video but fails in
|
||||
native Blob video with media error 4, then reproduces the tool's corresponding
|
||||
failure and cleanup. If native Blob starts working, the full scenario runs.
|
||||
|
||||
Actual scenarios use native file selection, metadata/seek, real canvas.toBlob,
|
||||
PNG decode and non-black opaque pixels. They verify ten updates, two complete
|
||||
generations and normal final URL cleanup. DOM drop dispatch with a real File
|
||||
reproduces the missing listener; calling the existing ondrop method does load.
|
||||
Corrupt media raises a native error without a tool error event; replacement leaks
|
||||
the first URL and a second destroy throws NotFoundError. A captured **native PNG
|
||||
callback**, delivered after destroy, still emits update and creates an unreleased
|
||||
URL. Only callback delivery is controlled; encoding and media are native.
|
||||
|
||||
Initial docs sample testing passed 24 Chromium/Firefox cases and failed all 12
|
||||
WebKit cases. A second 24-second video-only MP4 probe still failed WebKit. The
|
||||
independent native control then demonstrated HTTP success and Blob failure for
|
||||
the original pattern, looped pattern and docs sample. An exploratory WebM HTTP
|
||||
control did not settle within its 1.5-second observation and is not used to claim
|
||||
codec support. All failed reports and trace directories remain archived. No
|
||||
production media workaround or claimed physical Safari result was introduced.
|
||||
|
||||
`test/browser/media/thumbnail-pattern.mp4` is a 24-second stream-copy loop of the
|
||||
existing generated 8-second pattern, needed for the tool's minimum ten samples
|
||||
and maximum one-sample-per-second density. Reproduce with FFmpeg:
|
||||
|
||||
```sh
|
||||
ffmpeg -stream_loop 2 -i test/browser/media/pattern.mp4 -t 24 -an -c:v copy -movflags +faststart test/browser/media/thumbnail-pattern.mp4
|
||||
```
|
||||
|
||||
The local test server exposes this fixture; no dist or compiled docs files were
|
||||
edited. Hashes, individual outcomes, measurements, browser versions and CI counts
|
||||
are in `refactor/baselines/thumbnail-behavior-validation.json`. The ordinary
|
||||
browser job discovers the new spec files automatically. No hosted CI run,
|
||||
coverage improvement, successful WebKit Blob extraction or npm publication is claimed.
|
||||
|
||||
## Handoff and rollback
|
||||
|
||||
03 should own source URLs, generated inputs/listeners, metadata waiting and
|
||||
extraction callbacks; settle pending work on cancellation/error and stop late
|
||||
effects. Keep historical public methods/events and use a documented compatibility
|
||||
policy for delay/height defaults. 04 covers emitter provenance and strict TS;
|
||||
05 keeps actual Safari/WebKit Blob extraction and old/new core sheet integration
|
||||
open; 06 owns complete installed-package/demo checks. Reverting this task's
|
||||
dedicated commit removes only tests, fixture/server registration, scripts and
|
||||
refactor evidence; it does not roll back production code.
|
||||
Reference in new issue
Block a user