@amazon/vinyl 2.0.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/dist/index.cjs +603 -317
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/index.js +622 -329
  4. package/dist/index.js.map +4 -4
  5. package/dist/test/benchmark.es5.js +8 -5
  6. package/dist/test/benchmark.js +228 -0
  7. package/dist/test/benchmark.js.map +4 -4
  8. package/dist/test/integ.es5.js +182 -156
  9. package/dist/test/integ.js +1853 -796
  10. package/dist/test/integ.js.map +4 -4
  11. package/dist/types/current/index.d.ts +4 -0
  12. package/dist/types/current/index.d.ts.map +1 -1
  13. package/dist/types/current/index.js +4 -0
  14. package/dist/types/current/streaming/AudioOptions.d.ts +39 -0
  15. package/dist/types/current/streaming/AudioOptions.d.ts.map +1 -0
  16. package/dist/types/current/streaming/AudioOptions.js +15 -0
  17. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts +2 -2
  18. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts.map +1 -1
  19. package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.js +5 -5
  20. package/dist/types/current/text/HtmlTextTrackRenderer.d.ts +60 -0
  21. package/dist/types/current/text/HtmlTextTrackRenderer.d.ts.map +1 -0
  22. package/dist/types/current/text/HtmlTextTrackRenderer.js +231 -0
  23. package/dist/types/current/text/SidecarTextTrackController.d.ts +65 -53
  24. package/dist/types/current/text/SidecarTextTrackController.d.ts.map +1 -1
  25. package/dist/types/current/text/SidecarTextTrackController.js +167 -154
  26. package/dist/types/current/text/SidecarTextTrackLoader.d.ts +5 -0
  27. package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -1
  28. package/dist/types/current/text/SidecarTextTrackLoader.js +13 -7
  29. package/dist/types/current/text/TextTrack.d.ts +74 -20
  30. package/dist/types/current/text/TextTrack.d.ts.map +1 -1
  31. package/dist/types/current/text/TextTrack.js +20 -0
  32. package/dist/types/current/text/TextTrackRenderer.d.ts +24 -0
  33. package/dist/types/current/text/TextTrackRenderer.d.ts.map +1 -0
  34. package/dist/types/current/text/TextTrackRenderer.js +5 -0
  35. package/dist/types/current/text/mediaTextTrackProvider.d.ts +34 -0
  36. package/dist/types/current/text/mediaTextTrackProvider.d.ts.map +1 -0
  37. package/dist/types/current/text/mediaTextTrackProvider.js +42 -0
  38. package/dist/types/current/text/parseWebVtt.d.ts +16 -2
  39. package/dist/types/current/text/parseWebVtt.d.ts.map +1 -1
  40. package/dist/types/current/text/parseWebVtt.js +176 -48
  41. package/dist/types/current/text/pickPreferredTextTrack.d.ts +2 -1
  42. package/dist/types/current/text/pickPreferredTextTrack.d.ts.map +1 -1
  43. package/dist/types/current/text/pickPreferredTextTrack.js +6 -3
  44. package/dist/types/current/track/Track.d.ts +1 -1
  45. package/dist/types/current/track/dash/createDashFactories.d.ts +21 -10
  46. package/dist/types/current/track/dash/createDashFactories.d.ts.map +1 -1
  47. package/dist/types/current/track/dash/createDashFactories.js +9 -21
  48. package/dist/types/current/track/hls/createHlsFactories.d.ts +21 -10
  49. package/dist/types/current/track/hls/createHlsFactories.d.ts.map +1 -1
  50. package/dist/types/current/track/hls/createHlsFactories.js +9 -21
  51. package/dist/types/current/track/mse/MseTrack.d.ts +1 -2
  52. package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
  53. package/dist/types/current/track/mse/MseTrack.js +3 -7
  54. package/dist/types/current/tsconfig.tsbuildinfo +1 -1
  55. package/dist/types/current/vinyl/VinylOptions.d.ts +18 -40
  56. package/dist/types/current/vinyl/VinylOptions.d.ts.map +1 -1
  57. package/dist/types/current/vinyl/VinylOptions.js +12 -11
  58. package/dist/types/current/vinyl/VinylPlayer.d.ts +0 -6
  59. package/dist/types/current/vinyl/VinylPlayer.d.ts.map +1 -1
  60. package/dist/types/current/vinyl/VinylPlayer.js +2 -23
  61. package/dist/types/current/vinyl/createVinylFactories.d.ts +32 -18
  62. package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
  63. package/dist/types/current/vinyl/createVinylFactories.js +6 -0
  64. package/dist/types/ts3.7/index.d.ts +4 -0
  65. package/dist/types/ts3.7/streaming/AudioOptions.d.ts +39 -0
  66. package/dist/types/ts3.7/streaming/createDefaultMediaTimelineTransformer.d.ts +2 -2
  67. package/dist/types/ts3.7/text/HtmlTextTrackRenderer.d.ts +60 -0
  68. package/dist/types/ts3.7/text/SidecarTextTrackController.d.ts +65 -53
  69. package/dist/types/ts3.7/text/SidecarTextTrackLoader.d.ts +5 -0
  70. package/dist/types/ts3.7/text/TextTrack.d.ts +74 -20
  71. package/dist/types/ts3.7/text/TextTrackRenderer.d.ts +24 -0
  72. package/dist/types/ts3.7/text/mediaTextTrackProvider.d.ts +34 -0
  73. package/dist/types/ts3.7/text/parseWebVtt.d.ts +16 -2
  74. package/dist/types/ts3.7/text/pickPreferredTextTrack.d.ts +2 -1
  75. package/dist/types/ts3.7/track/Track.d.ts +1 -1
  76. package/dist/types/ts3.7/track/dash/createDashFactories.d.ts +21 -10
  77. package/dist/types/ts3.7/track/hls/createHlsFactories.d.ts +21 -10
  78. package/dist/types/ts3.7/track/mse/MseTrack.d.ts +1 -2
  79. package/dist/types/ts3.7/vinyl/VinylOptions.d.ts +18 -40
  80. package/dist/types/ts3.7/vinyl/VinylPlayer.d.ts +0 -6
  81. package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +32 -18
  82. package/dist/types/ts4.1/index.d.ts +4 -0
  83. package/dist/types/ts4.1/streaming/AudioOptions.d.ts +39 -0
  84. package/dist/types/ts4.1/streaming/createDefaultMediaTimelineTransformer.d.ts +2 -2
  85. package/dist/types/ts4.1/text/HtmlTextTrackRenderer.d.ts +60 -0
  86. package/dist/types/ts4.1/text/SidecarTextTrackController.d.ts +65 -53
  87. package/dist/types/ts4.1/text/SidecarTextTrackLoader.d.ts +5 -0
  88. package/dist/types/ts4.1/text/TextTrack.d.ts +74 -20
  89. package/dist/types/ts4.1/text/TextTrackRenderer.d.ts +24 -0
  90. package/dist/types/ts4.1/text/mediaTextTrackProvider.d.ts +34 -0
  91. package/dist/types/ts4.1/text/parseWebVtt.d.ts +16 -2
  92. package/dist/types/ts4.1/text/pickPreferredTextTrack.d.ts +2 -1
  93. package/dist/types/ts4.1/track/Track.d.ts +1 -1
  94. package/dist/types/ts4.1/track/dash/createDashFactories.d.ts +21 -10
  95. package/dist/types/ts4.1/track/hls/createHlsFactories.d.ts +21 -10
  96. package/dist/types/ts4.1/track/mse/MseTrack.d.ts +1 -2
  97. package/dist/types/ts4.1/vinyl/VinylOptions.d.ts +18 -40
  98. package/dist/types/ts4.1/vinyl/VinylPlayer.d.ts +0 -6
  99. package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +32 -18
  100. package/dist/types/ts4.7/index.d.ts +4 -0
  101. package/dist/types/ts4.7/streaming/AudioOptions.d.ts +39 -0
  102. package/dist/types/ts4.7/streaming/createDefaultMediaTimelineTransformer.d.ts +2 -2
  103. package/dist/types/ts4.7/text/HtmlTextTrackRenderer.d.ts +60 -0
  104. package/dist/types/ts4.7/text/SidecarTextTrackController.d.ts +65 -53
  105. package/dist/types/ts4.7/text/SidecarTextTrackLoader.d.ts +5 -0
  106. package/dist/types/ts4.7/text/TextTrack.d.ts +74 -20
  107. package/dist/types/ts4.7/text/TextTrackRenderer.d.ts +24 -0
  108. package/dist/types/ts4.7/text/mediaTextTrackProvider.d.ts +34 -0
  109. package/dist/types/ts4.7/text/parseWebVtt.d.ts +16 -2
  110. package/dist/types/ts4.7/text/pickPreferredTextTrack.d.ts +2 -1
  111. package/dist/types/ts4.7/track/Track.d.ts +1 -1
  112. package/dist/types/ts4.7/track/dash/createDashFactories.d.ts +21 -10
  113. package/dist/types/ts4.7/track/hls/createHlsFactories.d.ts +21 -10
  114. package/dist/types/ts4.7/track/mse/MseTrack.d.ts +1 -2
  115. package/dist/types/ts4.7/vinyl/VinylOptions.d.ts +18 -40
  116. package/dist/types/ts4.7/vinyl/VinylPlayer.d.ts +0 -6
  117. package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +32 -18
  118. package/dist/unit/types/current/index.d.ts +2 -0
  119. package/dist/unit/types/current/index.d.ts.map +1 -1
  120. package/dist/unit/types/current/index.js +2 -0
  121. package/dist/unit/types/current/streaming/MseTrack.test.js +13 -7
  122. package/dist/unit/types/current/streaming/createDefaultMediaTimelineTransformer.test.js +8 -4
  123. package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts +2 -0
  124. package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts.map +1 -0
  125. package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.js +231 -0
  126. package/dist/unit/types/current/text/SidecarTextTrackController.test.js +432 -333
  127. package/dist/unit/types/current/text/SidecarTextTrackLoader.test.js +29 -0
  128. package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts +2 -0
  129. package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts.map +1 -0
  130. package/dist/unit/types/current/text/mediaTextTrackProvider.test.js +86 -0
  131. package/dist/unit/types/current/text/parseWebVtt.test.js +187 -6
  132. package/dist/unit/types/current/text/pickPreferredTextTrack.test.js +12 -1
  133. package/dist/unit/types/current/track/dash/createDashFactories.test.js +1 -2
  134. package/dist/unit/types/current/track/hls/buildHlsMediaTimeline.test.js +1 -2
  135. package/dist/unit/types/current/track/hls/createHlsFactories.test.js +1 -2
  136. package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
  137. package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.js +102 -177
  138. package/dist/unit/types/current/vinyl/createVinylFactories.test.js +2 -0
  139. package/dist/vinylTestUtil/index.js +14 -8
  140. package/dist/vinylTestUtil/index.js.map +2 -2
  141. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts +3 -2
  142. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts.map +1 -1
  143. package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.js +5 -2
  144. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts +3 -3
  145. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts.map +1 -1
  146. package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.js +3 -3
  147. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts +1 -2
  148. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts.map +1 -1
  149. package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.js +3 -2
  150. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts +1 -2
  151. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts.map +1 -1
  152. package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.js +3 -2
  153. package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
  154. package/dist/vinylTestUtil/types/ts3.7/mock/player/MockVinylPlayerDependencies.d.ts +3 -2
  155. package/dist/vinylTestUtil/types/ts3.7/mock/text/MockTextTrackController.d.ts +3 -3
  156. package/dist/vinylTestUtil/types/ts3.7/mock/track/dash/createMockDashDependencies.d.ts +1 -2
  157. package/dist/vinylTestUtil/types/ts3.7/mock/track/hls/createMockHlsDependencies.d.ts +1 -2
  158. package/dist/vinylTestUtil/types/ts4.1/mock/player/MockVinylPlayerDependencies.d.ts +3 -2
  159. package/dist/vinylTestUtil/types/ts4.1/mock/text/MockTextTrackController.d.ts +3 -3
  160. package/dist/vinylTestUtil/types/ts4.1/mock/track/dash/createMockDashDependencies.d.ts +1 -2
  161. package/dist/vinylTestUtil/types/ts4.1/mock/track/hls/createMockHlsDependencies.d.ts +1 -2
  162. package/dist/vinylTestUtil/types/ts4.7/mock/player/MockVinylPlayerDependencies.d.ts +3 -2
  163. package/dist/vinylTestUtil/types/ts4.7/mock/text/MockTextTrackController.d.ts +3 -3
  164. package/dist/vinylTestUtil/types/ts4.7/mock/track/dash/createMockDashDependencies.d.ts +1 -2
  165. package/dist/vinylTestUtil/types/ts4.7/mock/track/hls/createMockHlsDependencies.d.ts +1 -2
  166. package/docs/USAGE.md +82 -31
  167. package/package.json +9 -9
