Bug 1357502 - Change eslint-plugin-mozilla tests to use the mocha test harness to improve the output. r?Mossop draft
authorMark Banner <standard8@mozilla.com>
Tue, 18 Apr 2017 20:06:02 +0100
changeset 564560 8a2e49922e88543eddeead7675e62464d0f58200
parent 564098 bb38d935d699e0529f9e0bb35578d381026415c4
child 624776 2fa767b1a98ed61e6b4104c7a8c3cef651732020
push id54639
push userbmo:standard8@mozilla.com
push dateTue, 18 Apr 2017 19:06:54 +0000
reviewersMossop
bugs1357502
milestone55.0a1
Bug 1357502 - Change eslint-plugin-mozilla tests to use the mocha test harness to improve the output. r?Mossop MozReview-Commit-ID: 1xI0tBpbSgM
tools/lint/eslint/eslint-plugin-mozilla/package.json
tools/lint/eslint/eslint-plugin-mozilla/tests/avoid-nsISupportsString-preferences.js
tools/lint/eslint/eslint-plugin-mozilla/tests/avoid-removeChild.js
tools/lint/eslint/eslint-plugin-mozilla/tests/balanced-listeners.js
tools/lint/eslint/eslint-plugin-mozilla/tests/no-useless-parameters.js
tools/lint/eslint/eslint-plugin-mozilla/tests/no-useless-removeEventListener.js
tools/lint/eslint/eslint-plugin-mozilla/tests/test-no-import-into-var-and-global.js
tools/lint/eslint/eslint-plugin-mozilla/tests/test-no-single-arg-cu-import.js
tools/lint/eslint/eslint-plugin-mozilla/tests/test-run-all.js
tools/lint/eslint/eslint-plugin-mozilla/tests/use-default-preference-values.js
tools/lint/eslint/eslint-plugin-mozilla/tests/use-ownerGlobal.js
--- a/tools/lint/eslint/eslint-plugin-mozilla/package.json
+++ b/tools/lint/eslint/eslint-plugin-mozilla/package.json
@@ -22,18 +22,21 @@
   "dependencies": {
     "escope": "^3.6.0",
     "espree": "^3.4.0",
     "estraverse": "^4.2.0",
     "globals": "^9.14.0",
     "ini-parser": "^0.0.2",
     "sax": "^1.2.2"
   },
+  "devDependencies": {
+    "mocha": "3.2.0"
+  },
   "engines": {
     "node": ">=6.9.1"
   },
   "scripts": {
     "prepublishOnly": "node scripts/createExports.js",
-    "test": "node tests/test-run-all.js",
+    "test": "mocha -R dot tests",
     "postpublish": "rm -f lib/modules.json lib/environments/saved-globals.json"
   },
   "license": "MPL-2.0"
 }
--- a/tools/lint/eslint/eslint-plugin-mozilla/tests/avoid-nsISupportsString-preferences.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/tests/avoid-nsISupportsString-preferences.js
@@ -3,38 +3,39 @@
 
 "use strict";
 
 // ------------------------------------------------------------------------------
 // Requirements
 // ------------------------------------------------------------------------------
 
 var rule = require("../lib/rules/avoid-nsISupportsString-preferences");
+var RuleTester = require("eslint/lib/testers/rule-tester");
+
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
 
 // ------------------------------------------------------------------------------
 // Tests
 // ------------------------------------------------------------------------------
 
 function invalidCode(code, accessType = "get") {
   let message = "use " + accessType + "StringPref instead of " +
                 accessType + "ComplexValue with nsISupportsString";
   return {code, errors: [{message, type: "CallExpression"}]};
 }
 
