UNPKG

7.52 kBJavaScriptView Raw
1import QUnit from 'qunit';
2import AdCueTags from '../src/ad-cue-tags';
3import window from 'global/window';
4
5QUnit.module('AdCueTags', {
6 beforeEach() {
7 this.track = {
8 cues: [],
9 addCue(cue) {
10 this.cues.push(cue);
11 },
12 clearTrack() {
13 this.cues = [];
14 }
15 };
16 }
17});
18
19QUnit.test('update tag cues', function(assert) {
20
21 let testCue = new window.VTTCue(0, 10, 'test');
22
23 this.track.addCue(testCue);
24
25 AdCueTags.updateAdCues({}, this.track);
26
27 assert.equal(this.track.cues.length,
28 1,
29 'does not change cues if media does not have segment property');
30 assert.equal(this.track.cues[0],
31 testCue,
32 'does not change cues if media does not have segment property');
33
34 AdCueTags.updateAdCues({
35 segments: []
36 }, this.track);
37
38 assert.equal(this.track.cues.length,
39 1,
40 'does not remove cues even if no segments in playlist');
41
42 this.track.clearTrack();
43
44 AdCueTags.updateAdCues({
45 segments: [{
46 duration: 5.1,
47 cueOut: '11.5'
48 }, {
49 duration: 6.4,
50 cueOutCont: '5.1/11.5'
51 }, {
52 duration: 6,
53 cueIn: ''
54 }]
55 }, this.track, 10);
56
57 assert.equal(this.track.cues.length, 1, 'adds a single cue for entire ad');
58
59 testCue = this.track.cues[0];
60 assert.equal(testCue.startTime, 10, 'cue starts at 10');
61 assert.equal(testCue.endTime, 21.5, 'cue ends at start time plus duration');
62
63 this.track.clearTrack();
64
65 AdCueTags.updateAdCues({
66 segments: [{
67 duration: 10,
68 cueOutCont: '10/30'
69 }, {
70 duration: 10,
71 cueOutCont: '20/30'
72 }, {
73 duration: 10,
74 cueIn: ''
75 }]
76 }, this.track);
77
78 assert.equal(this.track.cues.length, 1,
79 'adds a single cue for entire ad when entering mid cue-out-cont');
80
81 testCue = this.track.cues[0];
82 assert.equal(testCue.startTime, 0, 'cue starts at 0');
83 assert.equal(testCue.endTime, 20, 'cue ends at start time plus duration');
84 assert.equal(testCue.adStartTime, -10, 'cue ad starts at -10');
85 assert.equal(testCue.adEndTime, 20, 'cue ad ends at 20');
86});
87
88QUnit.test('update incomplete cue in live playlist situation', function(assert) {
89 AdCueTags.updateAdCues({
90 segments: [
91 {
92 duration: 10,
93 cueOut: '30'
94 },
95 {
96 duration: 10,
97 cueOutCont: '10/30'
98 }
99 ]
100 }, this.track, 10);
101
102 assert.equal(this.track.cues.length, 1, 'adds a single cue for new ad');
103
104 let testCue = this.track.cues[0];
105
106 assert.equal(testCue.startTime, 10, 'cue starts at 10');
107 assert.equal(testCue.endTime, 30, 'cue ends at start time plus segment durations');
108 assert.equal(testCue.adStartTime, 10, 'cue ad starts at 10');
109 assert.equal(testCue.adEndTime, 40, 'cue ad ends at 40');
110
111 AdCueTags.updateAdCues({
112 segments: [
113 {
114 duration: 10,
115 cueOutCont: '10/30'
116 },
117 {
118 duration: 10,
119 cueOutCont: '20/30'
120 }
121 ]
122 }, this.track, 20);
123
124 assert.equal(this.track.cues.length, 1, 'did not remove cue or add a new one');
125
126 assert.equal(testCue.startTime, 10, 'cue still starts at 10');
127 assert.equal(testCue.endTime, 40, 'cue end updated to include next segment duration');
128 assert.equal(testCue.adStartTime, 10, 'cue ad still starts at 10');
129 assert.equal(testCue.adEndTime, 40, 'cue ad still ends at 40');
130
131 AdCueTags.updateAdCues({
132 segments: [
133 {
134 duration: 10,
135 cueOutCont: '20/30'
136 },
137 {
138 duration: 10,
139 cueIn: ''
140 }
141 ]
142 }, this.track, 30);
143
144 assert.equal(this.track.cues.length, 1, 'did not remove cue or add a new one');
145
146 assert.equal(testCue.startTime, 10, 'cue still starts at 10');
147 assert.equal(testCue.endTime, 40, 'cue end still 40');
148 assert.equal(testCue.adStartTime, 10, 'cue ad still starts at 10');
149 assert.equal(testCue.adEndTime, 40, 'cue ad still ends at 40');
150});
151
152QUnit.test('adjust cue end time in event of early CUE-IN', function(assert) {
153 AdCueTags.updateAdCues({
154 segments: [
155 {
156 duration: 10,
157 cueOut: '30'
158 },
159 {
160 duration: 10,
161 cueOutCont: '10/30'
162 },
163 {
164 duration: 10,
165 cueOutCont: '20/30'
166 }
167 ]
168 }, this.track, 10);
169
170 assert.equal(this.track.cues.length, 1, 'adds a single cue for new ad');
171
172 let testCue = this.track.cues[0];
173
174 assert.equal(testCue.startTime, 10, 'cue starts at 10');
175 assert.equal(testCue.endTime, 40, 'cue ends at start time plus segment durations');
176 assert.equal(testCue.adStartTime, 10, 'cue ad starts at 10');
177 assert.equal(testCue.adEndTime, 40, 'cue ad ends at 40');
178
179 AdCueTags.updateAdCues({
180 segments: [
181 {
182 duration: 10,
183 cueOutCont: '10/30'
184 },
185 {
186 duration: 10,
187 cueIn: ''
188 },
189 {
190 duration: 10
191 }
192 ]
193 }, this.track, 20);
194
195 assert.equal(this.track.cues.length, 1, 'did not remove cue or add a new one');
196
197 assert.equal(testCue.startTime, 10, 'cue still starts at 10');
198 assert.equal(testCue.endTime, 30, 'cue end updated to 30');
199 assert.equal(testCue.adStartTime, 10, 'cue ad still starts at 10');
200 assert.equal(testCue.adEndTime, 30,
201 'cue ad end updated to 30 to account for early cueIn');
202});
203
204QUnit.test('correctly handle multiple ad cues', function(assert) {
205 AdCueTags.updateAdCues({
206 segments: [
207 {
208 duration: 10
209 },
210 {
211 duration: 10
212 },
213 {
214 duration: 10
215 },
216 {
217 duration: 10,
218 cueOut: '30'
219 },
220 {
221 duration: 10,
222 cueOutCont: '10/30'
223 },
224 {
225 duration: 10,
226 cueOutCont: '20/30'
227 },
228 {
229 duration: 10,
230 cueIn: ''
231 },
232 {
233 duration: 10
234 },
235 {
236 duration: 10
237 },
238 {
239 duration: 10
240 },
241 {
242 duration: 10,
243 cueOut: '20'
244 },
245 {
246 duration: 10,
247 cueOutCont: '10/20'
248 },
249 {
250 duration: 10,
251 cueIn: ''
252 },
253 {
254 duration: 10
255 }
256 ]
257 }, this.track);
258
259 assert.equal(this.track.cues.length, 2, 'correctly created 2 cues for the ads');
260 assert.equal(this.track.cues[0].startTime, 30, 'cue created at correct start time');
261 assert.equal(this.track.cues[0].endTime, 60, 'cue has correct end time');
262 assert.equal(this.track.cues[0].adStartTime, 30, 'cue has correct ad start time');
263 assert.equal(this.track.cues[0].adEndTime, 60, 'cue has correct ad end time');
264 assert.equal(this.track.cues[1].startTime, 100, 'cue created at correct start time');
265 assert.equal(this.track.cues[1].endTime, 120, 'cue has correct end time');
266 assert.equal(this.track.cues[1].adStartTime, 100, 'cue has correct ad start time');
267 assert.equal(this.track.cues[1].adEndTime, 120, 'cue has correct ad end time');
268});
269
270QUnit.test('findAdCue returns correct cue', function(assert) {
271 this.track.cues = [
272 {
273 adStartTime: 0,
274 adEndTime: 30
275 },
276 {
277 adStartTime: 45,
278 adEndTime: 55
279 },
280 {
281 adStartTime: 100,
282 adEndTime: 120
283 }
284 ];
285
286 let cue;
287
288 cue = AdCueTags.findAdCue(this.track, 15);
289 assert.equal(cue.adStartTime, 0, 'returned correct cue');
290
291 cue = AdCueTags.findAdCue(this.track, 40);
292 assert.equal(cue, null, 'cue not found, returned null');
293
294 cue = AdCueTags.findAdCue(this.track, 120);
295 assert.equal(cue.adStartTime, 100, 'returned correct cue');
296
297 cue = AdCueTags.findAdCue(this.track, 45);
298 assert.equal(cue.adStartTime, 45, 'returned correct cue');
299});