Testing AudioTrackList Management in video.js
This test suite validates the functionality of AudioTrackList implementation in video.js, focusing on track enablement states and change event handling. The tests ensure proper management of audio tracks and their enabled/disabled states within the video player.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
videojs/videoJs
test/unit/tracks/audio-track-list.test.js
/* eslint-env qunit */
import AudioTrackList from '../../../src/js/tracks/audio-track-list.js';
import AudioTrack from '../../../src/js/tracks/audio-track.js';
import EventTarget from '../../../src/js/event-target.js';
QUnit.module('Audio Track List');
QUnit.test('trigger "change" when "enabledchange" is fired on a track', function(assert) {
const track = new EventTarget();
track.loaded_ = true;
const audioTrackList = new AudioTrackList([track]);
let changes = 0;
const changeHandler = function() {
changes++;
};
audioTrackList.on('change', changeHandler);
track.trigger('enabledchange');
assert.equal(changes, 1, 'one change events for trigger');
audioTrackList.off('change', changeHandler);
audioTrackList.onchange = changeHandler;
track.trigger('enabledchange');
assert.equal(changes, 2, 'one change events for another trigger');
audioTrackList.removeTrack(track);
audioTrackList.off('change');
});
QUnit.test('only one track is ever enabled', function(assert) {
const track = new AudioTrack({enabled: true});
const track2 = new AudioTrack({enabled: true});
const track3 = new AudioTrack({enabled: true});
const track4 = new AudioTrack();
const list = new AudioTrackList([track, track2]);
assert.equal(track.enabled, false, 'track is disabled');
assert.equal(track2.enabled, true, 'track2 is enabled');
track.enabled = true;
assert.equal(track.enabled, true, 'track is enabled');
assert.equal(track2.enabled, false, 'track2 is disabled');
list.addTrack(track3);
assert.equal(track.enabled, false, 'track is disabled');
assert.equal(track2.enabled, false, 'track2 is disabled');
assert.equal(track3.enabled, true, 'track3 is enabled');
track2.enabled = true;
assert.equal(track.enabled, false, 'track is disabled');
assert.equal(track2.enabled, true, 'track2 is enabled');
assert.equal(track3.enabled, false, 'track3 is disabled');
list.addTrack(track4);
assert.equal(track.enabled, false, 'track is disabled');
assert.equal(track2.enabled, true, 'track2 is enabled');
assert.equal(track3.enabled, false, 'track3 is disabled');
assert.equal(track4.enabled, false, 'track4 is disabled');
list.removeTrack(track);
list.removeTrack(track2);
list.removeTrack(track3);
list.removeTrack(track4);
});
QUnit.test('all tracks can be disabled', function(assert) {
const track = new AudioTrack();
const track2 = new AudioTrack();
// we need audiotracklist here to verify that it does not
// re-enable a track
const list = new AudioTrackList([track, track2]);
assert.equal(track.enabled, false, 'track is disabled');
assert.equal(track2.enabled, false, 'track2 is disabled');
track.enabled = true;
assert.equal(track.enabled, true, 'track is enabled');
assert.equal(track2.enabled, false, 'track2 is disabled');
track.enabled = false;
assert.equal(track.enabled, false, 'track is disabled');
assert.equal(track2.enabled, false, 'track2 is disabled');
list.removeTrack(track);
list.removeTrack(track2);
});
QUnit.test('trigger a change event per enabled change', function(assert) {
const track = new AudioTrack({enabled: true});
const track2 = new AudioTrack({enabled: true});
const track3 = new AudioTrack({enabled: true});
const track4 = new AudioTrack();
const list = new AudioTrackList([track, track2]);
let change = 0;
list.on('change', () => change++);
track.enabled = true;
assert.equal(change, 1, 'one change triggered');
list.addTrack(track3);
assert.equal(change, 2, 'another change triggered by adding an enabled track');
track.enabled = true;
assert.equal(change, 3, 'another change trigger by changing enabled');
track.enabled = false;
assert.equal(change, 4, 'another change trigger by changing enabled');
list.addTrack(track4);
assert.equal(change, 4, 'no change triggered by adding a disabled track');
list.removeTrack(track);
list.removeTrack(track2);
list.removeTrack(track3);
list.removeTrack(track4);
list.off();
});