]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Prepare deprecation checking framework for tests
authorIskren Chernev <iskren.chernev@gmail.com>
Thu, 24 Mar 2016 13:08:03 +0000 (06:08 -0700)
committerIskren Chernev <iskren.chernev@gmail.com>
Thu, 24 Mar 2016 14:21:41 +0000 (07:21 -0700)
src/lib/utils/deprecate.js
src/test/helpers/deprecation-handler.js [new file with mode: 0644]
src/test/qunit.js

index eddcce2466d57614e5586479fbfb63f948579246..8ed45e5a6a8f7a5f0d227c1f8b007043fe420b23 100644 (file)
@@ -13,6 +13,9 @@ export function deprecate(msg, fn) {
     var firstTime = true;
 
     return extend(function () {
+        if (hooks.deprecationHandler != null) {
+            hooks.deprecationHandler(null, msg);
+        }
         if (firstTime) {
             warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack);
             firstTime = false;
@@ -24,6 +27,9 @@ export function deprecate(msg, fn) {
 var deprecations = {};
 
 export function deprecateSimple(name, msg) {
+    if (hooks.deprecationHandler != null) {
+        hooks.deprecationHandler(name, msg);
+    }
     if (!deprecations[name]) {
         warn(msg);
         deprecations[name] = true;
@@ -31,3 +37,4 @@ export function deprecateSimple(name, msg) {
 }
 
 hooks.suppressDeprecationWarnings = false;
+hooks.deprecationHandler = null;
diff --git a/src/test/helpers/deprecation-handler.js b/src/test/helpers/deprecation-handler.js
new file mode 100644 (file)
index 0000000..77e9f64
--- /dev/null
@@ -0,0 +1,52 @@
+import each from './each';
+
+export function setupDeprecationHandler(test, moment, scope) {
+    test._expectedDeprecations = null;
+    test._observedDeprecations = null;
+    test._oldSupress = moment.suppressDeprecationWarnings;
+    moment.suppressDeprecationWarnings = true;
+    test.expectedDeprecations = function () {
+        test._expectedDeprecations = arguments;
+        test._observedDeprecations = [];
+    };
+    moment.deprecationHandler = function (name, msg) {
+        var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+        if (deprecationId === -1) {
+            throw new Error('Unexpected deprecation thrown name=' +
+                    name + ' msg=' + msg);
+        }
+        test._observedDeprecations[deprecationId] = 1;
+    };
+}
+
+export function teardownDeprecationHandler(test, moment, scope) {
+    moment.suppressDeprecationWarnings = test._oldSupress;
+
+    if (test._expectedDeprecations != null) {
+        var missedDeprecations = [];
+        each(test._expectedDeprecations, function (deprecationPattern, id) {
+            if (test._observedDeprecations[id] !== 1) {
+                missedDeprecations.push(deprecationPattern);
+            }
+        });
+        if (missedDeprecations.length !== 0) {
+            throw new Error('Expected deprecation warnings did not happen: ' +
+                    missedDeprecations.join(' '));
+        }
+    }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+    if (deprecations == null) {
+        return -1;
+    }
+    for (var i = 0; i < deprecations.length; ++i) {
+        if (name != null && name === deprecations[i]) {
+            return i;
+        }
+        if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+            return i;
+        }
+    }
+    return -1;
+}
index 52c0d797a73fd5f906ed7a41bd7385ebf6b147e6..42f1d086bf5b91a9be2082c1a226915aff045118 100644 (file)
@@ -2,6 +2,7 @@
 
 import moment from '../moment';
 import { defineCommonLocaleTests } from './helpers/common-locale';
+import { setupDeprecationHandler, teardownDeprecationHandler } from './helpers/deprecation-handler';
 
 export var test = QUnit.test;
 
@@ -14,11 +15,13 @@ export function module (name, lifecycle) {
             moment.createFromInputFallback = function (config) {
                 throw new Error('input not handled by moment: ' + config._i);
             };
+            setupDeprecationHandler(test, moment, 'core');
             if (lifecycle && lifecycle.setup) {
                 lifecycle.setup();
             }
         },
         teardown : function () {
+            teardownDeprecationHandler(test, moment, 'core');
             if (lifecycle && lifecycle.teardown) {
                 lifecycle.teardown();
             }
@@ -33,12 +36,14 @@ export function localeModule (name, lifecycle) {
             moment.createFromInputFallback = function (config) {
                 throw new Error('input not handled by moment: ' + config._i);
             };
+            setupDeprecationHandler(test, moment, 'locale');
             if (lifecycle && lifecycle.setup) {
                 lifecycle.setup();
             }
         },
         teardown : function () {
             moment.locale('en');
+            teardownDeprecationHandler(test, moment, 'locale');
             if (lifecycle && lifecycle.teardown) {
                 lifecycle.teardown();
             }