Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: test/browser.js

Issue 30025555: Issue 6820 - Move tests to mocha (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore/
Patch Set: Rebased. Created April 5, 2019, 4:16 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/.eslintrc.json ('k') | test/browser/_bootstrap.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/browser.js
===================================================================
rename from test_runner.js
rename to test/browser.js
--- a/test_runner.js
+++ b/test/browser.js
@@ -14,30 +14,29 @@
* You should have received a copy of the GNU General Public License
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
*/
/* eslint-env node */
"use strict";
-const fs = require("fs");
+const assert = require("assert");
const path = require("path");
const MemoryFS = require("memory-fs");
-const nodeunit = require("nodeunit");
const webpack = require("webpack");
-const chromiumRemoteProcess = require("./test/runners/chromium_remote_process");
-const chromiumProcess = require("./test/runners/chromium_process");
-const edgeProcess = require("./test/runners/edge_process");
-const firefoxProcess = require("./test/runners/firefox_process");
+const chromiumRemoteProcess = require("./runners/chromium_remote_process");
+const chromiumProcess = require("./runners/chromium_process");
+const edgeProcess = require("./runners/edge_process");
+const firefoxProcess = require("./runners/firefox_process");
-let unitFiles = [];
-let browserFiles = [];
+// Path are to be from the top-level directory
+let browserFiles = ["./test/browser/elemHideEmulation.js", "./test/browser/snippets.js"];
let runnerDefinitions = {
// Chromium with chrome-remote-interface
chromium_remote: chromiumRemoteProcess,
// Chromium with WebDriver (requires Chromium >= 63.0.3239)
chromium: chromiumProcess,
edge: edgeProcess,
firefox: firefoxProcess
@@ -57,42 +56,16 @@
return ["chromium_remote", "firefox"];
}
return runners.filter(runner => runnerDefinitions.hasOwnProperty(runner));
}
let runnerProcesses = configureRunners();
-function addTestPaths(testPaths, recurse)
-{
- for (let testPath of testPaths)
- {
- let stat = fs.statSync(testPath);
- if (stat.isDirectory())
- {
- if (recurse)
- {
- addTestPaths(fs.readdirSync(testPath).map(
- file => path.join(testPath, file)));
- }
- continue;
- }
- if (path.basename(testPath).startsWith("_"))
- continue;
- if (path.extname(testPath) == ".js")
- {
- if (testPath.split(path.sep).includes("browser"))
- browserFiles.push(testPath);
- else
- unitFiles.push(testPath);
- }
- }
-}
-
function webpackInMemory(bundleFilename, options)
{
return new Promise((resolve, reject) =>
{
// Based on this example
// https://webpack.js.org/api/node/#custom-file-systems
let memoryFS = new MemoryFS();
@@ -119,77 +92,58 @@
let bundle = memoryFS.readFileSync("/" + bundleFilename, "utf-8");
memoryFS.unlinkSync("/" + bundleFilename);
resolve(bundle);
}
});
});
}
-function runBrowserTests(processes)
+describe("Browser tests", function()
{
- if (!browserFiles.length)
- return Promise.resolve();
+ assert.ok(browserFiles.length);
- let nodeunitPath = path.join(__dirname, "node_modules", "nodeunit",
- "examples", "browser", "nodeunit.js");
+ this.timeout(0);
+
let bundleFilename = "bundle.js";
- return webpackInMemory(bundleFilename, {
- entry: path.join(__dirname, "test", "browser", "_bootstrap.js"),
- module: {
- rules: [{
- resource: nodeunitPath,
- // I would have rather used exports-loader here, to avoid treating
- // nodeunit as a global. Unfortunately the nodeunit browser example
- // script is quite slopily put together, if exports isn't falsey it
- // breaks! As a workaround we need to use script-loader, which means
- // that exports is falsey for that script as a side-effect.
- use: ["script-loader"]
- }]
- },
- resolve: {
- alias: {
- nodeunit$: nodeunitPath
+ let bundle;
+ let mochaPath = path.join(__dirname, "..", "node_modules", "mocha",
+ "mocha.js");
+ before(async() =>
+ {
+ bundle = await webpackInMemory(bundleFilename, {
+ entry: path.join(__dirname, "browser", "_bootstrap.js"),
+ module: {
+ rules: [{
+ // we use the browser version of mocha
+ resource: mochaPath,
+ use: ["script-loader"]
+ }]
},
- modules: [path.resolve(__dirname, "lib")]
- }
- }).then(bundle =>
- Promise.all(
- processes.map(currentProcess =>
- runnerDefinitions[currentProcess](
- bundle, bundleFilename,
- browserFiles.map(
- file => path.relative(path.join(__dirname, "test", "browser"),
- file).replace(/\.js$/, "")
- )
- )
- // We need to convert rejected promise to a resolved one
- // or the test will not let close the webdriver.
- .catch(e => e)
- )).then(results =>
- {
- let errors = results.filter(e => typeof e != "undefined");
- if (errors.length)
- throw `Browser unit test failed: ${errors.join(", ")}`;
- })
- );
-}
+ resolve: {
+ alias: {
+ mocha$: mochaPath
+ },
+ modules: [path.resolve(__dirname, "..", "lib")]
+ }
+ });
+ });
-if (process.argv.length > 2)
- addTestPaths(process.argv.slice(2), true);
-else
-{
- addTestPaths(
- [path.join(__dirname, "test"), path.join(__dirname, "test", "browser")],
- true
- );
-}
+ it("Runner prerequisites", () =>
+ {
+ assert.ok(bundle);
+ assert.notEqual(runnerProcesses.length, 0, "No runners was found");
+ });
-runBrowserTests(runnerProcesses).then(() =>
-{
- if (unitFiles.length)
- nodeunit.reporters.default.run(unitFiles);
-}).catch(error =>
-{
- console.error(error);
- process.exit(1);
+ runnerProcesses.map(currentProcess =>
+ {
+ it(currentProcess, () =>
+ runnerDefinitions[currentProcess](
+ bundle, bundleFilename,
+ browserFiles.map(
+ file => path.relative(path.join(__dirname, "browser"),
+ file).replace(/\.js$/, "")
+ )
+ )
+ );
+ });
});
« no previous file with comments | « test/.eslintrc.json ('k') | test/browser/_bootstrap.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld