summaryrefslogtreecommitdiff
path: root/javascript/videojs/test/unit/plugin-basic.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/videojs/test/unit/plugin-basic.test.js')
-rw-r--r--javascript/videojs/test/unit/plugin-basic.test.js96
1 files changed, 96 insertions, 0 deletions
diff --git a/javascript/videojs/test/unit/plugin-basic.test.js b/javascript/videojs/test/unit/plugin-basic.test.js
new file mode 100644
index 0000000..7ae81eb
--- /dev/null
+++ b/javascript/videojs/test/unit/plugin-basic.test.js
@@ -0,0 +1,96 @@
+/* eslint-env qunit */
+import sinon from 'sinon';
+import Plugin from '../../src/js/plugin';
+import TestHelpers from './test-helpers';
+
+QUnit.module('Plugin: basic', {
+
+ beforeEach() {
+ this.basic = sinon.spy();
+ this.player = TestHelpers.makePlayer();
+
+ Plugin.registerPlugin('basic', this.basic);
+ },
+
+ afterEach() {
+ this.player.dispose();
+
+ Object.keys(Plugin.getPlugins()).forEach(key => {
+ if (key !== Plugin.BASE_PLUGIN_NAME) {
+ Plugin.deregisterPlugin(key);
+ }
+ });
+ }
+});
+
+QUnit.test('pre-setup interface', function(assert) {
+ assert.strictEqual(typeof this.player.basic, 'function', 'basic plugins are a function on a player');
+ assert.ok(this.player.hasPlugin('basic'), 'player has the plugin available');
+ assert.notStrictEqual(this.player.basic, this.basic, 'basic plugins are wrapped');
+ assert.strictEqual(this.player.basic.dispose, undefined, 'unlike advanced plugins, basic plugins do not have a dispose method');
+ assert.notOk(this.player.usingPlugin('basic'), 'the player is not using the plugin');
+});
+
+QUnit.test('setup', function(assert) {
+ this.player.basic({foo: 'bar'}, 123);
+ assert.strictEqual(this.basic.callCount, 1, 'the plugin was called once');
+ assert.strictEqual(this.basic.firstCall.thisValue, this.player, 'the plugin `this` value was the player');
+ assert.deepEqual(this.basic.firstCall.args, [{foo: 'bar'}, 123], 'the plugin had the correct arguments');
+ assert.ok(this.player.usingPlugin('basic'), 'the player now recognizes that the plugin was set up');
+ assert.ok(this.player.hasPlugin('basic'), 'player has the plugin available');
+
+ this.player.basic({foo: 'bar'}, 123);
+ assert.strictEqual(this.basic.callCount, 2, 'the plugin was called twice');
+ assert.strictEqual(this.basic.firstCall.thisValue, this.player, 'the plugin `this` value was the player');
+ assert.deepEqual(this.basic.firstCall.args, [{foo: 'bar'}, 123], 'the plugin had the correct arguments');
+ assert.ok(this.player.usingPlugin('basic'), 'the player now recognizes that the plugin was set up');
+ assert.ok(this.player.hasPlugin('basic'), 'player has the plugin available');
+});
+
+QUnit.test('all "pluginsetup" events', function(assert) {
+ const setupSpy = sinon.spy();
+ const events = [
+ 'beforepluginsetup',
+ 'beforepluginsetup:basic',
+ 'pluginsetup',
+ 'pluginsetup:basic'
+ ];
+
+ this.player.on(events, setupSpy);
+
+ const instance = this.player.basic();
+
+ events.forEach((type, i) => {
+ const event = setupSpy.getCall(i).args[0];
+ const hash = setupSpy.getCall(i).args[1];
+
+ assert.strictEqual(event.type, type, `the "${type}" event was triggered`);
+ assert.strictEqual(event.target, this.player.el_, 'the event has the correct target');
+
+ assert.deepEqual(hash, {
+ name: 'basic',
+
+ // The "before" events have a `null` instance and the others have the
+ // return value of the plugin factory.
+ instance: i < 2 ? null : instance,
+ plugin: this.basic
+ }, 'the event hash object is correct');
+ });
+});
+
+QUnit.test('properties are copied', function(assert) {
+ const foo = () => {};
+
+ foo.someProp = () => {};
+ foo.VERSION = '9.9.9';
+
+ Plugin.registerPlugin('foo', foo);
+
+ assert.strictEqual(this.player.foo.VERSION, foo.VERSION, 'properties are copied');
+ assert.strictEqual(this.player.foo.someProp, foo.someProp, 'properties are copied');
+
+ this.player.foo();
+
+ assert.strictEqual(this.player.foo.VERSION, foo.VERSION, 'properties still exist after init');
+ assert.strictEqual(this.player.foo.someProp, foo.someProp, 'properties still exist after init');
+});