UNPKG

12.8 kBJavaScriptView Raw
1import QUnit from 'qunit';
2import {
3 createPlayer,
4 useFakeEnvironment,
5 openMediaSource,
6 useFakeMediaSource
7} from './test-helpers.js';
8import videojs from 'video.js';
9
10/* eslint-disable no-unused-vars */
11// we need this so that it can register hls with videojs
12import {HlsSourceHandler, HlsHandler, Hls} from '../src/videojs-contrib-hls';
13/* eslint-enable no-unused-vars */
14import Config from '../src/config';
15
16// list of posible options
17// name - the proprety name
18// default - the default value
19// test - alternative value to verify that default is not used
20// alt - another alternative value to very that test/default are not used
21const options = [{
22 name: 'withCredentials',
23 default: false,
24 test: true,
25 alt: false
26}, {
27 name: 'bandwidth',
28 default: 4194304,
29 test: 5,
30 alt: 555
31}];
32
33const CONFIG_KEYS = Object.keys(Config);
34
35QUnit.module('Configuration - Deprication', {
36 beforeEach(assert) {
37 this.env = useFakeEnvironment(assert);
38 this.requests = this.env.requests;
39 this.mse = useFakeMediaSource();
40 this.clock = this.env.clock;
41 this.old = {};
42
43 CONFIG_KEYS.forEach((key) => this.old[key] = Config[key]);
44
45 // force the HLS tech to run
46 this.old.NativeHlsSupport = videojs.Hls.supportsNativeHls;
47 videojs.Hls.supportsNativeHls = false;
48 },
49
50 afterEach() {
51 CONFIG_KEYS.forEach((key) => Config[key] = this.old[key]);
52
53 this.env.restore();
54 this.mse.restore();
55 videojs.Hls.supportsNativeHls = this.old.NativeHlsSupport;
56 }
57});
58
59QUnit.test('GOAL_BUFFER_LENGTH get warning', function(assert) {
60 assert.equal(Hls.GOAL_BUFFER_LENGTH,
61 Config.GOAL_BUFFER_LENGTH,
62 'Hls.GOAL_BUFFER_LENGTH returns the default');
63 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
64});
65
66QUnit.test('GOAL_BUFFER_LENGTH set warning', function(assert) {
67 Hls.GOAL_BUFFER_LENGTH = 10;
68 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
69
70 assert.equal(Config.GOAL_BUFFER_LENGTH, 10, 'returns what we set it to');
71});
72
73QUnit.test('GOAL_BUFFER_LENGTH set warning and invalid', function(assert) {
74 Hls.GOAL_BUFFER_LENGTH = 'nope';
75 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
76
77 assert.equal(Config.GOAL_BUFFER_LENGTH, 30, 'default');
78
79 Hls.GOAL_BUFFER_LENGTH = -1;
80 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
81
82 assert.equal(Config.GOAL_BUFFER_LENGTH, 30, 'default');
83});
84
85QUnit.test('MAX_GOAL_BUFFER_LENGTH get warning', function(assert) {
86 assert.equal(Hls.MAX_GOAL_BUFFER_LENGTH,
87 Config.MAX_GOAL_BUFFER_LENGTH,
88 'Hls.MAX_GOAL_BUFFER_LENGTH returns the default');
89 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
90});
91
92QUnit.test('MAX_GOAL_BUFFER_LENGTH set warning', function(assert) {
93 Hls.MAX_GOAL_BUFFER_LENGTH = 10;
94 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
95
96 assert.equal(Config.MAX_GOAL_BUFFER_LENGTH, 10, 'returns what we set it to');
97});
98
99QUnit.test('MAX_GOAL_BUFFER_LENGTH set warning and invalid', function(assert) {
100 Hls.MAX_GOAL_BUFFER_LENGTH = 'nope';
101 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
102
103 assert.equal(Config.MAX_GOAL_BUFFER_LENGTH, 60, 'default');
104
105 Hls.MAX_GOAL_BUFFER_LENGTH = -1;
106 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
107
108 assert.equal(Config.MAX_GOAL_BUFFER_LENGTH, 60, 'default');
109});
110
111QUnit.test('GOAL_BUFFER_LENGTH_RATE get warning', function(assert) {
112 assert.equal(Hls.GOAL_BUFFER_LENGTH_RATE,
113 Config.GOAL_BUFFER_LENGTH_RATE,
114 'Hls.GOAL_BUFFER_LENGTH_RATE returns the default');
115 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
116});
117
118QUnit.test('GOAL_BUFFER_LENGTH_RATE set warning', function(assert) {
119 Hls.GOAL_BUFFER_LENGTH_RATE = 10;
120 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
121
122 assert.equal(Config.GOAL_BUFFER_LENGTH_RATE, 10, 'returns what we set it to');
123});
124
125QUnit.test('GOAL_BUFFER_LENGTH_RATE set warning and invalid', function(assert) {
126 Hls.GOAL_BUFFER_LENGTH_RATE = 'nope';
127 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
128
129 assert.equal(Config.GOAL_BUFFER_LENGTH_RATE, 1, 'default');
130
131 Hls.GOAL_BUFFER_LENGTH_RATE = -1;
132 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
133
134 assert.equal(Config.GOAL_BUFFER_LENGTH_RATE, 1, 'default');
135});
136
137QUnit.test('BUFFER_LOW_WATER_LINE get warning', function(assert) {
138 assert.equal(Hls.BUFFER_LOW_WATER_LINE,
139 Config.BUFFER_LOW_WATER_LINE,
140 'Hls.BUFFER_LOW_WATER_LINE returns the default');
141 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
142});
143
144QUnit.test('BUFFER_LOW_WATER_LINE set warning', function(assert) {
145 Hls.BUFFER_LOW_WATER_LINE = 20;
146 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
147
148 assert.equal(Config.BUFFER_LOW_WATER_LINE, 20, 'returns what we set it to');
149
150 // Allow setting to 0
151 Hls.BUFFER_LOW_WATER_LINE = 0;
152 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
153
154 assert.equal(Config.BUFFER_LOW_WATER_LINE, 0, 'returns what we set it to');
155});
156
157QUnit.test('BUFFER_LOW_WATER_LINE set warning and invalid', function(assert) {
158 Hls.BUFFER_LOW_WATER_LINE = 'nope';
159 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
160
161 assert.equal(Config.BUFFER_LOW_WATER_LINE, 0, 'default');
162
163 Hls.BUFFER_LOW_WATER_LINE = -1;
164 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
165
166 assert.equal(Config.BUFFER_LOW_WATER_LINE, 0, 'default');
167});
168
169QUnit.test('MAX_BUFFER_LOW_WATER_LINE get warning', function(assert) {
170 assert.equal(Hls.MAX_BUFFER_LOW_WATER_LINE,
171 Config.MAX_BUFFER_LOW_WATER_LINE,
172 'Hls.MAX_BUFFER_LOW_WATER_LINE returns the default');
173 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
174});
175
176QUnit.test('MAX_BUFFER_LOW_WATER_LINE set warning', function(assert) {
177 Hls.MAX_BUFFER_LOW_WATER_LINE = 20;
178 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
179
180 assert.equal(Config.MAX_BUFFER_LOW_WATER_LINE, 20, 'returns what we set it to');
181
182 // Allow setting to 0
183 Hls.MAX_BUFFER_LOW_WATER_LINE = 0;
184 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
185
186 assert.equal(Config.MAX_BUFFER_LOW_WATER_LINE, 0, 'returns what we set it to');
187});
188
189QUnit.test('MAX_BUFFER_LOW_WATER_LINE set warning and invalid', function(assert) {
190 Hls.MAX_BUFFER_LOW_WATER_LINE = 'nope';
191 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
192
193 assert.equal(Config.MAX_BUFFER_LOW_WATER_LINE, 30, 'default');
194
195 Hls.MAX_BUFFER_LOW_WATER_LINE = -1;
196 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
197
198 assert.equal(Config.MAX_BUFFER_LOW_WATER_LINE, 30, 'default');
199});
200
201QUnit.test('BUFFER_LOW_WATER_LINE_RATE get warning', function(assert) {
202 assert.equal(Hls.BUFFER_LOW_WATER_LINE_RATE,
203 Config.BUFFER_LOW_WATER_LINE_RATE,
204 'Hls.BUFFER_LOW_WATER_LINE_RATE returns the default');
205 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
206});
207
208QUnit.test('BUFFER_LOW_WATER_LINE_RATE set warning', function(assert) {
209 Hls.BUFFER_LOW_WATER_LINE_RATE = 10;
210 assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
211
212 assert.equal(Config.BUFFER_LOW_WATER_LINE_RATE, 10, 'returns what we set it to');
213});
214
215QUnit.test('BUFFER_LOW_WATER_LINE_RATE set warning and invalid', function(assert) {
216 Hls.BUFFER_LOW_WATER_LINE_RATE = 'nope';
217 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
218
219 assert.equal(Config.BUFFER_LOW_WATER_LINE_RATE, 1, 'default');
220
221 Hls.BUFFER_LOW_WATER_LINE_RATE = -1;
222 assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
223
224 assert.equal(Config.BUFFER_LOW_WATER_LINE_RATE, 1, 'default');
225});
226
227QUnit.module('Configuration - Options', {
228 beforeEach(assert) {
229 this.env = useFakeEnvironment(assert);
230 this.requests = this.env.requests;
231 this.mse = useFakeMediaSource();
232 this.clock = this.env.clock;
233 this.old = {};
234
235 // force the HLS tech to run
236 this.old.NativeHlsSupport = videojs.Hls.supportsNativeHls;
237 videojs.Hls.supportsNativeHls = false;
238 },
239
240 afterEach() {
241 this.env.restore();
242 this.mse.restore();
243 videojs.Hls.supportsNativeHls = this.old.NativeHlsSupport;
244
245 this.player.dispose();
246 videojs.options.hls = {};
247
248 }
249});
250
251options.forEach((opt) => {
252 QUnit.test(`default ${opt.name}`, function(assert) {
253 this.player = createPlayer();
254 this.player.src({
255 src: 'http://example.com/media.m3u8',
256 type: 'application/vnd.apple.mpegurl'
257 });
258
259 openMediaSource(this.player, this.clock);
260
261 let hls = this.player.tech_.hls;
262
263 assert.equal(hls.options_[opt.name],
264 opt.default,
265 `${opt.name} should be default`);
266 });
267
268 QUnit.test(`global ${opt.name}`, function(assert) {
269 videojs.options.hls[opt.name] = opt.test;
270 this.player = createPlayer();
271 this.player.src({
272 src: 'http://example.com/media.m3u8',
273 type: 'application/vnd.apple.mpegurl'
274 });
275
276 openMediaSource(this.player, this.clock);
277
278 let hls = this.player.tech_.hls;
279
280 assert.equal(hls.options_[opt.name],
281 opt.test,
282 `${opt.name} should be equal to global`);
283 });
284
285 QUnit.test(`sourceHandler ${opt.name}`, function(assert) {
286 let sourceHandlerOptions = {html5: {hls: {}}};
287
288 sourceHandlerOptions.html5.hls[opt.name] = opt.test;
289 this.player = createPlayer(sourceHandlerOptions);
290 this.player.src({
291 src: 'http://example.com/media.m3u8',
292 type: 'application/vnd.apple.mpegurl'
293 });
294
295 openMediaSource(this.player, this.clock);
296
297 let hls = this.player.tech_.hls;
298
299 assert.equal(hls.options_[opt.name],
300 opt.test,
301 `${opt.name} should be equal to sourceHandler Option`);
302 });
303
304 QUnit.test(`src ${opt.name}`, function(assert) {
305 let srcOptions = {
306 src: 'http://example.com/media.m3u8',
307 type: 'application/vnd.apple.mpegurl'
308 };
309
310 srcOptions[opt.name] = opt.test;
311 this.player = createPlayer();
312 this.player.src(srcOptions);
313
314 openMediaSource(this.player, this.clock);
315
316 let hls = this.player.tech_.hls;
317
318 assert.equal(hls.options_[opt.name],
319 opt.test,
320 `${opt.name} should be equal to src option`);
321 });
322
323 QUnit.test(`srcHandler overrides global ${opt.name}`, function(assert) {
324 let sourceHandlerOptions = {html5: {hls: {}}};
325
326 sourceHandlerOptions.html5.hls[opt.name] = opt.test;
327 videojs.options.hls[opt.name] = opt.alt;
328 this.player = createPlayer(sourceHandlerOptions);
329 this.player.src({
330 src: 'http://example.com/media.m3u8',
331 type: 'application/vnd.apple.mpegurl'
332 });
333
334 openMediaSource(this.player, this.clock);
335
336 let hls = this.player.tech_.hls;
337
338 assert.equal(hls.options_[opt.name],
339 opt.test,
340 `${opt.name} should be equal to sourchHandler option`);
341 });
342
343 QUnit.test(`src overrides sourceHandler ${opt.name}`, function(assert) {
344 let sourceHandlerOptions = {html5: {hls: {}}};
345 let srcOptions = {
346 src: 'http://example.com/media.m3u8',
347 type: 'application/vnd.apple.mpegurl'
348 };
349
350 sourceHandlerOptions.html5.hls[opt.name] = opt.alt;
351 srcOptions[opt.name] = opt.test;
352 this.player = createPlayer(sourceHandlerOptions);
353 this.player.src(srcOptions);
354
355 openMediaSource(this.player, this.clock);
356
357 let hls = this.player.tech_.hls;
358
359 assert.equal(hls.options_[opt.name],
360 opt.test,
361 `${opt.name} should be equal to sourchHandler option`);
362 });
363});
364
365QUnit.module('Configuration - Global Only', {
366 beforeEach() {
367 videojs.options.hls = {};
368 },
369
370 afterEach() {
371 videojs.options.hls = {};
372 }
373});
374
375QUnit.test('global mode override - flash', function(assert) {
376 videojs.options.hls.mode = 'flash';
377 let htmlSourceHandler = new HlsSourceHandler('html5');
378 let flashSourceHandler = new HlsSourceHandler('flash');
379
380 assert.equal(
381 htmlSourceHandler.canHandleSource({type: 'application/x-mpegURL'}),
382 false,
383 'Cannot play html as we are overriden not to');
384
385 assert.equal(
386 flashSourceHandler.canHandleSource({type: 'application/x-mpegURL'}),
387 true,
388 'Can play flash as it is supported and overides allow');
389});
390
391QUnit.test('global mode override - html', function(assert) {
392 videojs.options.hls.mode = 'html5';
393 let htmlSourceHandler = new HlsSourceHandler('html5');
394 let flashSourceHandler = new HlsSourceHandler('flash');
395
396 assert.equal(
397 htmlSourceHandler.canHandleSource({type: 'application/x-mpegURL'}),
398 true,
399 'Can play html as we support it and overides allow');
400
401 assert.equal(
402 flashSourceHandler.canHandleSource({type: 'application/x-mpegURL'}),
403 false,
404 'Cannot play flash as we are overiden not to');
405});
406