summaryrefslogtreecommitdiff
path: root/javascript/videojs/test/unit/player-loadmedia.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/videojs/test/unit/player-loadmedia.test.js')
-rw-r--r--javascript/videojs/test/unit/player-loadmedia.test.js201
1 files changed, 201 insertions, 0 deletions
diff --git a/javascript/videojs/test/unit/player-loadmedia.test.js b/javascript/videojs/test/unit/player-loadmedia.test.js
new file mode 100644
index 0000000..ee4045d
--- /dev/null
+++ b/javascript/videojs/test/unit/player-loadmedia.test.js
@@ -0,0 +1,201 @@
+/* eslint-env qunit */
+import TestHelpers from './test-helpers';
+
+QUnit.module('Player: loadMedia/getMedia', {
+
+ beforeEach() {
+ this.player = TestHelpers.makePlayer({});
+ },
+
+ afterEach() {
+ this.player.dispose();
+ }
+});
+
+QUnit.test('loadMedia sets source from a string', function(assert) {
+ this.player.loadMedia({
+ src: 'foo.mp4'
+ });
+
+ assert.strictEqual(this.player.currentSrc(), 'foo.mp4', 'currentSrc was correct');
+});
+
+QUnit.test('loadMedia sets source from an object', function(assert) {
+ this.player.loadMedia({
+ src: {
+ src: 'foo.mp4',
+ type: 'video/mp4'
+ }
+ });
+
+ assert.strictEqual(this.player.currentSrc(), 'foo.mp4', 'currentSrc was correct');
+});
+
+QUnit.test('loadMedia sets source from an array', function(assert) {
+ const sources = [{
+ src: 'foo.mp4',
+ type: 'video/mp4'
+ }, {
+ src: 'foo.webm',
+ type: 'video/webm'
+ }];
+
+ this.player.loadMedia({
+ src: sources
+ });
+
+ assert.strictEqual(this.player.currentSrc(), sources[0].src, 'currentSrc was correct');
+ assert.deepEqual(this.player.currentSource(), sources[0], 'currentSource was correct');
+ assert.deepEqual(this.player.currentSources(), sources, 'currentSources were correct');
+});
+
+QUnit.test('loadMedia sets poster and backfills artwork', function(assert) {
+ this.player.loadMedia({
+ poster: 'foo.jpg'
+ });
+
+ assert.strictEqual(this.player.poster(), 'foo.jpg', 'poster was correct');
+});
+
+QUnit.test('loadMedia sets artwork via poster', function(assert) {
+ this.player.loadMedia({
+ poster: 'foo.jpg'
+ });
+
+ const {artwork} = this.player.getMedia();
+
+ assert.deepEqual(artwork, [{
+ src: 'foo.jpg',
+ type: 'image/jpeg'
+ }], 'the artwork was set to match the poster');
+});
+
+QUnit.test('loadMedia sets artwork and poster independently', function(assert) {
+ this.player.loadMedia({
+ poster: 'foo.jpg',
+ artwork: [{
+ src: 'bar.png',
+ type: 'image/png'
+ }]
+ });
+
+ assert.strictEqual(this.player.poster(), 'foo.jpg', 'poster was correct');
+ assert.deepEqual(this.player.getMedia().artwork, [{
+ src: 'bar.png',
+ type: 'image/png'
+ }], 'the artwork was provided, so does not match poster');
+});
+
+QUnit.test('loadMedia creates text tracks', function(assert) {
+ this.player.loadMedia({
+ textTracks: [{
+ kind: 'captions',
+ src: 'foo.vtt',
+ language: 'en',
+ label: 'English'
+ }]
+ });
+
+ const rtt = this.player.remoteTextTracks()[0];
+
+ assert.ok(Boolean(rtt), 'the track exists');
+ assert.strictEqual(rtt.kind, 'captions', 'the kind is correct');
+ assert.strictEqual(rtt.src, 'foo.vtt', 'the src is correct');
+ assert.strictEqual(rtt.language, 'en', 'the language is correct');
+ assert.strictEqual(rtt.label, 'English', 'the label is correct');
+});
+
+QUnit.test('getMedia returns a clone of the media object', function(assert) {
+ const original = {
+ arbitrary: true,
+ src: 'foo.mp4',
+ poster: 'foo.gif',
+ textTracks: [{
+ kind: 'captions',
+ src: 'foo.vtt',
+ language: 'en',
+ label: 'English'
+ }]
+ };
+
+ this.player.loadMedia(original);
+
+ const result = this.player.getMedia();
+
+ assert.notStrictEqual(result, original, 'a new object is returned');
+ assert.deepEqual(result, {
+ arbitrary: true,
+ artwork: [{
+ src: 'foo.gif',
+ type: 'image/gif'
+ }],
+ src: 'foo.mp4',
+ poster: 'foo.gif',
+ textTracks: [{
+ kind: 'captions',
+ src: 'foo.vtt',
+ language: 'en',
+ label: 'English'
+ }]
+ }, 'the object has the expected structure');
+});
+
+QUnit.test('getMedia returns a new media object when no media has been loaded', function(assert) {
+
+ this.player.poster = () => 'foo.gif';
+ this.player.currentSources = () => [{src: 'foo.mp4', type: 'video/mp4'}];
+ this.player.remoteTextTracks = () => [{
+ kind: 'captions',
+ src: 'foo.vtt',
+ language: 'en',
+ label: 'English'
+ }, {
+ kind: 'subtitles',
+ src: 'bar.vtt',
+ language: 'de',
+ label: 'German'
+ }];
+
+ const result = this.player.getMedia();
+
+ assert.deepEqual(result, {
+ artwork: [{
+ src: 'foo.gif',
+ type: 'image/gif'
+ }],
+ src: [{
+ src: 'foo.mp4',
+ type: 'video/mp4'
+ }],
+ poster: 'foo.gif',
+ textTracks: [{
+ kind: 'captions',
+ src: 'foo.vtt',
+ language: 'en',
+ label: 'English'
+ }, {
+ kind: 'subtitles',
+ src: 'bar.vtt',
+ language: 'de',
+ label: 'German'
+ }]
+ }, 'the object has the expected structure');
+});
+
+// This only tests the relevant aspect of the reset function. The rest of its
+// effects are tested in player.test.js
+QUnit.test('reset discards the media object', function(assert) {
+ this.player.loadMedia({
+ poster: 'foo.jpg',
+ src: 'foo.mp4',
+ textTracks: [{src: 'foo.vtt'}]
+ });
+
+ this.player.reset();
+
+ // TODO: There is a bug with player.reset() where it does not clear internal
+ // cachces completely. Remove this when that's fixed.
+ this.player.cache_.sources = [];
+
+ assert.deepEqual(this.player.getMedia(), {src: [], textTracks: []}, 'any empty media object is returned');
+});