UNPKG

4.74 kBJavaScriptView Raw
1import QUnit from 'qunit';
2import { updateAudioTrack, setupAudioTracks } from '../src/flashlsAudioTracks.js';
3import { makeMochTech } from './util/util.js';
4
5QUnit.module('Flashls Audiotracks', {
6 beforeEach() {
7 this.swfAudioTracks = [];
8 this.swfAltAudioTracks = [];
9 this.swfAudioTrack = -1;
10 this.vjsAudioTracks = [];
11
12 this.tech = makeMochTech({
13 altAudioTracks: () => this.swfAltAudioTracks,
14 audioTracks: () => this.swfAudioTracks,
15 audioTrack: () => this.swfAudioTrack
16 }, {
17 audioTrack: (val) => this.swfAudioTrack = val
18 });
19
20 // mock videojs audio tracks getter
21 this.vjsAudioTracks.addTrack = (track) => this.vjsAudioTracks.push(track);
22 this.tech.audioTracks = () => this.vjsAudioTracks;
23 }
24});
25
26QUnit.test('setupAudioTracks does nothing when no audio tracks from swf',
27function(assert) {
28 setupAudioTracks(this.tech);
29
30 assert.equal(this.vjsAudioTracks.length, 0, 'no videojs audio tracks created');
31});
32
33QUnit.test('setupAudioTracks creates videojs audio tracks for each swf audio track',
34function(assert) {
35 // org.mangui.hls.model.AudioTrack
36 this.swfAudioTracks = [
37 {
38 id: 1,
39 isDefault: true,
40 isAAC: true,
41 title: 'English',
42 source: 1
43 },
44 {
45 id: 3,
46 isDefault: false,
47 isAAC: true,
48 title: 'Spanish',
49 source: 1
50 },
51 {
52 id: 5,
53 isDefault: false,
54 isAAC: true,
55 title: 'French',
56 source: 1
57 }
58 ];
59
60 // org.mangui.hls.playlist.AltAudioTrack
61 /* eslint-disable camelcase */
62 this.swfAltAudioTracks = [
63 {
64 group_id: 'low',
65 lang: 'en',
66 name: 'English',
67 default_track: true,
68 autoselect: true,
69 url: '0.m3u8'
70 },
71 {
72 group_id: 'high',
73 lang: 'en',
74 name: 'English',
75 default_track: true,
76 autoselect: true,
77 url: '1.m3u8'
78 },
79 {
80 group_id: 'low',
81 lang: 'es',
82 name: 'Spanish',
83 default_track: false,
84 autoselect: true,
85 url: '2.m3u8'
86 },
87 {
88 group_id: 'high',
89 lang: 'es',
90 name: 'Spanish',
91 default_track: false,
92 autoselect: true,
93 url: '3.m3u8'
94 },
95 {
96 group_id: 'low',
97 lang: 'fr',
98 name: 'French',
99 default_track: false,
100 autoselect: true,
101 url: '4.m3u8'
102 },
103 {
104 group_id: 'high',
105 lang: 'fr',
106 name: 'French',
107 default_track: false,
108 autoselect: true,
109 url: '5.m3u8'
110 }
111 ];
112 /* eslint-enable camelcase */
113
114 // set initial selection of swf audio track made by flashls
115 this.swfAudioTrack = 0;
116
117 assert.equal(this.vjsAudioTracks.length, 0, 'Initial size of vjsAudioTracks');
118
119 setupAudioTracks(this.tech);
120
121 assert.equal(this.vjsAudioTracks.length, 3, 'Length after setupAudioTracks()');
122 assert.equal(this.vjsAudioTracks[0].id, 'English', 'corrrect id');
123 assert.equal(this.vjsAudioTracks[0].enabled, true, 'correct audio track enabled');
124 assert.equal(this.vjsAudioTracks[1].id, 'Spanish', 'corrrect id');
125 assert.equal(this.vjsAudioTracks[1].enabled, false, 'Other Audio track are disabled');
126 assert.equal(this.vjsAudioTracks[2].id, 'French', 'corrrect id');
127 assert.equal(this.vjsAudioTracks[2].enabled, false, 'Other Audio track are disabled');
128});
129
130QUnit.test('updateAudioTrack sets audioTrack on swf when videojs audioTrack changes',
131function(assert) {
132 // org.mangui.hls.model.AudioTrack
133 this.swfAudioTracks = [
134 {
135 id: 1,
136 isDefault: true,
137 isAAC: true,
138 title: 'English',
139 source: 1
140 },
141 {
142 id: 3,
143 isDefault: false,
144 isAAC: true,
145 title: 'Spanish',
146 source: 1
147 },
148 {
149 id: 5,
150 isDefault: false,
151 isAAC: true,
152 title: 'French',
153 source: 1
154 }
155 ];
156
157 this.vjsAudioTracks.push({
158 id: 'English',
159 label: 'English',
160 enabled: false,
161 language: 'en',
162 default: true
163 }, {
164 id: 'Spanish',
165 label: 'Spanish',
166 enabled: false,
167 language: 'es',
168 default: false
169 }, {
170 id: 'French',
171 label: 'French',
172 enabled: false,
173 language: 'fr',
174 default: false
175 });
176
177 this.swfAudioTrack = -1;
178 updateAudioTrack(this.tech);
179 assert.equal(this.swfAudioTrack, -1,
180 'When all tracks are disabled, it does not set any track');
181
182 this.vjsAudioTracks[1].enabled = true;
183 this.vjsAudioTracks[2].enabled = true;
184
185 this.swfAudioTrack = -1;
186 updateAudioTrack(this.tech);
187 assert.equal(this.swfAudioTrack, 1,
188 'When more than 1 track enabled, set the swf audio track to the first enabled track');
189
190 this.vjsAudioTracks[1].enabled = false;
191 this.swfAudioTrack = -1;
192 updateAudioTrack(this.tech);
193 assert.equal(this.swfAudioTrack, 2,
194 'Correct enabled audio track id after switching tracks');
195});