-exports.runTest = function(ruleTester) {
-  ruleTester.run("no-useless-removeEventListener", rule, {
-    valid: [
-      "branch.getStringPref('name');",
-      "branch.getComplexValue('name', Ci.nsIPrefLocalizedString);",
-      "branch.setStringPref('name', 'blah');",
-      "branch.setComplexValue('name', Ci.nsIPrefLocalizedString, pref);"
-    ],
-    invalid: [
-      invalidCode("branch.getComplexValue('name', Ci.nsISupportsString);"),
-      invalidCode("branch.getComplexValue('name', nsISupportsString);"),
-      invalidCode("branch.getComplexValue('name', Ci.nsISupportsString).data;"),
-      invalidCode("branch.setComplexValue('name', Ci.nsISupportsString, str);",
-                  "set"),
-      invalidCode("branch.setComplexValue('name', nsISupportsString, str);",
-                  "set")
-    ]
-  });
-};
+ruleTester.run("avoid-nsISupportsString-preferences", rule, {
+  valid: [
+    "branch.getStringPref('name');",
+    "branch.getComplexValue('name', Ci.nsIPrefLocalizedString);",
+    "branch.setStringPref('name', 'blah');",
+    "branch.setComplexValue('name', Ci.nsIPrefLocalizedString, pref);"
+  ],
+  invalid: [
+    invalidCode("branch.getComplexValue('name', Ci.nsISupportsString);"),
+    invalidCode("branch.getComplexValue('name', nsISupportsString);"),
+    invalidCode("branch.getComplexValue('name', Ci.nsISupportsString).data;"),
+    invalidCode("branch.setComplexValue('name', Ci.nsISupportsString, str);",
+                "set"),
+    invalidCode("branch.setComplexValue('name', nsISupportsString, str);",
+                "set")
+  ]
+});
--- a/tools/lint/eslint/eslint-plugin-mozilla/tests/avoid-removeChild.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/tests/avoid-removeChild.js
@@ -3,40 +3,41 @@
 
 "use strict";
 
 // ------------------------------------------------------------------------------
 // Requirements
 // ------------------------------------------------------------------------------
 
 var rule = require("../lib/rules/avoid-removeChild");
+var RuleTester = require("eslint/lib/testers/rule-tester");
+
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
 
 // ------------------------------------------------------------------------------
 // Tests
 // ------------------------------------------------------------------------------
 
 function invalidCode(code, message) {
   if (!message) {
     message = "use element.remove() instead of " +
               "element.parentNode.removeChild(element)";
   }
   return {code, errors: [{message, type: "CallExpression"}]};
 }
 
-exports.runTest = function(ruleTester) {
-  ruleTester.run("no-useless-removeEventListener", rule, {
-    valid: [
-      "elt.remove();",
-      "elt.parentNode.parentNode.removeChild(elt2.parentNode);",
-      "elt.parentNode.removeChild(elt2);",
-      "elt.removeChild(elt2);"
-    ],
-    invalid: [
-      invalidCode("elt.parentNode.removeChild(elt);"),
-      invalidCode("elt.parentNode.parentNode.removeChild(elt.parentNode);"),
-      invalidCode("$(e).parentNode.removeChild($(e));"),
-      invalidCode("$('e').parentNode.removeChild($('e'));"),
-      invalidCode("elt.removeChild(elt.firstChild);",
-                  "use element.firstChild.remove() instead of " +
-                  "element.removeChild(element.firstChild)")
-    ]
-  });
-};
+ruleTester.run("avoid-removeChild", rule, {
+  valid: [
+    "elt.remove();",
+    "elt.parentNode.parentNode.removeChild(elt2.parentNode);",
+    "elt.parentNode.removeChild(elt2);",
+    "elt.removeChild(elt2);"
+  ],
+  invalid: [
+    invalidCode("elt.parentNode.removeChild(elt);"),
+    invalidCode("elt.parentNode.parentNode.removeChild(elt.parentNode);"),
+    invalidCode("$(e).parentNode.removeChild($(e));"),
+    invalidCode("$('e').parentNode.removeChild($('e'));"),
+    invalidCode("elt.removeChild(elt.firstChild);",
+                "use element.firstChild.remove() instead of " +
+                "element.removeChild(element.firstChild)")
+  ]
+});
--- a/tools/lint/eslint/eslint-plugin-mozilla/tests/balanced-listeners.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/tests/balanced-listeners.js
@@ -3,76 +3,77 @@
 
 "use strict";
 
 // ------------------------------------------------------------------------------
 // Requirements
 // ------------------------------------------------------------------------------
 
 var rule = require("../lib/rules/balanced-listeners");
+var RuleTester = require("eslint/lib/testers/rule-tester");
+
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
 
 // ------------------------------------------------------------------------------
 // Tests
 // ------------------------------------------------------------------------------
 
 function error(code, message) {
   return {
     code,
     errors: [{message, type: "Identifier"}]
   };
 }
 
