summaryrefslogtreecommitdiff
path: root/javascript/videojs/test/unit/tracks/text-track-list.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/videojs/test/unit/tracks/text-track-list.test.js')
-rw-r--r--javascript/videojs/test/unit/tracks/text-track-list.test.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/javascript/videojs/test/unit/tracks/text-track-list.test.js b/javascript/videojs/test/unit/tracks/text-track-list.test.js
new file mode 100644
index 0000000..47c5f68
--- /dev/null
+++ b/javascript/videojs/test/unit/tracks/text-track-list.test.js
@@ -0,0 +1,105 @@
+/* eslint-env qunit */
+import TextTrackList from '../../../src/js/tracks/text-track-list.js';
+import TextTrack from '../../../src/js/tracks/text-track.js';
+import EventTarget from '../../../src/js/event-target.js';
+import TechFaker from '../tech/tech-faker';
+import sinon from 'sinon';
+
+QUnit.module('Text Track List', {
+ beforeEach() {
+ this.clock = sinon.useFakeTimers();
+ },
+ afterEach() {
+ this.clock.restore();
+ }
+});
+
+QUnit.test('trigger "change" event when "modechange" is fired on a track', function(assert) {
+ const tt = new EventTarget();
+ const ttl = new TextTrackList([tt]);
+ let changes = 0;
+ const changeHandler = function() {
+ changes++;
+ };
+
+ ttl.on('change', changeHandler);
+ tt.trigger('modechange');
+ this.clock.tick(1);
+
+ ttl.off('change', changeHandler);
+ ttl.onchange = changeHandler;
+
+ tt.trigger('modechange');
+ this.clock.tick(1);
+ assert.equal(changes, 2, 'two change events should have fired');
+
+ ttl.removeTrack(tt);
+});
+
+QUnit.test('trigger "change" event when mode changes on a TextTrack', function(assert) {
+ const tech = new TechFaker();
+ const tt = new TextTrack({tech});
+ const ttl = new TextTrackList([tt]);
+ let changes = 0;
+ const changeHandler = function() {
+ changes++;
+ };
+
+ ttl.on('change', changeHandler);
+ tt.mode = 'showing';
+ this.clock.tick(1);
+
+ ttl.off('change', changeHandler);
+ ttl.onchange = changeHandler;
+
+ tt.mode = 'hidden';
+ tt.mode = 'disabled';
+ this.clock.tick(1);
+
+ assert.equal(changes, 2, 'two change events should have fired');
+ ttl.removeTrack(tt);
+ tech.dispose();
+});
+
+QUnit.test('toJSON', function(assert) {
+ const tech = new TechFaker();
+ const ttl = new TextTrackList([]);
+
+ let textTrackListJSON = ttl.toJSON();
+
+ assert.ok(textTrackListJSON.length === 0, 'an empty array is returned when the list is empty');
+
+ const tt1 = new TextTrack({tech});
+
+ ttl.addTrack(tt1);
+ textTrackListJSON = ttl.toJSON();
+
+ assert.equal(textTrackListJSON[0].id, tt1.id, 'text track in array of JSON should match the original track');
+ assert.notOk(textTrackListJSON[0].tech_, 'tech_ should not exist on the text track value in the JSON list');
+
+ const tt2 = new TextTrack({tech});
+ const tt3 = new TextTrack({tech});
+
+ ttl.addTrack(tt2);
+ ttl.addTrack(tt3);
+ textTrackListJSON = ttl.toJSON();
+
+ assert.equal(textTrackListJSON[1].id, tt2.id, 'text track in second spot of array should match the original track');
+ assert.equal(textTrackListJSON[2].id, tt3.id, 'text track in third spot of array should match the original track');
+});
+
+QUnit.test('serialize', function(assert) {
+ const tech = new TechFaker();
+ const tt1 = new TextTrack({tech});
+ const tt2 = new TextTrack({tech});
+ const tt3 = new TextTrack({tech});
+ const ttl = new TextTrackList([tt1, tt2, tt3]);
+
+ const serializedTrackList = JSON.stringify(ttl);
+
+ assert.notOk(serializedTrackList.includes('"tech_":'), 'tech_ does not exist in the serialized data');
+
+ assert.ok(serializedTrackList.includes(`"id":"${tt1.id}"`), 'serialzed track is found for text track 1');
+ assert.ok(serializedTrackList.includes(`"id":"${tt2.id}"`), 'serialzed track is found for text track 2');
+ assert.ok(serializedTrackList.includes(`"id":"${tt3.id}"`), 'serialzed track is found for text track 3');
+});