summaryrefslogtreecommitdiff
path: root/javascript/videojs/test/unit/tracks/text-track-list-converter.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/videojs/test/unit/tracks/text-track-list-converter.test.js')
-rw-r--r--javascript/videojs/test/unit/tracks/text-track-list-converter.test.js336
1 files changed, 336 insertions, 0 deletions
diff --git a/javascript/videojs/test/unit/tracks/text-track-list-converter.test.js b/javascript/videojs/test/unit/tracks/text-track-list-converter.test.js
new file mode 100644
index 0000000..33501e0
--- /dev/null
+++ b/javascript/videojs/test/unit/tracks/text-track-list-converter.test.js
@@ -0,0 +1,336 @@
+/* eslint-env qunit */
+import c from '../../../src/js/tracks/text-track-list-converter.js';
+import TextTrack from '../../../src/js/tracks/text-track.js';
+import TextTrackList from '../../../src/js/tracks/text-track-list.js';
+import Html5 from '../../../src/js/tech/html5.js';
+import document from 'global/document';
+
+QUnit.module('Text Track List Converter', {});
+
+const clean = (item) => {
+ delete item.id;
+ delete item.inBandMetadataTrackDispatchType;
+ delete item.cues;
+};
+
+const cleanup = (item) => {
+ if (Array.isArray(item)) {
+ item.forEach(clean);
+ } else {
+ clean(item);
+ }
+
+ return item;
+};
+
+if (Html5.supportsNativeTextTracks()) {
+ QUnit.test('trackToJson_ produces correct representation for native track object', function(assert) {
+ const track = document.createElement('track');
+
+ track.src = 'example.com/english.vtt';
+ track.kind = 'captions';
+ track.srclang = 'en';
+ track.label = 'English';
+
+ assert.deepEqual(cleanup(c.trackToJson(track.track)), {
+ kind: 'captions',
+ label: 'English',
+ language: 'en',
+ mode: 'disabled'
+ }, 'the json output is same');
+ });
+
+ QUnit.test('textTracksToJson produces good json output', function(assert) {
+ const emulatedTrack = new TextTrack({
+ kind: 'captions',
+ label: 'English',
+ language: 'en',
+ tech: {
+ crossOrigin() {
+ return null;
+ },
+ on() {},
+ one() {}
+ }
+ });
+
+ const nativeTrack = document.createElement('track');
+
+ nativeTrack.kind = 'captions';
+ nativeTrack.srclang = 'es';
+ nativeTrack.label = 'Spanish';
+
+ const tt = new TextTrackList();
+
+ tt.addTrack(nativeTrack.track);
+ tt.addTrack(emulatedTrack);
+
+ const tech = {
+ $$() {
+ return [nativeTrack];
+ },
+
+ el() {
+ return {
+ querySelectorAll() {
+ return [nativeTrack];
+ }
+ };
+ },
+ on() {},
+ crossOrigin() {
+ return null;
+ },
+ textTracks() {
+ return tt;
+ }
+ };
+
+ assert.deepEqual(cleanup(c.textTracksToJson(tech)), [{
+ kind: 'captions',
+ label: 'Spanish',
+ language: 'es',
+ mode: 'disabled'
+ }, {
+ kind: 'captions',
+ label: 'English',
+ language: 'en',
+ mode: 'disabled'
+ }], 'the output is correct');
+
+ tt.removeTrack(nativeTrack.track);
+ tt.removeTrack(emulatedTrack);
+ });
+
+ QUnit.test('jsonToTextTracks calls addRemoteTextTrack on the tech with mixed tracks', function(assert) {
+ const emulatedTrack = new TextTrack({
+ kind: 'captions',
+ label: 'English',
+ language: 'en',
+ src: 'example.com/english.vtt',
+ tech: {
+ crossOrigin() {
+ return null;
+ },
+ on() {},
+ one() {}
+ }
+ });
+
+ const nativeTrack = document.createElement('track');
+
+ nativeTrack.src = 'example.com/spanish.vtt';
+ nativeTrack.kind = 'captions';
+ nativeTrack.srclang = 'es';
+ nativeTrack.label = 'Spanish';
+
+ const tt = new TextTrackList();
+
+ tt.addTrack(nativeTrack.track);
+ tt.addTrack(emulatedTrack);
+
+ let addRemotes = 0;
+ const tech = {
+ $$() {
+ return [nativeTrack];
+ },
+
+ el() {
+ return {
+ querySelectorAll() {
+ return [nativeTrack];
+ }
+ };
+ },
+ crossOrigin() {
+ return null;
+ },
+ on() {},
+ textTracks() {
+ return tt;
+ },
+ addRemoteTextTrack() {
+ addRemotes++;
+ return {
+ track: {}
+ };
+ }
+ };
+
+ c.jsonToTextTracks(cleanup(c.textTracksToJson(tech)), tech);
+
+ assert.equal(addRemotes, 2, 'we added two text tracks');
+
+ tt.removeTrack(nativeTrack.track);
+ tt.removeTrack(emulatedTrack);
+ });
+}
+
+QUnit.test('trackToJson_ produces correct representation for emulated track object', function(assert) {
+ const track = new TextTrack({
+ kind: 'captions',
+ label: 'English',
+ language: 'en',
+ src: 'example.com/english.vtt',
+ tech: {
+ crossOrigin() {
+ return null;
+ },
+ on() {},
+ one() {}
+ }
+ });
+
+ assert.deepEqual(cleanup(c.trackToJson(track)), {
+ src: 'example.com/english.vtt',
+ kind: 'captions',
+ label: 'English',
+ language: 'en',
+ mode: 'disabled'
+ }, 'the json output is same');
+});
+
+QUnit.test('textTracksToJson produces good json output for emulated only', function(assert) {
+ const emulatedTrack = new TextTrack({
+ kind: 'captions',
+ label: 'English',
+ language: 'en',
+ src: 'example.com/english.vtt',
+ tech: {
+ crossOrigin() {
+ return null;
+ },
+ on() {},
+ one() {}
+ }
+ });
+
+ const anotherTrack = new TextTrack({
+ src: 'example.com/spanish.vtt',
+ kind: 'captions',
+ srclang: 'es',
+ label: 'Spanish',
+ tech: {
+ crossOrigin() {
+ return null;
+ },
+ on() {},
+ one() {}
+ }
+ });
+
+ const tt = new TextTrackList();
+
+ tt.addTrack(anotherTrack);
+ tt.addTrack(emulatedTrack);
+
+ const tech = {
+ $$() {
+ return [];
+ },
+
+ el() {
+ return {
+ querySelectorAll() {
+ return [];
+ }
+ };
+ },
+ crossOrigin() {
+ return null;
+ },
+ on() {},
+ one() {},
+ textTracks() {
+ return tt;
+ }
+ };
+
+ assert.deepEqual(cleanup(c.textTracksToJson(tech)), [{
+ src: 'example.com/spanish.vtt',
+ kind: 'captions',
+ label: 'Spanish',
+ language: 'es',
+ mode: 'disabled'
+ }, {
+ src: 'example.com/english.vtt',
+ kind: 'captions',
+ label: 'English',
+ language: 'en',
+ mode: 'disabled'
+ }], 'the output is correct');
+
+ tt.removeTrack(anotherTrack);
+ tt.removeTrack(emulatedTrack);
+});
+
+QUnit.test('jsonToTextTracks calls addRemoteTextTrack on the tech with emulated tracks only', function(assert) {
+ const emulatedTrack = new TextTrack({
+ kind: 'captions',
+ label: 'English',
+ language: 'en',
+ src: 'example.com/english.vtt',
+ tech: {
+ crossOrigin() {
+ return null;
+ },
+ on() {},
+ one() {}
+ }
+ });
+
+ const anotherTrack = new TextTrack({
+ src: 'example.com/spanish.vtt',
+ kind: 'captions',
+ srclang: 'es',
+ label: 'Spanish',
+ tech: {
+ crossOrigin() {
+ return null;
+ },
+ on() {},
+ one() {}
+ }
+ });
+
+ const tt = new TextTrackList();
+
+ tt.addTrack(anotherTrack);
+ tt.addTrack(emulatedTrack);
+
+ let addRemotes = 0;
+ const tech = {
+ $$() {
+ return [];
+ },
+
+ el() {
+ return {
+ querySelectorAll() {
+ return [];
+ }
+ };
+ },
+ crossOrigin() {
+ return null;
+ },
+ on() {},
+ one() {},
+ textTracks() {
+ return tt;
+ },
+ addRemoteTextTrack() {
+ addRemotes++;
+ return {
+ track: {}
+ };
+ }
+ };
+
+ c.jsonToTextTracks(cleanup(c.textTracksToJson(tech)), tech);
+
+ assert.equal(addRemotes, 2, 'we added two text tracks');
+
+ tt.removeTrack(anotherTrack);
+ tt.removeTrack(emulatedTrack);
+});