-exports.runTest = function(ruleTester) {
-  ruleTester.run("balanced-listeners", rule, {
-    valid: [
-      "elt.addEventListener('event', handler);" +
-      "elt.removeEventListener('event', handler);",
+ruleTester.run("balanced-listeners", rule, {
+  valid: [
+    "elt.addEventListener('event', handler);" +
+    "elt.removeEventListener('event', handler);",
 
-      "elt.addEventListener('event', handler, true);" +
-      "elt.removeEventListener('event', handler, true);",
+    "elt.addEventListener('event', handler, true);" +
+    "elt.removeEventListener('event', handler, true);",
 
-      "elt.addEventListener('event', handler, false);" +
-      "elt.removeEventListener('event', handler, false);",
+    "elt.addEventListener('event', handler, false);" +
+    "elt.removeEventListener('event', handler, false);",
 
-      "elt.addEventListener('event', handler);" +
-      "elt.removeEventListener('event', handler, false);",
+    "elt.addEventListener('event', handler);" +
+    "elt.removeEventListener('event', handler, false);",
 
-      "elt.addEventListener('event', handler, false);" +
-      "elt.removeEventListener('event', handler);",
+    "elt.addEventListener('event', handler, false);" +
+    "elt.removeEventListener('event', handler);",
 
-      "elt.addEventListener('event', handler, {capture: false});" +
-      "elt.removeEventListener('event', handler);",
+    "elt.addEventListener('event', handler, {capture: false});" +
+    "elt.removeEventListener('event', handler);",
 
-      "elt.addEventListener('event', handler);" +
-      "elt.removeEventListener('event', handler, {capture: false});",
+    "elt.addEventListener('event', handler);" +
+    "elt.removeEventListener('event', handler, {capture: false});",
 
-      "elt.addEventListener('event', handler, {capture: true});" +
-      "elt.removeEventListener('event', handler, true);",
+    "elt.addEventListener('event', handler, {capture: true});" +
+    "elt.removeEventListener('event', handler, true);",
 
-      "elt.addEventListener('event', handler, true);" +
-      "elt.removeEventListener('event', handler, {capture: true});",
+    "elt.addEventListener('event', handler, true);" +
+    "elt.removeEventListener('event', handler, {capture: true});",
 
-      "elt.addEventListener('event', handler, {once: true});",
+    "elt.addEventListener('event', handler, {once: true});",
 
-      "elt.addEventListener('event', handler, {once: true, capture: true});"
-    ],
-    invalid: [
-      error("elt.addEventListener('click', handler, false);",
-            "No corresponding 'removeEventListener(click)' was found."),
-
-      error("elt.addEventListener('click', handler, false);" +
-            "elt.removeEventListener('click', handler, true);",
-            "No corresponding 'removeEventListener(click)' was found."),
+    "elt.addEventListener('event', handler, {once: true, capture: true});"
+  ],
+  invalid: [
+    error("elt.addEventListener('click', handler, false);",
+          "No corresponding 'removeEventListener(click)' was found."),
 
-      error("elt.addEventListener('click', handler, {capture: false});" +
-            "elt.removeEventListener('click', handler, true);",
-            "No corresponding 'removeEventListener(click)' was found."),
+    error("elt.addEventListener('click', handler, false);" +
+          "elt.removeEventListener('click', handler, true);",
+          "No corresponding 'removeEventListener(click)' was found."),
+
+    error("elt.addEventListener('click', handler, {capture: false});" +
+          "elt.removeEventListener('click', handler, true);",
+          "No corresponding 'removeEventListener(click)' was found."),
 
-      error("elt.addEventListener('click', handler, {capture: true});" +
-            "elt.removeEventListener('click', handler);",
-            "No corresponding 'removeEventListener(click)' was found."),
+    error("elt.addEventListener('click', handler, {capture: true});" +
+          "elt.removeEventListener('click', handler);",
+          "No corresponding 'removeEventListener(click)' was found."),
 
-      error("elt.addEventListener('click', handler, true);" +
-            "elt.removeEventListener('click', handler);",
-            "No corresponding 'removeEventListener(click)' was found.")
-    ]
-  });
-};
+    error("elt.addEventListener('click', handler, true);" +
+          "elt.removeEventListener('click', handler);",
+          "No corresponding 'removeEventListener(click)' was found.")
+  ]
+});
--- a/tools/lint/eslint/eslint-plugin-mozilla/tests/no-useless-parameters.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/tests/no-useless-parameters.js
@@ -3,122 +3,123 @@
 
 "use strict";
 
 // ------------------------------------------------------------------------------
 // Requirements
 // ------------------------------------------------------------------------------
 
 var rule = require("../lib/rules/no-useless-parameters");
+var RuleTester = require("eslint/lib/testers/rule-tester");
+
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
 
 // ------------------------------------------------------------------------------
 // Tests
 // ------------------------------------------------------------------------------
 
 function callError(message) {
   return [{message, type: "CallExpression"}];
 }
 
-exports.runTest = function(ruleTester) {
-  ruleTester.run("no-useless-parameters", rule, {
-    valid: [
-      "Services.prefs.clearUserPref('browser.search.custom');",
-      "Services.removeObserver('notification name', {});",
-      "Services.io.newURI('http://example.com');",
-      "Services.io.newURI('http://example.com', 'utf8');",
-      "elt.addEventListener('click', handler);",
-      "elt.addEventListener('click', handler, true);",
-      "elt.addEventListener('click', handler, {once: true});",
-      "elt.removeEventListener('click', handler);",
-      "elt.removeEventListener('click', handler, true);",
-      "Services.obs.addObserver(this, 'topic', true);",
-      "Services.obs.addObserver(this, 'topic');",
-      "Services.prefs.addObserver('branch', this, true);",
-      "Services.prefs.addObserver('branch', this);",
-      "array.appendElement(elt);",
-      "Services.obs.notifyObservers(obj, 'topic', 'data');",
-      "Services.obs.notifyObservers(obj, 'topic');",
-      "window.getComputedStyle(elt);",
-      "window.getComputedStyle(elt, ':before');"
-    ],
-    invalid: [
-      {
-        code: "Services.prefs.clearUserPref('browser.search.custom', false);",
-        errors: callError("clearUserPref takes only 1 parameter.")
-      },
-      {
-        code: "Services.removeObserver('notification name', {}, false);",
-        errors: callError("removeObserver only takes 2 parameters.")
-      },
-      {
-        code: "Services.removeObserver('notification name', {}, true);",
-        errors: callError("removeObserver only takes 2 parameters.")
-      },
-      {
-        code: "Services.io.newURI('http://example.com', null, null);",
-        errors: callError("newURI's last parameters are optional.")
-      },
-      {
-        code: "Services.io.newURI('http://example.com', 'utf8', null);",
-        errors: callError("newURI's last parameters are optional.")
-      },
-      {
-        code: "Services.io.newURI('http://example.com', null);",
-        errors: callError("newURI's last parameters are optional.")
-      },
-      {
-        code: "Services.io.newURI('http://example.com', '', '');",
-        errors: callError("newURI's last parameters are optional.")
-      },
-      {
-        code: "Services.io.newURI('http://example.com', '');",
-        errors: callError("newURI's last parameters are optional.")
-      },
-      {
-        code: "elt.addEventListener('click', handler, false);",
-        errors: callError(
-          "addEventListener's third parameter can be omitted when it's false.")
-      },
-      {
-        code: "elt.removeEventListener('click', handler, false);",
-        errors: callError(
-          "removeEventListener's third parameter can be omitted when it's" +
-          " false.")
-      },
-      {
-        code: "Services.obs.addObserver(this, 'topic', false);",
-        errors: callError(
-          "addObserver's third parameter can be omitted when it's" +
-          " false.")
-      },
-      {
-        code: "Services.prefs.addObserver('branch', this, false);",
-        errors: callError(
-          "addObserver's third parameter can be omitted when it's" +
-          " false.")
-      },
-      {
-        code: "array.appendElement(elt, false);",
-        errors: callError(
-          "appendElement's second parameter can be omitted when it's" +
-          " false.")
-      },
-      {
-        code: "Services.obs.notifyObservers(obj, 'topic', null);",
-        errors: callError(
-          "notifyObservers's third parameter can be omitted.")
-      },
-      {
-        code: "Services.obs.notifyObservers(obj, 'topic', '');",
-        errors: callError(
-          "notifyObservers's third parameter can be omitted.")
-      },
-      {
-        code: "window.getComputedStyle(elt, null);",
-        errors: callError("getComputedStyle's second parameter can be omitted.")
-      },
-      {
-        code: "window.getComputedStyle(elt, '');",
-        errors: callError("getComputedStyle's second parameter can be omitted.")
-      }
-    ]
-  });
-};
+ruleTester.run("no-useless-parameters", rule, {
+  valid: [
+    "Services.prefs.clearUserPref('browser.search.custom');",
+    "Services.removeObserver('notification name', {});",
+    "Services.io.newURI('http://example.com');",
+    "Services.io.newURI('http://example.com', 'utf8');",
+    "elt.addEventListener('click', handler);",
+    "elt.addEventListener('click', handler, true);",
+    "elt.addEventListener('click', handler, {once: true});",
+    "elt.removeEventListener('click', handler);",
+    "elt.removeEventListener('click', handler, true);",
+    "Services.obs.addObserver(this, 'topic', true);",
+    "Services.obs.addObserver(this, 'topic');",
+    "Services.prefs.addObserver('branch', this, true);",
+    "Services.prefs.addObserver('branch', this);",
+    "array.appendElement(elt);",
+    "Services.obs.notifyObservers(obj, 'topic', 'data');",
+    "Services.obs.notifyObservers(obj, 'topic');",
+    "window.getComputedStyle(elt);",
+    "window.getComputedStyle(elt, ':before');"
+  ],
+  invalid: [
+    {
+      code: "Services.prefs.clearUserPref('browser.search.custom', false);",
+      errors: callError("clearUserPref takes only 1 parameter.")
+    },
+    {
+      code: "Services.removeObserver('notification name', {}, false);",
+      errors: callError("removeObserver only takes 2 parameters.")
+    },
+    {
+      code: "Services.removeObserver('notification name', {}, true);",
+      errors: callError("removeObserver only takes 2 parameters.")
+    },
+    {
+      code: "Services.io.newURI('http://example.com', null, null);",
+      errors: callError("newURI's last parameters are optional.")
+    },
+    {
+      code: "Services.io.newURI('http://example.com', 'utf8', null);",
+      errors: callError("newURI's last parameters are optional.")
+    },
+    {
+      code: "Services.io.newURI('http://example.com', null);",
+      errors: callError("newURI's last parameters are optional.")
+    },
+    {
+      code: "Services.io.newURI('http://example.com', '', '');",
+      errors: callError("newURI's last parameters are optional.")
+    },
+    {
+      code: "Services.io.newURI('http://example.com', '');",
+      errors: callError("newURI's last parameters are optional.")
+    },
+    {
+      code: "elt.addEventListener('click', handler, false);",
+      errors: callError(
+        "addEventListener's third parameter can be omitted when it's false.")
+    },
+    {
+      code: "elt.removeEventListener('click', handler, false);",
+      errors: callError(
+        "removeEventListener's third parameter can be omitted when it's" +
+        " false.")
+    },
+    {
+      code: "Services.obs.addObserver(this, 'topic', false);",
+      errors: callError(
+        "addObserver's third parameter can be omitted when it's" +
+        " false.")
+    },
+    {
+      code: "Services.prefs.addObserver('branch', this, false);",
+      errors: callError(
+        "addObserver's third parameter can be omitted when it's" +
+        " false.")
+    },
+    {
+      code: "array.appendElement(elt, false);",
+      errors: callError(
+        "appendElement's second parameter can be omitted when it's" +
+        " false.")
+    },
+    {
+      code: "Services.obs.notifyObservers(obj, 'topic', null);",
+      errors: callError(
+        "notifyObservers's third parameter can be omitted.")
+    },
+    {
+      code: "Services.obs.notifyObservers(obj, 'topic', '');",
+      errors: callError(
+        "notifyObservers's third parameter can be omitted.")
+    },
+    {
+      code: "window.getComputedStyle(elt, null);",
+      errors: callError("getComputedStyle's second parameter can be omitted.")
+    },
+    {
+      code: "window.getComputedStyle(elt, '');",
+      errors: callError("getComputedStyle's second parameter can be omitted.")
+    }
+  ]
+});
--- a/tools/lint/eslint/eslint-plugin-mozilla/tests/no-useless-removeEventListener.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/tests/no-useless-removeEventListener.js
@@ -3,80 +3,81 @@
 
 "use strict";
 
 // ------------------------------------------------------------------------------
 // Requirements
 // ------------------------------------------------------------------------------
 
 var rule = require("../lib/rules/no-useless-removeEventListener");
