Skip to content

Commit b3f2342

Browse files
committed
implemented lifecycle management
1 parent 2d41832 commit b3f2342

File tree

5 files changed

+290
-155
lines changed

5 files changed

+290
-155
lines changed

src/tracks/caption/preset.1.spec.ts

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,18 @@ import { Transcript, Word, WordGroup } from '../../models';
1414
const file = new File([], 'file.mp3', { type: 'audio/mp3' });
1515

1616
describe('(1) The Caption Presets', () => {
17-
const mockFn = vi.fn();
18-
19-
Object.assign(document, { fonts: { add: mockFn } });
17+
Object.assign(document, { fonts: { add: vi.fn() } });
2018

2119
it('should adjust its offset when the media stack changes', async () => {
2220
const composition = new Composition();
2321

24-
const media1 = await new AudioClip().load(file);
25-
media1.element.dispatchEvent(new Event('canplay'));
26-
media1.duration.seconds = 20;
22+
const media1 = new AudioClip(file);
23+
mockAudioValid(media1);
24+
mockDurationValid(media1, 20);
2725

28-
const media2 = await new AudioClip().load(file);
29-
media2.element.dispatchEvent(new Event('canplay'));
30-
media2.duration.seconds = 12;
26+
const media2 = new AudioClip(file);
27+
mockAudioValid(media2);
28+
mockDurationValid(media2, 12);
3129

3230
const track0 = composition.shiftTrack(MediaTrack).stacked();
3331

@@ -127,3 +125,15 @@ describe('(1) The Caption Presets', () => {
127125
expect(track2.clips.at(4)?.stop.seconds).toBe(10);
128126
});
129127
});
128+
129+
130+
function mockAudioValid(clip: AudioClip) {
131+
return vi.spyOn(clip.element, 'oncanplay', 'set')
132+
.mockImplementation(function (this: HTMLMediaElement, fn) {
133+
fn?.call(this, new Event('canplay'));
134+
});
135+
}
136+
137+
function mockDurationValid(clip: AudioClip, duration = 1) {
138+
return vi.spyOn(clip.element, 'duration', 'get').mockReturnValue(duration);
139+
}

src/tracks/track/track.render.spec.ts

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,28 @@
66
*/
77

88
import { beforeEach, describe, expect, it, type MockInstance, vi } from 'vitest';
9-
import { WebGPURenderer } from 'pixi.js';
109
import { Clip } from '../../clips';
1110
import { Track } from './track';
1211
import { Timestamp } from '../../models';
1312

1413
import type { frame } from '../../types';
1514

16-
const renderer = new WebGPURenderer();
17-
1815
describe('The Track Object', () => {
1916
let track: Track<Clip>;
20-
let renderSpy: MockInstance<(renderer: WebGPURenderer, time: Timestamp) => void | Promise<void>>;
17+
let updateSpy: MockInstance<(time: Timestamp) => void | Promise<void>>;
2118

2219
beforeEach(() => {
2320
// frame and seconds are the same
2421
track = new Track();
25-
renderSpy = vi.spyOn(track, 'render');
22+
updateSpy = vi.spyOn(track, 'update');
2623
});
2724

2825
it('should render should not have any effects when the track is empty', () => {
2926
track.pointer = 4;
3027

31-
track.render(renderer, new Timestamp());
28+
track.update(new Timestamp());
3229

33-
expect(renderSpy).toHaveBeenCalledTimes(1);
30+
expect(updateSpy).toHaveBeenCalledTimes(1);
3431
expect(track.pointer).toBe(4);
3532
});
3633

@@ -43,50 +40,50 @@ describe('The Track Object', () => {
4340
new Clip().set({ start: <frame>50, stop: <frame>60 }),
4441
];
4542

46-
const spys = track.clips.map((clip) => vi.spyOn(clip, 'render'));
43+
const spys = track.clips.map((clip) => vi.spyOn(clip, 'update'));
4744

48-
track.render(renderer, new Timestamp());
45+
track.update(new Timestamp());
4946

50-
expect(renderSpy).toHaveBeenCalledTimes(1);
47+
expect(updateSpy).toHaveBeenCalledTimes(1);
5148
expect(track.pointer).toBe(0);
5249

5350
expect(spys[0]).toHaveBeenCalledTimes(1);
5451
expect(spys[1]).toHaveBeenCalledTimes(0);
5552
expect(spys[2]).toHaveBeenCalledTimes(0);
5653

57-
track.render(renderer, Timestamp.fromFrames(15));
54+
track.update(Timestamp.fromFrames(15));
5855

5956
// one more due to recursion after clip seek
60-
expect(renderSpy).toHaveBeenCalledTimes(2);
57+
expect(updateSpy).toHaveBeenCalledTimes(2);
6158
expect(track.pointer).toBe(1);
6259

6360
expect(spys[0]).toHaveBeenCalledTimes(1);
6461
expect(spys[1]).toHaveBeenCalledTimes(0);
6562
expect(spys[2]).toHaveBeenCalledTimes(0);
6663

67-
track.render(renderer, Timestamp.fromFrames(25));
64+
track.update(Timestamp.fromFrames(25));
6865

69-
expect(renderSpy).toHaveBeenCalledTimes(3);
66+
expect(updateSpy).toHaveBeenCalledTimes(3);
7067
expect(track.pointer).toBe(1);
7168

7269
expect(spys[0]).toHaveBeenCalledTimes(1);
7370
expect(spys[1]).toHaveBeenCalledTimes(1);
7471
expect(spys[2]).toHaveBeenCalledTimes(0);
7572

7673
// jump to 3rd clip
77-
track.render(renderer, Timestamp.fromFrames(50));
74+
track.update(Timestamp.fromFrames(50));
7875

79-
expect(renderSpy).toHaveBeenCalledTimes(4);
76+
expect(updateSpy).toHaveBeenCalledTimes(4);
8077
expect(track.pointer).toBe(2);
8178

8279
expect(spys[0]).toHaveBeenCalledTimes(1);
8380
expect(spys[1]).toHaveBeenCalledTimes(1);
8481
expect(spys[2]).toHaveBeenCalledTimes(1);
8582

8683
// render after all clips
87-
track.render(renderer, Timestamp.fromFrames(70));
84+
track.update(Timestamp.fromFrames(70));
8885

89-
expect(renderSpy).toHaveBeenCalledTimes(5);
86+
expect(updateSpy).toHaveBeenCalledTimes(5);
9087
expect(track.pointer).toBe(2);
9188

9289
expect(spys[0]).toHaveBeenCalledTimes(1);
@@ -102,27 +99,27 @@ describe('The Track Object', () => {
10299
new Clip().set({ start: <frame>21, stop: <frame>30 }),
103100
];
104101

105-
const spys = track.clips.map((clip) => vi.spyOn(clip, 'render'));
102+
const spys = track.clips.map((clip) => vi.spyOn(clip, 'update'));
106103

107-
track.render(renderer, Timestamp.fromFrames(5));
104+
track.update(Timestamp.fromFrames(5));
108105

109-
expect(renderSpy).toHaveBeenCalledTimes(1);
106+
expect(updateSpy).toHaveBeenCalledTimes(1);
110107
expect(track.pointer).toBe(0);
111108

112109
expect(spys[0]).toHaveBeenCalledTimes(0);
113110
expect(spys[1]).toHaveBeenCalledTimes(0);
114111

115-
track.render(renderer, Timestamp.fromFrames(21));
112+
track.update(Timestamp.fromFrames(21));
116113

117-
expect(renderSpy).toHaveBeenCalledTimes(2);
114+
expect(updateSpy).toHaveBeenCalledTimes(2);
118115
expect(track.pointer).toBe(1);
119116

120117
expect(spys[0]).toHaveBeenCalledTimes(0);
121118
expect(spys[1]).toHaveBeenCalledTimes(1);
122119

123-
track.render(renderer, Timestamp.fromFrames(10));
120+
track.update(Timestamp.fromFrames(10));
124121

125-
expect(renderSpy).toHaveBeenCalledTimes(3);
122+
expect(updateSpy).toHaveBeenCalledTimes(3);
126123
expect(track.pointer).toBe(0);
127124

128125
expect(spys[0]).toHaveBeenCalledTimes(1);

0 commit comments

Comments
 (0)