UNPKG

4.9 kBJavaScriptView Raw
1import QUnit from 'qunit';
2import sinon from 'sinon';
3import sharedModuleHooks from './lib/shared-module-hooks.js';
4
5QUnit.module('Cue Metadata Text Tracks', sharedModuleHooks({
6
7 beforeEach() {
8 this.tt = {
9 player: this.player,
10 kind: 'metadata',
11 mode: 'hidden',
12 id: '1',
13 startTime: 1,
14 endTime: 2,
15 addEventListener(event, cb) {
16 if (event === 'cuechange') {
17 cb.apply(this, [this]);
18 }
19 },
20 activeCues: []
21 };
22 },
23 afterEach() {
24 this.player.ads.cueTextTracks.getSupportedAdCue = function(player, cue) {
25 return cue;
26 };
27 this.player.ads.cueTextTracks.getCueId = function(cue) {
28 return cue.id;
29 };
30 this.player.ads.cueTextTracks.setMetadataTrackMode = function(track) {
31 track.mode = 'hidden';
32 };
33 }
34}));
35
36QUnit.test('runs processMetadataTrack callback as tracks are added', function(assert) {
37 const tt = this.tt;
38 const processMetadataTrackSpy = sinon.spy();
39 const cueTextTracks = this.player.ads.cueTextTracks;
40
41 // Start by adding a text track before processing
42 this.player.addRemoteTextTrack(tt);
43
44 cueTextTracks.processMetadataTracks(this.player, processMetadataTrackSpy);
45 assert.strictEqual(processMetadataTrackSpy.callCount, 1);
46
47 // add a new text track after initial processing
48 this.player.textTracks().trigger({
49 track: this.tt,
50 type: 'addtrack'
51 });
52 assert.strictEqual(processMetadataTrackSpy.callCount, 2);
53});
54
55QUnit.test('does not call processMetadataTrack callback until tracks available', function(assert) {
56 const processMetadataTrackSpy = sinon.spy();
57 const cueTextTracks = this.player.ads.cueTextTracks;
58
59 cueTextTracks.processMetadataTracks(this.player, processMetadataTrackSpy);
60 assert.strictEqual(processMetadataTrackSpy.callCount, 0);
61
62 const addTrackEvent = {
63 track: this.tt,
64 type: 'addtrack'
65 };
66
67 this.player.textTracks().trigger(addTrackEvent);
68 assert.strictEqual(processMetadataTrackSpy.callCount, 1);
69});
70
71QUnit.test('setMetadataTrackMode should work when overriden', function(assert) {
72 const tt = this.tt;
73 const cueTextTracks = this.player.ads.cueTextTracks;
74
75 cueTextTracks.setMetadataTrackMode(tt);
76 assert.strictEqual(tt.mode, 'hidden');
77
78 cueTextTracks.setMetadataTrackMode = function(track) {
79 track.mode = 'disabled';
80 };
81 cueTextTracks.setMetadataTrackMode(tt);
82 assert.strictEqual(tt.mode, 'disabled');
83});
84
85QUnit.test('getSupportedAdCue should work when overriden', function(assert) {
86 const cue = {
87 startTime: 0,
88 endTime: 1
89 };
90
91 const cueTextTracks = this.player.ads.cueTextTracks;
92 let supportedCue = cueTextTracks.getSupportedAdCue(this.player, cue);
93
94 assert.strictEqual(supportedCue, cue);
95
96 cueTextTracks.getSupportedAdCue = function(player, subcue) {
97 return -1;
98 };
99 supportedCue = cueTextTracks.getSupportedAdCue(this.player, cue);
100 assert.strictEqual(supportedCue, -1);
101});
102
103QUnit.test('getCueId should work when overriden', function(assert) {
104 const originalTextTracks = this.player.textTracks;
105 const cue = {
106 startTime: 0,
107 endTime: 1,
108 id: 1,
109 inner: {
110 id: 2
111 }
112 };
113 const tt = this.tt;
114
115 tt.activeCues = [cue];
116
117 this.player.textTracks = function() {
118 return {
119 length: 1,
120 0: tt
121 };
122 };
123
124 const cueTextTracks = this.player.ads.cueTextTracks;
125 let cueId = cueTextTracks.getCueId(cue);
126
127 assert.strictEqual(cueId, 1);
128
129 cueTextTracks.getCueId = function(subcue) {
130 return subcue.inner.id;
131 };
132 cueId = cueTextTracks.getCueId(cue);
133 assert.strictEqual(cueId, 2);
134
135 // Clean Up
136 this.player.textTracks = originalTextTracks;
137});
138
139QUnit.test('processAdTrack runs processCue callback', function(assert) {
140 const processCueSpy = sinon.spy();
141 const cueTextTracks = this.player.ads.cueTextTracks;
142 const cues = [{
143 startTime: 0,
144 endTime: 1,
145 id: 1,
146 callCount: 0
147 }];
148
149 cueTextTracks.processAdTrack(this.player, cues, processCueSpy);
150 assert.strictEqual(processCueSpy.callCount, 1);
151
152 const processCue = function(player, cueData, cueId, startTime) {
153 cueData.callCount += 1;
154 };
155
156 cueTextTracks.processAdTrack(this.player, cues, processCue);
157 assert.strictEqual(cues[0].callCount, 1);
158});
159
160QUnit.test('processAdTrack runs cancelAds callback', function(assert) {
161 const cancelAdsSpy = sinon.spy();
162 const cueTextTracks = this.player.ads.cueTextTracks;
163 const cues = [{
164 startTime: 0,
165 endTime: 1,
166 id: 1,
167 callCount: 0
168 }];
169 const processCue = function(player, cueData, cueId, startTime) {
170 return;
171 };
172 const cancelAds = function(player, cueData, cueId, startTime) {
173 cueData.callCount += 1;
174 };
175
176 cueTextTracks.processAdTrack(this.player, cues, processCue, cancelAdsSpy);
177 assert.strictEqual(cancelAdsSpy.callCount, 1);
178
179 cueTextTracks.processAdTrack(this.player, cues, processCue, cancelAds);
180 assert.strictEqual(cues[0].callCount, 1);
181});