+var RuleTester = require("eslint/lib/testers/rule-tester");
+
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
 
 // ------------------------------------------------------------------------------
 // Tests
 // ------------------------------------------------------------------------------
 
 function invalidCode(code) {
   let message = "use {once: true} instead of removeEventListener " +
                 "as the first instruction of the listener";
   return {code, errors: [{message, type: "CallExpression"}]};
 }
 
-exports.runTest = function(ruleTester) {
-  ruleTester.run("no-useless-removeEventListener", rule, {
-    valid: [
-      // Listeners that aren't a function are always valid.
-      "elt.addEventListener('click', handler);",
-      "elt.addEventListener('click', handler, true);",
-      "elt.addEventListener('click', handler, {once: true});",
+ruleTester.run("no-useless-removeEventListener", rule, {
+  valid: [
+    // Listeners that aren't a function are always valid.
+    "elt.addEventListener('click', handler);",
+    "elt.addEventListener('click', handler, true);",
+    "elt.addEventListener('click', handler, {once: true});",
 
-      // Should not fail on empty functions.
-      "elt.addEventListener('click', function() {});",
+    // Should not fail on empty functions.
+    "elt.addEventListener('click', function() {});",
 
-      // Should not reject when removing a listener for another event.
-      "elt.addEventListener('click', function listener() {" +
-      "  elt.removeEventListener('keypress', listener);" +
-      "});",
+    // Should not reject when removing a listener for another event.
+    "elt.addEventListener('click', function listener() {" +
+    "  elt.removeEventListener('keypress', listener);" +
+    "});",
 
-      // Should not reject when there's another instruction before
-      // removeEventListener.
-      "elt.addEventListener('click', function listener() {" +
-      "  elt.focus();" +
-      "  elt.removeEventListener('click', listener);" +
-      "});",
+    // Should not reject when there's another instruction before
+    // removeEventListener.
+    "elt.addEventListener('click', function listener() {" +
+    "  elt.focus();" +
+    "  elt.removeEventListener('click', listener);" +
+    "});",
 
-      // Should not reject when wantsUntrusted is true.
-      "elt.addEventListener('click', function listener() {" +
-      "  elt.removeEventListener('click', listener);" +
-      "}, false, true);",
+    // Should not reject when wantsUntrusted is true.
+    "elt.addEventListener('click', function listener() {" +
+    "  elt.removeEventListener('click', listener);" +
+    "}, false, true);",
 
-      // Should not reject when there's a literal and a variable
-      "elt.addEventListener('click', function listener() {" +
-      "  elt.removeEventListener(eventName, listener);" +
-      "});",
+    // Should not reject when there's a literal and a variable
+    "elt.addEventListener('click', function listener() {" +
+    "  elt.removeEventListener(eventName, listener);" +
+    "});",
 
-      // Should not reject when there's 2 different variables
-      "elt.addEventListener(event1, function listener() {" +
-      "  elt.removeEventListener(event2, listener);" +
-      "});"
-    ],
-    invalid: [
-      invalidCode("elt.addEventListener('click', function listener() {" +
-                  "  elt.removeEventListener('click', listener);" +
-                  "});"),
-      invalidCode("elt.addEventListener('click', function listener() {" +
-                  "  elt.removeEventListener('click', listener, true);" +
-                  "}, true);"),
-      invalidCode("elt.addEventListener('click', function listener() {" +
-                  "  elt.removeEventListener('click', listener);" +
-                  "}, {once: true});"),
-      invalidCode("elt.addEventListener('click', function listener() {" +
-                  "  /* Comment */" +
-                  "  elt.removeEventListener('click', listener);" +
-                  "});"),
-      invalidCode("elt.addEventListener('click', function() {" +
-                  "  elt.removeEventListener('click', arguments.callee);" +
-                  "});"),
-      invalidCode("elt.addEventListener(eventName, function listener() {" +
-                  "  elt.removeEventListener(eventName, listener);" +
-                  "});")
-    ]
-  });
-};
+    // Should not reject when there's 2 different variables
+    "elt.addEventListener(event1, function listener() {" +
+    "  elt.removeEventListener(event2, listener);" +
+    "});"
+  ],
+  invalid: [
+    invalidCode("elt.addEventListener('click', function listener() {" +
+                "  elt.removeEventListener('click', listener);" +
+                "});"),
+    invalidCode("elt.addEventListener('click', function listener() {" +
+                "  elt.removeEventListener('click', listener, true);" +
+                "}, true);"),
+    invalidCode("elt.addEventListener('click', function listener() {" +
+                "  elt.removeEventListener('click', listener);" +
+                "}, {once: true});"),
+    invalidCode("elt.addEventListener('click', function listener() {" +
+                "  /* Comment */" +
+                "  elt.removeEventListener('click', listener);" +
+                "});"),
+    invalidCode("elt.addEventListener('click', function() {" +
+                "  elt.removeEventListener('click', arguments.callee);" +
+                "});"),
+    invalidCode("elt.addEventListener(eventName, function listener() {" +
+                "  elt.removeEventListener(eventName, listener);" +
+                "});")
+  ]
+});
--- a/tools/lint/eslint/eslint-plugin-mozilla/tests/test-no-import-into-var-and-global.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/tests/test-no-import-into-var-and-global.js
@@ -3,33 +3,34 @@
 
 "use strict";
 
 // ------------------------------------------------------------------------------
 // Requirements
 // ------------------------------------------------------------------------------
 
 var rule = require("../lib/rules/no-import-into-var-and-global");
