Skip to content

Commit 5f4b4be

Browse files
committed
migrate TestCases
1 parent c01735e commit 5f4b4be

File tree

1 file changed

+88
-89
lines changed

1 file changed

+88
-89
lines changed

test/TestCases.test.js

Lines changed: 88 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
/* global describe, it*/
1+
/* global describe it fit expect */
22
"use strict";
33

4-
require("should");
54
const path = require("path");
65
const fs = require("fs");
76
const vm = require("vm");
87
const mkdirp = require("mkdirp");
9-
const Test = require("mocha/lib/test");
108
const checkArrayExpectation = require("./checkArrayExpectation");
9+
const async = require("async");
1110

1211
const Stats = require("../lib/Stats");
1312
const webpack = require("../lib/webpack");
@@ -116,7 +115,6 @@ describe("TestCases", () => {
116115
describe(config.name, () => {
117116
categories.forEach((category) => {
118117
describe(category.name, function() {
119-
this.timeout(30000);
120118
category.tests.filter((test) => {
121119
const testDirectory = path.join(casesPath, category.name, test);
122120
const filterPath = path.join(testDirectory, "test.filter.js");
@@ -126,95 +124,96 @@ describe("TestCases", () => {
126124
}
127125
return true;
128126
}).forEach((testName) => {
129-
const suite = describe(testName, () => {});
130-
it(testName + " should compile", (done) => {
131-
const testDirectory = path.join(casesPath, category.name, testName);
132-
const outputDirectory = path.join(__dirname, "js", config.name, category.name, testName);
133-
const options = {
134-
context: casesPath,
135-
entry: "./" + category.name + "/" + testName + "/index",
136-
target: "async-node",
137-
devtool: config.devtool,
138-
mode: config.mode || "none",
139-
optimization: config.mode ? NO_EMIT_ON_ERRORS_OPTIMIZATIONS : Object.assign({}, config.optimization, DEFAULT_OPTIMIZATIONS),
140-
performance: {
141-
hints: false
142-
},
143-
output: {
144-
pathinfo: true,
145-
path: outputDirectory,
146-
filename: "bundle.js"
147-
},
148-
resolve: {
149-
modules: ["web_modules", "node_modules"],
150-
mainFields: ["webpack", "browser", "web", "browserify", ["jam", "main"], "main"],
151-
aliasFields: ["browser"],
152-
extensions: [".mjs", ".webpack.js", ".web.js", ".js", ".json"],
153-
concord: true
154-
},
155-
resolveLoader: {
156-
modules: ["web_loaders", "web_modules", "node_loaders", "node_modules"],
157-
mainFields: ["webpackLoader", "webLoader", "loader", "main"],
158-
extensions: [".webpack-loader.js", ".web-loader.js", ".loader.js", ".js"]
159-
},
160-
module: {
161-
rules: [{
162-
test: /\.coffee$/,
163-
loader: "coffee-loader"
164-
}, {
165-
test: /\.jade$/,
166-
loader: "jade-loader"
167-
}]
168-
},
169-
plugins: (config.plugins || []).concat(function() {
170-
this.hooks.compilation.tap("TestCasesTest", (compilation) => {
171-
["optimize", "optimizeModulesBasic", "optimizeChunksBasic", "afterOptimizeTree", "afterOptimizeAssets"].forEach((hook) => {
172-
compilation.hooks[hook].tap("TestCasesTest", () => compilation.checkConstraints());
127+
describe(testName, () => {
128+
it(testName + " should compile", (done) => {
129+
const testDirectory = path.join(casesPath, category.name, testName);
130+
const outputDirectory = path.join(__dirname, "js", config.name, category.name, testName);
131+
const options = {
132+
context: casesPath,
133+
entry: "./" + category.name + "/" + testName + "/index",
134+
target: "async-node",
135+
devtool: config.devtool,
136+
mode: config.mode || "none",
137+
optimization: config.mode ? NO_EMIT_ON_ERRORS_OPTIMIZATIONS : Object.assign({}, config.optimization, DEFAULT_OPTIMIZATIONS),
138+
performance: {
139+
hints: false
140+
},
141+
output: {
142+
pathinfo: true,
143+
path: outputDirectory,
144+
filename: "bundle.js"
145+
},
146+
resolve: {
147+
modules: ["web_modules", "node_modules"],
148+
mainFields: ["webpack", "browser", "web", "browserify", ["jam", "main"], "main"],
149+
aliasFields: ["browser"],
150+
extensions: [".mjs", ".webpack.js", ".web.js", ".js", ".json"],
151+
concord: true
152+
},
153+
resolveLoader: {
154+
modules: ["web_loaders", "web_modules", "node_loaders", "node_modules"],
155+
mainFields: ["webpackLoader", "webLoader", "loader", "main"],
156+
extensions: [".webpack-loader.js", ".web-loader.js", ".loader.js", ".js"]
157+
},
158+
module: {
159+
rules: [{
160+
test: /\.coffee$/,
161+
loader: "coffee-loader"
162+
}, {
163+
test: /\.jade$/,
164+
loader: "jade-loader"
165+
}]
166+
},
167+
plugins: (config.plugins || []).concat(function() {
168+
this.hooks.compilation.tap("TestCasesTest", (compilation) => {
169+
["optimize", "optimizeModulesBasic", "optimizeChunksBasic", "afterOptimizeTree", "afterOptimizeAssets"].forEach((hook) => {
170+
compilation.hooks[hook].tap("TestCasesTest", () => compilation.checkConstraints());
171+
});
173172
});
173+
})
174+
};
175+
webpack(options, (err, stats) => {
176+
if(err) return done(err);
177+
const statOptions = Stats.presetToOptions("verbose");
178+
statOptions.colors = false;
179+
mkdirp.sync(outputDirectory);
180+
fs.writeFileSync(path.join(outputDirectory, "stats.txt"), stats.toString(statOptions), "utf-8");
181+
const jsonStats = stats.toJson({
182+
errorDetails: true
174183
});
175-
})
176-
};
177-
webpack(options, (err, stats) => {
178-
if(err) return done(err);
179-
const statOptions = Stats.presetToOptions("verbose");
180-
statOptions.colors = false;
181-
mkdirp.sync(outputDirectory);
182-
fs.writeFileSync(path.join(outputDirectory, "stats.txt"), stats.toString(statOptions), "utf-8");
183-
const jsonStats = stats.toJson({
184-
errorDetails: true
185-
});
186-
if(checkArrayExpectation(testDirectory, jsonStats, "error", "Error", done)) return;
187-
if(checkArrayExpectation(testDirectory, jsonStats, "warning", "Warning", done)) return;
188-
let exportedTest = 0;
189-
190-
function _it(title, fn) {
191-
const test = new Test(title, fn);
192-
suite.addTest(test);
193-
exportedTest++;
194-
// WORKAROUND for a v8 bug
195-
// Error objects retrain all scopes in the stacktrace
196-
test._trace = test._trace.message;
184+
if(checkArrayExpectation(testDirectory, jsonStats, "error", "Error", done)) return;
185+
if(checkArrayExpectation(testDirectory, jsonStats, "warning", "Warning", done)) return;
186+
let exportedTests = [];
197187

198-
return test;
199-
}
188+
function _it(title, fn) {
189+
exportedTests.push(fit(title, fn));
190+
// TODO: is this necessary in 'jest'?
191+
// WORKAROUND for a v8 bug
192+
// Error objects retrain all scopes in the stacktrace
193+
// test._trace = test._trace.message;
194+
}
200195

201-
function _require(module) {
202-
if(module.substr(0, 2) === "./") {
203-
const p = path.join(outputDirectory, module);
204-
const fn = vm.runInThisContext("(function(require, module, exports, __dirname, it) {" + fs.readFileSync(p, "utf-8") + "\n})", p);
205-
const m = {
206-
exports: {},
207-
webpackTestSuiteModule: true
208-
};
209-
fn.call(m.exports, _require, m, m.exports, outputDirectory, _it);
210-
return m.exports;
211-
} else return require(module);
212-
}
213-
_require.webpackTestSuiteRequire = true;
214-
_require("./bundle.js");
215-
if(exportedTest === 0) return done(new Error("No tests exported by test case"));
216-
done();
217-
});
196+
function _require(module) {
197+
if(module.substr(0, 2) === "./") {
198+
const p = path.join(outputDirectory, module);
199+
const fn = vm.runInThisContext("(function(require, module, exports, __dirname, it, expect) {" + fs.readFileSync(p, "utf-8") + "\n})", p);
200+
const m = {
201+
exports: {},
202+
webpackTestSuiteModule: true
203+
};
204+
fn.call(m.exports, _require, m, m.exports, outputDirectory, _it, expect);
205+
return m.exports;
206+
} else return require(module);
207+
}
208+
_require.webpackTestSuiteRequire = true;
209+
_require("./bundle.js");
210+
if(exportedTests.length === 0) return done(new Error("No tests exported by test case"));
211+
async.waterfall(
212+
exportedTests.map(test => (callback) => test.execute(callback, true)),
213+
done
214+
);
215+
});
216+
}, 30000);
218217
});
219218
});
220219
});

0 commit comments

Comments
 (0)