feat: release Find-Word v0.1

This commit is contained in:
oz
2026-10-14 06:19:24 +00:00
parent 28ee2ce498
commit 1c0069c367
258 changed files with 21509 additions and 0 deletions
+179
View File
@@ -0,0 +1,179 @@
> find-word@0.1.0 test
> vitest run tests/audio.test.ts
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.1
❯ tests/audio.test.ts (5 tests | 5 failed) 22ms
❯ 오디오 재생 수명과 믹서 (5)
× 생성 시 무음이며 gesture의 play에서만 장치를 연다 7ms
× 동시 시작을 거부하고 정지하면 모든 노드와 대기 Promise를 취소한다 8ms
× 로드 도중 취소한 이전 작업이 늦게 완료되어도 소리를 시작하지 않는다 3ms
× HTTP·디코드·장치 실패를 전달하고 다음 시도는 다시 로드한다 1ms
× 전체 음량은 두 신호의 비율을 보존하며 0부터 1 범위로 제한한다 1ms
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 5 ⎯⎯⎯⎯⎯⎯⎯
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > 생성 시 무음이며 gesture의 play에서만 장치를 연다
AssertionError: expected "vi.fn()" to be called once, but got 0 times
❯ tests/audio.test.ts:35:23
33| const started = vi.fn();
34| const done = f.engine.play(question, true, started);
35| expect(f.factory).toHaveBeenCalledOnce();
| ^
36| expect(f.context.resume).toHaveBeenCalledOnce();
37| await flush();
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/6]⎯
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > 동시 시작을 거부하고 정지하면 모든 노드와 대기 Promise를 취소한다
AssertionError: expected [Function] to throw error including '재생 중' but got '오디오 미구현'
Expected: "재생 중"
Received: "오디오 미구현"
❯ tests/audio.test.ts:54:58
52| const done = f.engine.play(question, false, vi.fn());
53| const cancelled = expect(done).rejects.toMatchObject({ name: 'Abor…
54| await expect(f.engine.play(question, false, vi.fn())).rejects.toTh…
| ^
55| await flush();
56| f.engine.stop();
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/6]⎯
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > 동시 시작을 거부하고 정지하면 모든 노드와 대기 Promise를 취소한다
Error: Promise returned by `expect(actual).rejects.toMatchObject(expected)` was not awaited. This assertion is asynchronous and must be awaited; otherwise, it is not guaranteed to complete before the test finishes:
await expect(actual).rejects.toMatchObject(expected)
❯ tests/audio.test.ts:53:35
51| const f = fixture();
52| const done = f.engine.play(question, false, vi.fn());
53| const cancelled = expect(done).rejects.toMatchObject({ name: 'Abor…
| ^
54| await expect(f.engine.play(question, false, vi.fn())).rejects.toTh…
55| await flush();
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/6]⎯
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > 로드 도중 취소한 이전 작업이 늦게 완료되어도 소리를 시작하지 않는다
AssertionError: expected Error: 오디오 미구현 to match object { name: 'AbortError' }
- Expected
+ Received
- {
- "name": "AbortError",
+ Error {
+ "message": "오디오 미구현",
}
❯ tests/audio.test.ts:68:35
66| f.fetcher.mockImplementationOnce(() => new Promise(resolve => { re…
67| const done = f.engine.play(question, false, vi.fn());
68| const cancelled = expect(done).rejects.toMatchObject({ name: 'Abor…
| ^
69| await flush();
70| f.engine.stop();
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/6]⎯
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > HTTP·디코드·장치 실패를 전달하고 다음 시도는 다시 로드한다
AssertionError: expected [Function] to throw error including '음성 파일' but got '오디오 미구현'
Expected: "음성 파일"
Received: "오디오 미구현"
❯ tests/audio.test.ts:79:58
77| const f = fixture();
78| f.fetcher.mockResolvedValueOnce({ ok: false } as Response);
79| await expect(f.engine.play(question, false, vi.fn())).rejects.toTh…
| ^
80| f.context.decodeAudioData.mockRejectedValueOnce(new Error('decode'…
81| await expect(f.engine.play(question, false, vi.fn())).rejects.toTh…
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/6]⎯
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > 전체 음량은 두 신호의 비율을 보존하며 0부터 1 범위로 제한한다
TypeError: Cannot read properties of undefined (reading 'gain')
❯ tests/audio.test.ts:94:24
92| const done = f.engine.play(question, false, vi.fn());
93| await flush();
94| expect(f.gains[0]!.gain.value).toBe(.3);
| ^
95| f.engine.setVolume(8);
96| expect(f.gains[0]!.gain.setTargetAtTime).toHaveBeenCalledWith(1, 2…
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/6]⎯
⎯⎯⎯⎯⎯⎯ Unhandled Errors ⎯⎯⎯⎯⎯⎯
Vitest caught 3 unhandled errors during the test run.
This might cause false positive tests. Resolve unhandled errors to make sure your tests are not affected.
⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯
Error: 오디오 미구현
❯ AudioEngine.play src/audio/engine.ts:13:99
11| export class AudioEngine implements AudioPort {
12| constructor(_factory: () => AudioContext = () => new AudioContext(),…
13| async play(_question: Question, _intro: boolean, _onStarted: () => v…
| ^
14| stop(): void { /* RED 확인을 위한 인터페이스 자리만 확보한다. */ }
15| dispose(): void { /* 정리 동작은 취소 테스트 후 구현한다. */ }
❯ tests/audio.test.ts:34:27
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:1632:35
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:2794:26
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:3334:20
❯ runWithCancel node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:3329:10
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:3314:20
❯ runWithTimeout node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:3272:10
This error originated in "tests/audio.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯
AssertionError: expected Error: 오디오 미구현 to match object { name: 'AbortError' }
❯ Assertion.__VITEST_REJECTS__ node_modules/vitest/dist/chunks/index.uwTEEBsB.js:2480:33
❯ Assertion.propertyGetter node_modules/chai/index.js:1607:27
❯ Object.proxyGetter [as get] node_modules/chai/index.js:1696:22
❯ tests/audio.test.ts:53:35
51| const f = fixture();
52| const done = f.engine.play(question, false, vi.fn());
53| const cancelled = expect(done).rejects.toMatchObject({ name: 'Abor…
| ^
54| await expect(f.engine.play(question, false, vi.fn())).rejects.toTh…
55| await flush();
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:1632:35
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:2794:26
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:3334:20
❯ runWithCancel node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:3329:10
This error originated in "tests/audio.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯
Error: 오디오 미구현
❯ AudioEngine.play src/audio/engine.ts:13:99
11| export class AudioEngine implements AudioPort {
12| constructor(_factory: () => AudioContext = () => new AudioContext(),…
13| async play(_question: Question, _intro: boolean, _onStarted: () => v…
| ^
14| stop(): void { /* RED 확인을 위한 인터페이스 자리만 확보한다. */ }
15| dispose(): void { /* 정리 동작은 취소 테스트 후 구현한다. */ }
❯ tests/audio.test.ts:92:27
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:1632:35
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:2794:26
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:3334:20
❯ runWithCancel node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:3329:10
❯ node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:3314:20
❯ runWithTimeout node_modules/vitest/dist/chunks/run.Cm2sd7-x.js:3272:10
This error originated in "tests/audio.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Test Files 1 failed (1)
Tests 5 failed (5)
Errors 3 errors
Start at 04:58:29
Duration 885ms (environment 75%, setup 13%, transform 7%, tests 3%, import 1%, worker 1%)