+var RuleTester = require("eslint/lib/testers/rule-tester");
+
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
 
 // ------------------------------------------------------------------------------
 // Tests
 // ------------------------------------------------------------------------------
 
 const ExpectedError = {
   message: "Cu.import imports into variables and into global scope.",
   type: "CallExpression"
 };
 
-exports.runTest = function(ruleTester) {
-  ruleTester.run("no-import-into-var-and-global", rule, {
-    valid: [
-      "var foo = Cu.import('fake', {});",
-      "var foo = Components.utils.import('fake', {});"
-    ],
-    invalid: [{
-      code: "var foo = Cu.import('fake', this);",
-      errors: [ExpectedError]
-    }, {
-      code: "var foo = Cu.import('fake');",
-      errors: [ExpectedError]
-    }]
-  });
-};
+ruleTester.run("no-import-into-var-and-global", rule, {
+  valid: [
+    "var foo = Cu.import('fake', {});",
+    "var foo = Components.utils.import('fake', {});"
+  ],
+  invalid: [{
+    code: "var foo = Cu.import('fake', this);",
+    errors: [ExpectedError]
+  }, {
+    code: "var foo = Cu.import('fake');",
+    errors: [ExpectedError]
+  }]
+});
--- a/tools/lint/eslint/eslint-plugin-mozilla/tests/test-no-single-arg-cu-import.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/tests/test-no-single-arg-cu-import.js
@@ -3,29 +3,30 @@
 
 "use strict";
 
 // ------------------------------------------------------------------------------
 // Requirements
 // ------------------------------------------------------------------------------
 
 var rule = require("../lib/rules/no-single-arg-cu-import");
