Skip to content

Commit

Permalink
adjusted tests to use css-loader, added tests for allChunks, remove m…
Browse files Browse the repository at this point in the history
…odule from initial chunk
  • Loading branch information
BowlingX committed Jun 18, 2017
1 parent 09ac8cb commit 3eba627
Show file tree
Hide file tree
Showing 30 changed files with 216 additions and 56 deletions.
11 changes: 6 additions & 5 deletions index.js
Expand Up @@ -274,10 +274,8 @@ ExtractTextPlugin.prototype.apply = function(compiler) {
if(meta && (!meta.options.id || meta.options.id === id)) {
var wasExtracted = Array.isArray(meta.content);
if(shouldExtract !== wasExtracted) {
if (shouldExtract) {
chunk.removeModule(module);
return callback();
}
// don't remove
module.loaders[0].options.remove = !shouldExtract;
module[NS + "/extract"] = shouldExtract; // eslint-disable-line no-path-concat
compilation.rebuildModule(module, function(err) {
if(err) {
Expand All @@ -291,8 +289,11 @@ ExtractTextPlugin.prototype.apply = function(compiler) {
compilation.errors.push(err);
return callback();
}
if(meta.content)
if(meta.content) {
extractCompilation.addResultToChunk(module.identifier(), meta.content, module, extractedChunk);
// remove generated result from chunk
chunk.removeModule(module);
}
callback();
});
} else {
Expand Down
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -32,6 +32,7 @@
"mocha": "^3.2.0",
"mocha-lcov-reporter": "1.3.0",
"raw-loader": "^0.5.1",
"rimraf": "^2.6.1",
"should": "^11.1.2",
"standard-version": "^4.1.0",
"style-loader": "^0.18.2",
Expand Down
62 changes: 33 additions & 29 deletions test/TestCases.test.js
Expand Up @@ -3,6 +3,7 @@ var vm = require("vm");
var path = require("path");
var webpack = require("webpack");
var should = require("should");
var rimraf = require('rimraf');
var ExtractTextPlugin = require("../");

var cases = process.env.CASES ? process.env.CASES.split(",") : fs.readdirSync(path.join(__dirname, "cases"));
Expand All @@ -12,36 +13,39 @@ describe("TestCases", function() {
it(testCase, function(done) {
var testDirectory = path.join(__dirname, "cases", testCase);
var outputDirectory = path.join(__dirname, "js", testCase);
var options = { entry: { test: "./index.js" } };
var configFile = path.join(testDirectory, "webpack.config.js");
if(fs.existsSync(configFile))
options = require(configFile);
options.context = testDirectory;
if(!options.module) options.module = {};
if(!options.module.loaders) options.module.loaders = [
{ test: /\.txt$/, loader: ExtractTextPlugin.extract("raw-loader") }
];
if(!options.output) options.output = { filename: "[name].js" };
if(!options.output.path) options.output.path = outputDirectory;
if(process.env.CASES) {
console.log("\nwebpack." + testCase + ".config.js " + JSON.stringify(options, null, 2));
}
webpack(options, function(err, stats) {
if(err) return done(err);
if(stats.hasErrors()) return done(new Error(stats.toString()));
var testFile = path.join(outputDirectory, "test.js");
if(fs.existsSync(testFile))
require(testFile)(suite);
var expectedDirectory = path.join(testDirectory, "expected");
fs.readdirSync(expectedDirectory).forEach(function(file) {
var filePath = path.join(expectedDirectory, file);
var actualPath = path.join(outputDirectory, file);
readFileOrEmpty(actualPath).should.be.eql(
readFileOrEmpty(filePath),
file + " should be correct");
function test() {
var options = { entry: { test: "./index.js" } };
var configFile = path.join(testDirectory, "webpack.config.js");
if (fs.existsSync(configFile))
options = require(configFile);
options.context = testDirectory;
if (!options.module) options.module = {};
if (!options.module.loaders) options.module.loaders = [
{ test: /\.txt$/, loader: ExtractTextPlugin.extract("raw-loader") }
];
if (!options.output) options.output = { filename: "[name].js" };
if (!options.output.path) options.output.path = outputDirectory;
if (process.env.CASES) {
//console.log("\nwebpack." + testCase + ".config.js " + JSON.stringify(options, null, 2));
}
webpack(options, function (err, stats) {
if (err) return done(err);
if (stats.hasErrors()) return done(new Error(stats.toString()));
var testFile = path.join(outputDirectory, "test.js");
if (fs.existsSync(testFile))
require(testFile)(suite);
var expectedDirectory = path.join(testDirectory, "expected");
fs.readdirSync(expectedDirectory).forEach(function (file) {
var filePath = path.join(expectedDirectory, file);
var actualPath = path.join(outputDirectory, file);
readFileOrEmpty(actualPath).should.be.eql(
readFileOrEmpty(filePath),
file + " should be correct");
});
done();
});
done();
});
}
rimraf(outputDirectory, test);
});
});
});
Expand Down
3 changes: 3 additions & 0 deletions test/cases/multiple-entries-all-async/default-styles.css
@@ -0,0 +1,3 @@
body {
background: red;
}
2 changes: 2 additions & 0 deletions test/cases/multiple-entries-all-async/entries/contact.js
@@ -0,0 +1,2 @@
require('../router');
require('../routes/contact');
2 changes: 2 additions & 0 deletions test/cases/multiple-entries-all-async/entries/homepage.js
@@ -0,0 +1,2 @@
require('../router');
require('../routes/homepage');
22 changes: 22 additions & 0 deletions test/cases/multiple-entries-all-async/expected/0.js
@@ -0,0 +1,22 @@
webpackJsonp([0],{

/***/ 2:
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(7);

modules.export = function() {
return 'Route Homepage';
};


/***/ }),

/***/ 7:
/***/ (function(module, exports) {

// removed by extract-text-webpack-plugin

/***/ })

});
22 changes: 22 additions & 0 deletions test/cases/multiple-entries-all-async/expected/1.js
@@ -0,0 +1,22 @@
webpackJsonp([1],{

/***/ 1:
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(6);

modules.export = function() {
return 'Route Contact';
};


/***/ }),

/***/ 6:
/***/ (function(module, exports) {

// removed by extract-text-webpack-plugin

/***/ })

});
9 changes: 9 additions & 0 deletions test/cases/multiple-entries-all-async/expected/contact.css
@@ -0,0 +1,9 @@
body {
background: red;
}
.contact {
color: black;
}
.homepage {
color: black;
}
9 changes: 9 additions & 0 deletions test/cases/multiple-entries-all-async/expected/homepage.css
@@ -0,0 +1,9 @@
body {
background: red;
}
.contact {
color: black;
}
.homepage {
color: black;
}
6 changes: 6 additions & 0 deletions test/cases/multiple-entries-all-async/router.js
@@ -0,0 +1,6 @@
require('./default-styles.css');
module.export = function (route) {
return import(/* webpackChunkName: "route-[request]" */ './routes/' + route + 'index.js').then(function (route) {
return route;
});
};
5 changes: 5 additions & 0 deletions test/cases/multiple-entries-all-async/routes/contact/index.js
@@ -0,0 +1,5 @@
require('./styles.css');

