summaryrefslogtreecommitdiff
path: root/javascript/videojs/test/unit/utils/deprecate.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/videojs/test/unit/utils/deprecate.test.js')
-rw-r--r--javascript/videojs/test/unit/utils/deprecate.test.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/javascript/videojs/test/unit/utils/deprecate.test.js b/javascript/videojs/test/unit/utils/deprecate.test.js
new file mode 100644
index 0000000..b3f4a04
--- /dev/null
+++ b/javascript/videojs/test/unit/utils/deprecate.test.js
@@ -0,0 +1,105 @@
+/* eslint-env qunit */
+import window from 'global/window';
+import sinon from 'sinon';
+import {deprecate, deprecateForMajor} from '../../../src/js/utils/deprecate.js';
+
+QUnit.module('utils/deprecate', {
+ beforeEach() {
+
+ // Back up the original console.
+ this.originalConsole = window.console;
+
+ // Replace the native console for testing. In IE8 `console.log` is not a
+ // 'function' so sinon chokes on it when trying to spy:
+ // https://github.com/cjohansen/Sinon.JS/issues/386
+ //
+ // Instead we'll temporarily replace them with no-op functions
+ window.console = {
+ debug: sinon.spy(),
+ info: sinon.spy(),
+ log: sinon.spy(),
+ warn: sinon.spy(),
+ error: sinon.spy()
+ };
+ },
+ afterEach() {
+
+ // Restore the native/original console.
+ window.console = this.originalConsole;
+ }
+}, function() {
+
+ QUnit.module('deprecate');
+
+ QUnit.test('should pass through arguments to a function and return expected value', function(assert) {
+ assert.expect(1);
+
+ const test = deprecate('test', (...args) => args);
+ const result = test(1, 2, 3);
+
+ assert.deepEqual(result, [1, 2, 3]);
+ });
+
+ QUnit.test('should maintain the correct "this" value', function(assert) {
+ assert.expect(1);
+
+ const that = {};
+ const test = deprecate('test', function() {
+ return this;
+ }.bind(that));
+
+ const result = test();
+
+ assert.strictEqual(result, that, 'the "this" value was returned as the expected object');
+ });
+
+ QUnit.test('should log the specified message only once', function(assert) {
+ assert.expect(2);
+
+ const test = deprecate('test', function() {});
+
+ test();
+ test();
+ test();
+
+ assert.ok(window.console.warn.calledOnce);
+ assert.deepEqual(window.console.warn.firstCall.args, ['VIDEOJS:', 'WARN:', 'test']);
+ });
+
+ QUnit.module('deprecateForMajor');
+
+ QUnit.test('should pass through arguments to a function and return expected value', function(assert) {
+ assert.expect(1);
+
+ const test = deprecateForMajor(1, 'A', 'B', (...args) => args);
+ const result = test(1, 2, 3);
+
+ assert.deepEqual(result, [1, 2, 3]);
+ });
+
+ QUnit.test('should maintain the correct "this" value', function(assert) {
+ assert.expect(1);
+
+ const that = {};
+ const test = deprecateForMajor(1, 'A', 'B', function() {
+ return this;
+ }.bind(that));
+
+ const result = test();
+
+ assert.strictEqual(result, that, 'the "this" value was returned as the expected object');
+ });
+
+ QUnit.test('should log the expected message only once', function(assert) {
+ assert.expect(2);
+
+ const test = deprecateForMajor(1, 'A', 'B', function() {});
+
+ test();
+ test();
+ test();
+
+ assert.ok(window.console.warn.calledOnce);
+ assert.deepEqual(window.console.warn.firstCall.args, ['VIDEOJS:', 'WARN:', 'A is deprecated and will be removed in 1.0; please use B instead.']);
+ });
+});