+var RuleTester = require("eslint/lib/testers/rule-tester");
+
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
 
 // ------------------------------------------------------------------------------
 // Tests
 // ------------------------------------------------------------------------------
 
 const ExpectedError = {
   message: "Single argument Cu.import exposes new globals to all modules",
   type: "CallExpression"
 };
 
-exports.runTest = function(ruleTester) {
-  ruleTester.run("no-single-arg-cu-import", rule, {
-    valid: [
-      "Cu.import('fake', {});"
-    ],
-    invalid: [{
-      code: "Cu.import('fake');",
-      errors: [ExpectedError]
-    }]
-  });
-};
+ruleTester.run("no-single-arg-cu-import", rule, {
+  valid: [
+    "Cu.import('fake', {});"
+  ],
+  invalid: [{
+    code: "Cu.import('fake');",
+    errors: [ExpectedError]
+  }]
+});
deleted file mode 100644
--- a/tools/lint/eslint/eslint-plugin-mozilla/tests/test-run-all.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-const RuleTester = require("eslint/lib/testers/rule-tester");
-const fs = require("fs");
-
-var ruleTester = new RuleTester();
-
-fs.readdir(__dirname, (err, files) => {
-  files.forEach(file => {
-    if (file != "test-run-all.js" && !file.endsWith("~")) {
-      console.log(`Running ${file}`);
-      require("./" + file).runTest(ruleTester);
-    }
-  });
-});
--- a/tools/lint/eslint/eslint-plugin-mozilla/tests/use-default-preference-values.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/tests/use-default-preference-values.js
@@ -3,36 +3,37 @@
 
 "use strict";
 
 // ------------------------------------------------------------------------------
 // Requirements
 // ------------------------------------------------------------------------------
 
 var rule = require("../lib/rules/use-default-preference-values");