@@ -0,0 +1,231 @@
1
+ /*
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { computeCueLayout, renderCueText, HtmlTextTrackRenderer, } from '@amazon/vinyl';
6
+ describe('computeCueLayout', () => {
7
+ it('flows a cue with no line/position (defaults: center, full width)', () => {
8
+ expect(computeCueLayout({})).toEqual({
9
+ textAlign: 'center',
10
+ maxWidth: '100%',
11
+ });
12
+ });
13
+ it('maps align and size', () => {
14
+ const layout = computeCueLayout({ align: 'start', size: 80 });
15
+ expect(layout.textAlign).toBe('start');
16
+ expect(layout.maxWidth).toBe('80%');
17
+ });
18
+ it('maps vertical writing modes', () => {
19
+ expect(computeCueLayout({ vertical: 'rl' }).writingMode).toBe('vertical-rl');
20
+ expect(computeCueLayout({ vertical: 'lr' }).writingMode).toBe('vertical-lr');
21
+ });
22
+ it('centers horizontally and bottom-anchors when only a line is set', () => {
23
+ // line 40% (snapToLines false), default lineAlign → top:40%.
24
+ const layout = computeCueLayout({ line: 40, snapToLines: false });
25
+ expect(layout.position).toBe('absolute');
26
+ expect(layout.left).toBe('50%');
27
+ expect(layout.top).toBe('40%');
28
+ expect(layout.transform).toBe('translateX(-50%)');
29
+ });
30
+ it('percentage line honors lineAlign end and center', () => {
31
+ expect(computeCueLayout({ line: 20, snapToLines: false, lineAlign: 'end' })
32
+ .bottom).toBe('80%');
33
+ const center = computeCueLayout({
34
+ line: 30,
35
+ snapToLines: false,
36
+ lineAlign: 'center',
37
+ });
38
+ expect(center.top).toBe('30%');
39
+ expect(center.transform).toContain('translateY(-50%)');
40
+ });
41
+ it('snap-to-lines integer line: negative counts up from the bottom', () => {
42
+ expect(computeCueLayout({ line: -3, snapToLines: true }).bottom).toBe('3em');
43
+ expect(computeCueLayout({ line: 2, snapToLines: true }).top).toBe('3em');
44
+ });
45
+ it('positions horizontally by positionAlign', () => {
46
+ expect(computeCueLayout({ position: 20, positionAlign: 'line-left' }).left).toBe('20%');
47
+ expect(computeCueLayout({ position: 20, positionAlign: 'line-right' })
48
+ .right).toBe('80%');
49
+ const center = computeCueLayout({
50
+ position: 30,
51
+ positionAlign: 'center',
52
+ });
53
+ expect(center.left).toBe('30%');
54
+ expect(center.transform).toBe('translateX(-50%)');
55
+ });
56
+ it('a position without a line bottom-anchors', () => {
57
+ expect(computeCueLayout({ position: 10 }).bottom).toBe('0');
58
+ });
59
+ });
60
+ describe('renderCueText', () => {
61
+ it('escapes plain text and turns newlines into <br>', () => {
62
+ expect(renderCueText('a & b\nc')).toBe('a &amp; b<br>c');
63
+ });
64
+ it('escapes a stray < that is not a tag', () => {
65
+ expect(renderCueText('a < b')).toBe('a &lt; b');
66
+ });
67
+ it('converts <c.class> to a styled span', () => {
68
+ expect(renderCueText('<c.styledotitalic>hi</c>')).toBe('<span class="styledotitalic">hi</span>');
69
+ });
70
+ it('joins multiple cue classes', () => {
71
+ expect(renderCueText('<c.a.b>x</c>')).toBe('<span class="a b">x</span>');
72
+ });
73
+ it('passes through i/b/u tags', () => {
74
+ expect(renderCueText('<i>x</i><b>y</b><u>z</u>')).toBe('<i>x</i><b>y</b><u>z</u>');
75
+ });
76
+ it('maps voice and lang tags to spans with attributes', () => {
77
+ expect(renderCueText('<v Bob>hi</v>')).toBe('<span title="Bob">hi</span>');
78
+ expect(renderCueText('<lang en>x</lang>')).toBe('<span lang="en">x</span>');
79
+ });
80
+ it('renders voice/lang without an annotation as a bare span', () => {
81
+ expect(renderCueText('<v>hi</v>')).toBe('<span>hi</span>');
82
+ expect(renderCueText('<lang>x</lang>')).toBe('<span>x</span>');
83
+ });
84
+ it('escapes annotation values', () => {
85
+ expect(renderCueText('<v a"b>x</v>')).toBe('<span title="a&quot;b">x</span>');
86
+ });
87
+ it('drops timestamp tags and unknown tags', () => {
88
+ expect(renderCueText('<00:00:01.000>a')).toBe('a');
89
+ expect(renderCueText('<xyz>a</xyz>')).toBe('a');
90
+ });
91
+ });
92
+ describe('HtmlTextTrackRenderer', () => {
93
+ function fakeElement() {
94
+ return {
95
+ style: {},
96
+ className: '',
97
+ innerHTML: '',
98
+ textContent: '',
99
+ children: [],
100
+ appendChild(node) {
101
+ this.children.push(node);
102
+ },
103
+ replaceChildren(...nodes) {
104
+ this.children = nodes;
105
+ },
106
+ };
107
+ }
108
+ // Reads children as an array so it works with both the Node fake (a plain
109
+ // array) and a real browser (a live HTMLCollection).
110
+ function domChildren() {
111
+ return Array.from(container.children);
112
+ }
113
+ /** The rendered cue boxes (excluding the internal <style> element). */
114
+ function cueBoxes() {
115
+ return domChildren().filter((c) => c.className === 'vinyl-text-cue');
116
+ }
117
+ /** The internal <style> element (always the first child). */
118
+ function styleElement() {
119
+ return domChildren()[0];
120
+ }
121
+ class FakeTextTrack {
122
+ activeCues = [];
123
+ listeners = new Map();
124
+ addEventListener = jasmine
125
+ .createSpy('addEventListener')
126
+ .and.callFake((type, fn) => this.listeners.set(type, fn));
127
+ removeEventListener = jasmine
128
+ .createSpy('removeEventListener')
129
+ .and.callFake((type) => this.listeners.delete(type));
130
+ fireCueChange() {
131
+ this.listeners.get('cuechange')?.();
132
+ }
133
+ }
134
+ function cue(text, geometry = {}) {
135
+ return { text, ...geometry };
136
+ }
137
+ let view;
138
+ let container;
139
+ // In Node there is no DOM, so stub `document`; in a real browser (the integ
140
+ // bundle) `document` is a read-only global — use it as-is and only fake when
141
+ // absent.
142
+ let stubbedDocument = false;
143
+ beforeEach(() => {
144
+ if (typeof document === 'undefined') {
145
+ ;
146
+ globalThis.document = {
147
+ createElement: () => fakeElement(),
148
+ };
149
+ stubbedDocument = true;
150
+ }
151
+ view = new HtmlTextTrackRenderer();
152
+ container = view.element;
153
+ });
154
+ afterEach(() => {
155
+ view.dispose();
156
+ if (stubbedDocument) {
157
+ delete globalThis.document;
158
+ stubbedDocument = false;
159
+ }
160
+ });
161
+ it('creates a positioned overlay container', () => {
162
+ expect(container.className).toBe('vinyl-text-container');
163
+ expect(container.style.justifyContent).toBe('flex-end');
164
+ expect(container.style.pointerEvents).toBe('none');
165
+ });
166
+ it('renders the active cues, escaping text and applying layout', () => {
167
+ const track = new FakeTextTrack();
168
+ track.activeCues = [cue('hi\nthere', { align: 'start' })];
169
+ view.setTextTrack(track);
170
+ expect(track.addEventListener).toHaveBeenCalledWith('cuechange', jasmine.any(Function));
171
+ const boxes = cueBoxes();
172
+ expect(boxes.length).toBe(1);
173
+ expect(boxes[0].innerHTML).toBe('hi<br>there');
174
+ expect(boxes[0].style.textAlign).toBe('start');
175
+ });
176
+ it('re-renders on cuechange', () => {
177
+ const track = new FakeTextTrack();
178
+ track.activeCues = [];
179
+ view.setTextTrack(track);
180
+ expect(cueBoxes().length).toBe(0);
181
+ track.activeCues = [cue('now showing')];
182
+ track.fireCueChange();
183
+ expect(cueBoxes().length).toBe(1);
184
+ });
185
+ it('renders an empty box for a cue with no text', () => {
186
+ const track = new FakeTextTrack();
187
+ track.activeCues = [{ align: 'center' }]; // no `text`
188
+ view.setTextTrack(track);
189
+ expect(cueBoxes()[0].innerHTML).toBe('');
190
+ });
191
+ it('handles a track with null activeCues', () => {
192
+ const track = new FakeTextTrack();
193
+ track.activeCues = null;
194
+ view.setTextTrack(track);
195
+ expect(cueBoxes().length).toBe(0);
196
+ });
197
+ it('is a no-op when set to the same track', () => {
198
+ const track = new FakeTextTrack();
199
+ view.setTextTrack(track);
200
+ view.setTextTrack(track);
201
+ expect(track.addEventListener).toHaveBeenCalledTimes(1);
202
+ });
203
+ it('detaches and clears when set to null', () => {
204
+ const track = new FakeTextTrack();
205
+ track.activeCues = [cue('bye')];
206
+ view.setTextTrack(track);
207
+ view.setTextTrack(null);
208
+ expect(track.removeEventListener).toHaveBeenCalledWith('cuechange', jasmine.any(Function));
209
+ expect(cueBoxes().length).toBe(0);
210
+ });
211
+ it('injects authored STYLE rules with ::cue selectors rewritten', () => {
212
+ view.setStyles([
213
+ '::cue(.loud) { font-weight: bold }\n::cue { color: red }',
214
+ ]);
215
+ const style = styleElement();
216
+ expect(style.textContent).toBe('.vinyl-text-cue .loud { font-weight: bold }\n.vinyl-text-cue { color: red }');
217
+ });
218
+ it('clears authored styles when the track changes', () => {
219
+ view.setStyles(['::cue { color: red }']);
220
+ const style = styleElement();
221
+ expect(style.textContent).not.toBe('');
222
+ view.setTextTrack(new FakeTextTrack());
223
+ expect(style.textContent).toBe('');
224
+ });
225
+ it('dispose detaches the current track', () => {
226
+ const track = new FakeTextTrack();
227
+ view.setTextTrack(track);
228
+ view.dispose();
229
+ expect(track.removeEventListener).toHaveBeenCalled();
230
+ });
231
+ });