1 | import QUnit from 'qunit';
|
2 | import { updateAudioTrack, setupAudioTracks } from '../src/flashlsAudioTracks.js';
|
3 | import { makeMochTech } from './util/util.js';
|
4 |
|
5 | QUnit.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 |
|
21 | this.vjsAudioTracks.addTrack = (track) => this.vjsAudioTracks.push(track);
|
22 | this.tech.audioTracks = () => this.vjsAudioTracks;
|
23 | }
|
24 | });
|
25 |
|
26 | QUnit.test('setupAudioTracks does nothing when no audio tracks from swf',
|
27 | function(assert) {
|
28 | setupAudioTracks(this.tech);
|
29 |
|
30 | assert.equal(this.vjsAudioTracks.length, 0, 'no videojs audio tracks created');
|
31 | });
|
32 |
|
33 | QUnit.test('setupAudioTracks creates videojs audio tracks for each swf audio track',
|
34 | function(assert) {
|
35 |
|
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 |
|
61 |
|
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 |
|
113 |
|
114 |
|
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 |
|
130 | QUnit.test('updateAudioTrack sets audioTrack on swf when videojs audioTrack changes',
|
131 | function(assert) {
|
132 |
|
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 | });
|