140 lines
2.9 KiB
JavaScript
140 lines
2.9 KiB
JavaScript
'use strict';
|
|
|
|
import {renderer} from '../../src/js/core/renderer';
|
|
import {expect} from 'chai';
|
|
|
|
describe('Renderers', () => {
|
|
|
|
let
|
|
renderers,
|
|
mockRenderer = {
|
|
name: 'mock',
|
|
options: {
|
|
prefix: 'mock'
|
|
},
|
|
canPlayType: (type) => {
|
|
let validMedia = ['video/mime-3'];
|
|
return validMedia.indexOf(type) > -1;
|
|
}
|
|
},
|
|
empty = null
|
|
;
|
|
|
|
describe('#order', () => {
|
|
|
|
it('returns the order', () => {
|
|
expect(renderer.order).to.deep.equal([]);
|
|
});
|
|
|
|
it('can be changed', () => {
|
|
renderer.order = ['html5', 'flash_hls', 'flash_video', 'native_hls'];
|
|
expect(renderer.order).to.deep.equal(['html5', 'flash_hls', 'flash_video', 'native_hls']);
|
|
});
|
|
|
|
it('only accepts an array of strings', () => {
|
|
let a = () => {
|
|
renderer.order = 'foo';
|
|
};
|
|
expect(a).to.throw(Error);
|
|
});
|
|
});
|
|
|
|
describe('#renderers', () => {
|
|
|
|
it('returns the renderers', () => {
|
|
expect(renderer.renderers).to.deep.equal({});
|
|
});
|
|
|
|
it('can be changed', () => {
|
|
renderer.renderers = mockRenderer;
|
|
expect(renderer.renderers).to.deep.equal(mockRenderer);
|
|
|
|
expect(() => {
|
|
renderer.renderers = 'dummy';
|
|
}).to.throw(Error);
|
|
});
|
|
|
|
it('only accepts an array of objects', () => {
|
|
|
|
expect(() => {
|
|
renderer.renderers = 'foo';
|
|
}).to.throw(Error);
|
|
|
|
expect(() => {
|
|
renderer.renderers = undefined;
|
|
}).to.throw(TypeError);
|
|
|
|
expect(() => {
|
|
renderer.renderers = mockRenderer;
|
|
}).to.not.throw(Error);
|
|
});
|
|
});
|
|
|
|
describe('#add', () => {
|
|
|
|
it('can add a renderer as an object with at least `name` property', () => {
|
|
|
|
// Proper structure of renderer
|
|
const a = () => {
|
|
renderer.add(mockRenderer);
|
|
};
|
|
expect(a).to.not.throw(Error);
|
|
|
|
});
|
|
|
|
it('cannot add a renderer as an object without at least `name` property', () => {
|
|
|
|
// Incorrect structure
|
|
const b = () => {
|
|
renderer.add({});
|
|
};
|
|
expect(b).to.throw(Error);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe('#select', () => {
|
|
|
|
const mediaFiles = [
|
|
{type: 'video/mime-1', src: '/path/to/media/1'},
|
|
{type: 'video/mime-2', src: '/path/to/media/2'},
|
|
{type: 'video/mime-3', src: '/path/to/media/3'},
|
|
];
|
|
|
|
beforeEach(() => {
|
|
// renderers = new Renderer();
|
|
renderer.add(mockRenderer);
|
|
});
|
|
|
|
it('selects a renderer based on media files', () => {
|
|
|
|
const a = renderer.select(mediaFiles);
|
|
expect(a).to.deep.equal({rendererName: 'mock', src: '/path/to/media/3'});
|
|
});
|
|
|
|
it('selects a renderer based on media files from argument `renderers`', () => {
|
|
|
|
const a = renderer.select(mediaFiles, ['mock', 'dummy']);
|
|
expect(a).to.deep.equal({rendererName: 'mock', src: '/path/to/media/3'});
|
|
|
|
});
|
|
|
|
it('returns null if no renderer was selected', () => {
|
|
|
|
const b = renderer.select([{type: 'video/mime-4', src: '/path/to/media/4'}]);
|
|
expect(b === null).to.be.true;
|
|
|
|
});
|
|
|
|
it('returns null if no renderer was selected from argument `renderers`', () => {
|
|
|
|
const a = renderer.select(mediaFiles, ['dummy']);
|
|
expect(a === null).to.be.true;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|