modules.export = function() {
return 'Route Contact';
};
@@ -0,0 +1,3 @@
.contact {
color: black;
}
@@ -0,0 +1,5 @@
require('./styles.css');

modules.export = function() {
return 'Route Homepage';
};
@@ -0,0 +1,3 @@
.homepage {
color: black;
}
23 changes: 23 additions & 0 deletions test/cases/multiple-entries-all-async/webpack.config.js
@@ -0,0 +1,23 @@
var ExtractTextPlugin = require("../../../");
module.exports = {
entry: {
'homepage': "./entries/homepage.js",
'contact': "./entries/contact.js"
},
module: {
loaders: [
{ test: /\.css$/, use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: { loader: "css-loader", options: {
sourceMap: true
} }
}) }
]
},
plugins: [
new ExtractTextPlugin({
filename: '[name].css',
allChunks: true
})
]
};
3 changes: 3 additions & 0 deletions test/cases/multiple-entries-async/default-styles.css
@@ -0,0 +1,3 @@
body {
background: red;
}
1 change: 0 additions & 1 deletion test/cases/multiple-entries-async/default-styles.txt

This file was deleted.

24 changes: 16 additions & 8 deletions test/cases/multiple-entries-async/expected/0.js
@@ -1,21 +1,29 @@
webpackJsonp([0],{

/***/ 2:
/***/ 11:
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(9);
exports = module.exports = __webpack_require__(5)(true);
// imports

modules.export = function() {
return 'Route Homepage';
};

// module
exports.push([module.i, ".homepage {\n\tcolor: black;\n}\n", "", {"version":3,"sources":["/Users/bowlingx/Projekte/extract-text-webpack-plugin/test/cases/multiple-entries-async/routes/homepage/styles.css"],"names":[],"mappings":"AAAA;CACC,aAAa;CACb","file":"styles.css","sourcesContent":[".homepage {\n\tcolor: black;\n}\n"],"sourceRoot":""}]);

// exports


/***/ }),