+var RuleTester = require("eslint/lib/testers/rule-tester");
+
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
 
 // ------------------------------------------------------------------------------
 // Tests
 // ------------------------------------------------------------------------------
 
 function invalidCode(code) {
   let message = "provide a default value instead of using a try/catch block";
   return {code, errors: [{message, type: "TryStatement"}]};
 }
 
 let types = ["Bool", "Char", "Float", "Int"];
 let methods = types.map(type => "get" + type + "Pref");
 
-exports.runTest = function(ruleTester) {
-  ruleTester.run("use-ownerGlobal", rule, {
-    valid: [].concat(
-      methods.map(m => "blah = branch." + m + "('blah', true);"),
-      methods.map(m => "blah = branch." + m + "('blah');"),
-      methods.map(m => "try { canThrow();" +
-                            " blah = branch." + m + "('blah'); } catch(e) {}")
-    ),
+ruleTester.run("use-default-preference-values", rule, {
+  valid: [].concat(
+    methods.map(m => "blah = branch." + m + "('blah', true);"),
+    methods.map(m => "blah = branch." + m + "('blah');"),
+    methods.map(m => "try { canThrow();" +
+                          " blah = branch." + m + "('blah'); } catch(e) {}")
+  ),
 
-    invalid: [].concat(
-      methods.map(m =>
-        invalidCode("try { blah = branch." + m + "('blah'); } catch(e) {}"))
-    )
-  });
-};
+  invalid: [].concat(
+    methods.map(m =>
+      invalidCode("try { blah = branch." + m + "('blah'); } catch(e) {}"))
+  )
+});
--- a/tools/lint/eslint/eslint-plugin-mozilla/tests/use-ownerGlobal.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/tests/use-ownerGlobal.js
@@ -3,33 +3,34 @@
 
 "use strict";
 
 // ------------------------------------------------------------------------------
 // Requirements
 // ------------------------------------------------------------------------------
 
 var rule = require("../lib/rules/use-ownerGlobal");
+var RuleTester = require("eslint/lib/testers/rule-tester");
+
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
 
 // ------------------------------------------------------------------------------
 // Tests
 // ------------------------------------------------------------------------------
 
 function invalidCode(code) {
   let message = "use .ownerGlobal instead of .ownerDocument.defaultView";
   return {code, errors: [{message, type: "MemberExpression"}]};
 }
 
-exports.runTest = function(ruleTester) {
-  ruleTester.run("use-ownerGlobal", rule, {
-    valid: [
-      "aEvent.target.ownerGlobal;",
-      "this.DOMPointNode.ownerGlobal.getSelection();",
-      "windowToMessageManager(node.ownerGlobal);"
-    ],
-    invalid: [
-      invalidCode("aEvent.target.ownerDocument.defaultView;"),
-      invalidCode(
-        "this.DOMPointNode.ownerDocument.defaultView.getSelection();"),
-      invalidCode("windowToMessageManager(node.ownerDocument.defaultView);")
-    ]
-  });
-};
+ruleTester.run("use-ownerGlobal", rule, {
+  valid: [
+    "aEvent.target.ownerGlobal;",
+    "this.DOMPointNode.ownerGlobal.getSelection();",
+    "windowToMessageManager(node.ownerGlobal);"
+  ],
+  invalid: [
+    invalidCode("aEvent.target.ownerDocument.defaultView;"),
+    invalidCode(
+      "this.DOMPointNode.ownerDocument.defaultView.getSelection();"),
+    invalidCode("windowToMessageManager(node.ownerDocument.defaultView);")
+  ]
+});