1 | import QUnit from 'qunit';
|
2 | import sinon from 'sinon';
|
3 | import sharedModuleHooks from './lib/shared-module-hooks.js';
|
4 |
|
5 | QUnit.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 |
|
36 | QUnit.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 |
|
42 | this.player.addRemoteTextTrack(tt);
|
43 |
|
44 | cueTextTracks.processMetadataTracks(this.player, processMetadataTrackSpy);
|
45 | assert.strictEqual(processMetadataTrackSpy.callCount, 1);
|
46 |
|
47 |
|
48 | this.player.textTracks().trigger({
|
49 | track: this.tt,
|
50 | type: 'addtrack'
|
51 | });
|
52 | assert.strictEqual(processMetadataTrackSpy.callCount, 2);
|
53 | });
|
54 |
|
55 | QUnit.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 |
|
71 | QUnit.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 |
|
85 | QUnit.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 |
|
103 | QUnit.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 |
|
136 | this.player.textTracks = originalTextTracks;
|
137 | });
|
138 |
|
139 | QUnit.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 |
|
160 | QUnit.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 | });
|