/***/ 9:
/***/ (function(module, exports) {
/***/ 2:
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(11);

modules.export = function() {
return 'Route Homepage';
};

module.exports = "styles-homepage\n"

/***/ })

Expand Down
16 changes: 12 additions & 4 deletions test/cases/multiple-entries-async/expected/1.js
Expand Up @@ -3,7 +3,7 @@ webpackJsonp([1],{
/***/ 1:
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(8);
__webpack_require__(10);

modules.export = function() {
return 'Route Contact';
Expand All @@ -12,10 +12,18 @@ modules.export = function() {

/***/ }),

/***/ 8:
/***/ (function(module, exports) {
/***/ 10:
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(5)(true);
// imports


// module
exports.push([module.i, ".contact {\n\tcolor: black;\n}\n", "", {"version":3,"sources":["/Users/bowlingx/Projekte/extract-text-webpack-plugin/test/cases/multiple-entries-async/routes/contact/styles.css"],"names":[],"mappings":"AAAA;CACC,aAAa;CACb","file":"styles.css","sourcesContent":[".contact {\n\tcolor: black;\n}\n"],"sourceRoot":""}]);

// exports

module.exports = "styles-contact\n"

/***/ })

Expand Down
8 changes: 6 additions & 2 deletions test/cases/multiple-entries-async/expected/contact.css
@@ -1,2 +1,6 @@
default-styles
styles-contact
body {
background: red;
}
.contact {
color: black;
}
8 changes: 6 additions & 2 deletions test/cases/multiple-entries-async/expected/homepage.css
@@ -1,2 +1,6 @@
default-styles
styles-homepage
body {
background: red;
}
.homepage {
color: black;
}
2 changes: 1 addition & 1 deletion test/cases/multiple-entries-async/router.js
@@ -1,4 +1,4 @@
require('./default-styles.txt');
require('./default-styles.css');
module.export = function (route) {
return import(/* webpackChunkName: "route-[request]" */ './routes/' + route + 'index.js').then(function (route) {
return route;
Expand Down
2 changes: 1 addition & 1 deletion test/cases/multiple-entries-async/routes/contact/index.js
@@ -1,4 +1,4 @@
require('./styles.txt');
require('./styles.css');

modules.export = function() {
return 'Route Contact';
Expand Down
3 changes: 3 additions & 0 deletions test/cases/multiple-entries-async/routes/contact/styles.css
@@ -0,0 +1,3 @@
.contact {
color: black;
}

This file was deleted.

2 changes: 1 addition & 1 deletion test/cases/multiple-entries-async/routes/homepage/index.js
@@ -1,4 +1,4 @@
require('./styles.txt');
require('./styles.css');

modules.export = function() {
return 'Route Homepage';
Expand Down
3 changes: 3 additions & 0 deletions test/cases/multiple-entries-async/routes/homepage/styles.css
@@ -0,0 +1,3 @@
.homepage {
color: black;
}

This file was deleted.

10 changes: 10 additions & 0 deletions test/cases/multiple-entries-async/webpack.config.js
Expand Up @@ -4,6 +4,16 @@ module.exports = {
'homepage': "./entries/homepage.js",
'contact': "./entries/contact.js"
},
module: {
loaders: [
{ test: /\.css$/, use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: { loader: "css-loader", options: {
sourceMap: true
} }
}) }
]
},
plugins: [
new ExtractTextPlugin({
filename: '[name].css',
Expand Down

0 comments on commit 3eba627

Please sign in to comment.