mirror of https://github.com/webpack/webpack.git
407 lines
14 KiB
JavaScript
407 lines
14 KiB
JavaScript
var should = require("should");
|
|
var sinon = require("sinon");
|
|
var LibraryTemplatePlugin = require("../lib/LibraryTemplatePlugin");
|
|
var applyPluginWithOptions = require("./helpers/applyPluginWithOptions");
|
|
|
|
describe("LibraryTemplatePlugin", function() {
|
|
var env;
|
|
|
|
beforeEach(function() {
|
|
env = {
|
|
compilation: sinon.spy()
|
|
};
|
|
});
|
|
|
|
it("has apply function", function() {
|
|
(new LibraryTemplatePlugin()).apply.should.be.a.Function();
|
|
});
|
|
|
|
describe("when applied", function() {
|
|
beforeEach(function() {
|
|
env.eventBindings = applyPluginWithOptions(LibraryTemplatePlugin);
|
|
});
|
|
|
|
it("binds two event handlers", function() {
|
|
env.eventBindings.length.should.be.exactly(1);
|
|
});
|
|
|
|
describe("this-compilation handler", function() {
|
|
beforeEach(function() {
|
|
env.eventBinding = env.eventBindings[0];
|
|
});
|
|
|
|
describe("event handler", function() {
|
|
it("binds to this-compilation event", function() {
|
|
env.eventBinding.name.should.be.exactly("this-compilation");
|
|
});
|
|
});
|
|
|
|
describe("when target is unknown", function() {
|
|
beforeEach(function() {
|
|
var unknownTarget = "unknownTarget";
|
|
env.eventBindings = applyPluginWithOptions(LibraryTemplatePlugin, "foo", unknownTarget, "bar", "baz");
|
|
env.eventBinding = env.eventBindings[0];
|
|
});
|
|
|
|
it("throws an error", function() {
|
|
should(function() {
|
|
env.eventBinding.handler(env.compilation);
|
|
}).throw("unknownTarget is not a valid Library target");
|
|
});
|
|
});
|
|
|
|
describe("name is a string", function() {
|
|
[{
|
|
type: "var",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("var foo");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "assign",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("foo");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "this",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("this[\"foo\"]");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "window",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("window[\"foo\"]");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "global",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("global[\"foo\"]");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "commonjs",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("exports[\"foo\"]");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "commonjs2",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("module.exports");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "commonjs-module",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("module.exports");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "amd",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.be.exactly("foo");
|
|
}
|
|
},
|
|
{
|
|
type: "umd",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.be.exactly("foo");
|
|
compilationContext.optionalAmdExternalAsGlobal.should.be.false();
|
|
compilationContext.namedDefine.should.be.exactly("bar");
|
|
compilationContext.auxiliaryComment.should.be.exactly("baz");
|
|
}
|
|
},
|
|
{
|
|
type: "umd2",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.be.exactly("foo");
|
|
compilationContext.optionalAmdExternalAsGlobal.should.be.true();
|
|
compilationContext.namedDefine.should.be.exactly("bar");
|
|
compilationContext.auxiliaryComment.should.be.exactly("baz");
|
|
}
|
|
},
|
|
{
|
|
type: "jsonp",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.be.exactly("foo");
|
|
}
|
|
}
|
|
].forEach(function(targetTypeAndAssertion) {
|
|
var type = targetTypeAndAssertion.type;
|
|
|
|
describe("when target is " + type, function() {
|
|
beforeEach(function() {
|
|
env.eventBindings = applyPluginWithOptions(LibraryTemplatePlugin, "foo", type, "bar", "baz");
|
|
env.eventBinding = env.eventBindings[0];
|
|
env.eventBinding.handler(env.compilation);
|
|
});
|
|
|
|
it("compilation callback is called", function() {
|
|
env.compilation.callCount.should.be.exactly(1);
|
|
});
|
|
|
|
it("compilation callback context is set up", function() {
|
|
var compilationContext = env.compilation.firstCall.thisValue;
|
|
targetTypeAndAssertion.assertion(compilationContext);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("name is an array of strings", function() {
|
|
[{
|
|
type: "var",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("var foo = foo || {}; foo[\"bar\"] = foo[\"bar\"] || {}; foo[\"bar\"][\"baz\"]");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "assign",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("foo = typeof foo === \"object\" ? foo : {}; foo[\"bar\"] = foo[\"bar\"] || {}; foo[\"bar\"][\"baz\"]");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "this",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("this[\"foo\"] = this[\"foo\"] || {}; this[\"foo\"][\"bar\"] = this[\"foo\"][\"bar\"] || {}; this[\"foo\"][\"bar\"][\"baz\"]");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "window",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("window[\"foo\"] = window[\"foo\"] || {}; window[\"foo\"][\"bar\"] = window[\"foo\"][\"bar\"] || {}; window[\"foo\"][\"bar\"][\"baz\"]");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "global",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("global[\"foo\"] = global[\"foo\"] || {}; global[\"foo\"][\"bar\"] = global[\"foo\"][\"bar\"] || {}; global[\"foo\"][\"bar\"][\"baz\"]");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "commonjs",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("exports[\"foo\"] = exports[\"foo\"] || {}; exports[\"foo\"][\"bar\"] = exports[\"foo\"][\"bar\"] || {}; exports[\"foo\"][\"bar\"][\"baz\"]");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "commonjs2",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("module.exports");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "commonjs-module",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("module.exports");
|
|
should(compilationContext.copyObject).be.undefined();
|
|
}
|
|
},
|
|
{
|
|
type: "amd",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.deepEqual(["foo", "bar", "baz"]);
|
|
}
|
|
},
|
|
{
|
|
type: "umd",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.deepEqual(["foo", "bar", "baz"]);
|
|
compilationContext.optionalAmdExternalAsGlobal.should.be.false();
|
|
compilationContext.namedDefine.should.be.exactly("bar");
|
|
compilationContext.auxiliaryComment.should.be.exactly("baz");
|
|
}
|
|
},
|
|
{
|
|
type: "umd2",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.deepEqual(["foo", "bar", "baz"]);
|
|
compilationContext.optionalAmdExternalAsGlobal.should.be.true();
|
|
compilationContext.namedDefine.should.be.exactly("bar");
|
|
compilationContext.auxiliaryComment.should.be.exactly("baz");
|
|
}
|
|
},
|
|
{
|
|
type: "jsonp",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.deepEqual(["foo", "bar", "baz"]);
|
|
}
|
|
}
|
|
].forEach(function(targetTypeAndAssertion) {
|
|
var type = targetTypeAndAssertion.type;
|
|
|
|
describe("when target is " + type, function() {
|
|
beforeEach(function() {
|
|
env.eventBindings = applyPluginWithOptions(LibraryTemplatePlugin, ["foo", "bar", "baz"], type, "bar", "baz");
|
|
env.eventBinding = env.eventBindings[0];
|
|
env.eventBinding.handler(env.compilation);
|
|
});
|
|
|
|
it("compilation callback is called", function() {
|
|
env.compilation.callCount.should.be.exactly(1);
|
|
});
|
|
|
|
it("compilation callback context is set up", function() {
|
|
var compilationContext = env.compilation.firstCall.thisValue;
|
|
targetTypeAndAssertion.assertion(compilationContext);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("name not provided", function() {
|
|
[{
|
|
type: "this",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("this");
|
|
should(compilationContext.copyObject).be.true();
|
|
}
|
|
},
|
|
{
|
|
type: "window",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("window");
|
|
should(compilationContext.copyObject).be.true();
|
|
}
|
|
},
|
|
{
|
|
type: "global",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("global");
|
|
should(compilationContext.copyObject).be.true();
|
|
}
|
|
},
|
|
{
|
|
type: "commonjs",
|
|
assertion: function(compilationContext) {
|
|
compilationContext.varExpression.should.be.exactly("exports");
|
|
should(compilationContext.copyObject).be.true();
|
|
}
|
|
}
|
|
].forEach(function(targetTypeAndAssertion) {
|
|
var type = targetTypeAndAssertion.type;
|
|
|
|
describe("when target is " + type, function() {
|
|
beforeEach(function() {
|
|
env.eventBindings = applyPluginWithOptions(LibraryTemplatePlugin, undefined, type, "bar", "baz");
|
|
env.eventBinding = env.eventBindings[0];
|
|
env.eventBinding.handler(env.compilation);
|
|
});
|
|
|
|
it("compilation callback is called", function() {
|
|
env.compilation.callCount.should.be.exactly(1);
|
|
});
|
|
|
|
it("compilation callback context is set up", function() {
|
|
var compilationContext = env.compilation.firstCall.thisValue;
|
|
targetTypeAndAssertion.assertion(compilationContext);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("name is an object of names per target", function() {
|
|
[{
|
|
type: "umd",
|
|
namedDefine: true,
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.be.exactly("barRoot");
|
|
compilationContext.names.should.deepEqual({
|
|
root: "barRoot",
|
|
amd: "bar-amd"
|
|
});
|
|
compilationContext.optionalAmdExternalAsGlobal.should.be.false();
|
|
compilationContext.namedDefine.should.be.exactly(true);
|
|
compilationContext.auxiliaryComment.should.be.exactly("baz");
|
|
}
|
|
},
|
|
{
|
|
type: "umd",
|
|
namedDefine: false,
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.be.exactly("barRoot");
|
|
compilationContext.names.should.deepEqual({
|
|
root: "barRoot",
|
|
amd: "bar-amd"
|
|
});
|
|
compilationContext.optionalAmdExternalAsGlobal.should.be.false();
|
|
compilationContext.namedDefine.should.be.exactly(false);
|
|
compilationContext.auxiliaryComment.should.be.exactly("baz");
|
|
}
|
|
},
|
|
{
|
|
type: "umd2",
|
|
namedDefine: true,
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.be.exactly("barRoot");
|
|
compilationContext.names.should.deepEqual({
|
|
root: "barRoot",
|
|
amd: "bar-amd"
|
|
});
|
|
compilationContext.optionalAmdExternalAsGlobal.should.be.true();
|
|
compilationContext.namedDefine.should.be.exactly(true);
|
|
compilationContext.auxiliaryComment.should.be.exactly("baz");
|
|
}
|
|
},
|
|
{
|
|
type: "umd2",
|
|
namedDefine: false,
|
|
assertion: function(compilationContext) {
|
|
compilationContext.name.should.be.exactly("barRoot");
|
|
compilationContext.names.should.deepEqual({
|
|
root: "barRoot",
|
|
amd: "bar-amd"
|
|
});
|
|
compilationContext.optionalAmdExternalAsGlobal.should.be.true();
|
|
compilationContext.namedDefine.should.be.exactly(false);
|
|
compilationContext.auxiliaryComment.should.be.exactly("baz");
|
|
}
|
|
}
|
|
].forEach(function(targetTypeAndAssertion) {
|
|
var type = targetTypeAndAssertion.type;
|
|
var namedDefine = targetTypeAndAssertion.namedDefine;
|
|
|
|
describe("when target is " + type, function() {
|
|
beforeEach(function() {
|
|
env.eventBindings = applyPluginWithOptions(LibraryTemplatePlugin, {
|
|
root: "barRoot",
|
|
amd: "bar-amd"
|
|
}, type, namedDefine, "baz");
|
|
env.eventBinding = env.eventBindings[0];
|
|
env.eventBinding.handler(env.compilation);
|
|
});
|
|
|
|
it("compilation callback is called", function() {
|
|
env.compilation.callCount.should.be.exactly(1);
|
|
});
|
|
|
|
it("compilation callback context is set up", function() {
|
|
var compilationContext = env.compilation.firstCall.thisValue;
|
|
targetTypeAndAssertion.assertion(compilationContext);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|