mirror of https://github.com/webpack/webpack.git
243 lines
7.1 KiB
JavaScript
243 lines
7.1 KiB
JavaScript
"use strict";
|
|
|
|
const should = require("should");
|
|
const sinon = require("sinon");
|
|
const ContextReplacementPlugin = require("../lib/ContextReplacementPlugin");
|
|
const PluginEnvironment = require("./helpers/PluginEnvironment");
|
|
|
|
describe("ContextReplacementPlugin", () => {
|
|
it("has apply function", () => (new ContextReplacementPlugin()).apply.should.be.a.Function());
|
|
|
|
it("should consume resourceRegExp as regular expression", () => {
|
|
let instance = new ContextReplacementPlugin(/selector/, "mock", "mock", "mock");
|
|
should(instance.resourceRegExp instanceof RegExp).be.exactly(true);
|
|
});
|
|
|
|
it("should consume newContentResource as function", () => {
|
|
let instance = new ContextReplacementPlugin(/selector/, () => {}, "mock", "mock");
|
|
should(instance.newContentCallback).be.a.Function();
|
|
});
|
|
|
|
it("should consume newContentResource as not an string or function", () => {
|
|
let instance = new ContextReplacementPlugin(/selector/, 42, "newContentRecursive", "newContentRegExp");
|
|
|
|
should(instance.resourceRegExp instanceof RegExp).be.exactly(true);
|
|
should(instance.newContentResource).be.exactly(undefined);
|
|
should(instance.newContentRecursive).be.exactly(undefined);
|
|
should(instance.newContentRegExp).be.exactly(42);
|
|
});
|
|
|
|
it("should consume newContentResource as an object", () => {
|
|
let instance = new ContextReplacementPlugin(/selector/, "newResource", {
|
|
test: "obj"
|
|
}, /selector/);
|
|
|
|
should(instance.resourceRegExp instanceof RegExp).be.exactly(true);
|
|
should(instance.newContentResource).be.exactly("newResource");
|
|
should(instance.newContentRecursive).be.exactly(undefined);
|
|
should(instance.newContentRegExp).be.exactly(undefined);
|
|
should(instance.newContentCreateContextMap).be.a.Function();
|
|
|
|
let x = (nothing, obj) => {
|
|
should(obj.test).be.exactly("obj");
|
|
};
|
|
|
|
let spy = sinon.spy(x);
|
|
|
|
instance.newContentCreateContextMap(undefined, spy);
|
|
|
|
should(spy.called).be.exactly(true);
|
|
|
|
});
|
|
|
|
it("should consume newContentResource as an object", () => {
|
|
let instance = new ContextReplacementPlugin(/selector/, "newResource", () => {}, /selector/);
|
|
|
|
should(instance.resourceRegExp instanceof RegExp).be.exactly(true);
|
|
should(instance.newContentResource).be.exactly("newResource");
|
|
should(instance.newContentRecursive).be.exactly(undefined);
|
|
should(instance.newContentRegExp).be.exactly(undefined);
|
|
should(instance.newContentCreateContextMap).be.a.Function();
|
|
});
|
|
|
|
describe("when applied", () => {
|
|
|
|
describe("when before resolve is called", () => {
|
|
it("default call", () => {
|
|
let obj = buildPluginWithParams(/selector/, "./folder", true, /filter/);
|
|
|
|
let x = (nothing, result) => {
|
|
should(result.request).be.exactly("./folder");
|
|
should(result.dependencies[0].critical).be.exactly(false);
|
|
should(result.recursive).be.exactly(true);
|
|
should(result.regExp instanceof RegExp).be.exactly(true);
|
|
};
|
|
|
|
let spy = sinon.spy(x);
|
|
|
|
obj.beforeResolve.handler({
|
|
request: "selector",
|
|
dependencies: [{
|
|
critical: true
|
|
}]
|
|
}, spy);
|
|
|
|
should(spy.called).be.exactly(true);
|
|
});
|
|
|
|
it("default call with newContentCallback as a function", () => {
|
|
let obj = buildPluginWithParams(/selector/, (result) => {
|
|
should(result.request).be.exactly("selector");
|
|
should(result.dependencies[0].critical).be.exactly(false);
|
|
should(result.recursive).be.exactly(undefined);
|
|
should(result.regExp).be.exactly(undefined);
|
|
}, true, /filter/);
|
|
|
|
let x = (nothing, result) => {
|
|
should(result.request).be.exactly("selector");
|
|
should(result.dependencies[0].critical).be.exactly(false);
|
|
should(result.recursive).be.exactly(undefined);
|
|
should(result.regExp).be.exactly(undefined);
|
|
};
|
|
|
|
let spy = sinon.spy(x);
|
|
|
|
obj.beforeResolve.handler({
|
|
request: "selector",
|
|
dependencies: [{
|
|
critical: false
|
|
}]
|
|
}, spy);
|
|
|
|
should(spy.called).be.exactly(true);
|
|
});
|
|
|
|
it("call when result is false", () => {
|
|
let obj = buildPluginWithParams(/selector/, "./folder", true, /filter/);
|
|
|
|
let x = (nothing, result) => {
|
|
should(result).be.Undefined();
|
|
};
|
|
|
|
let spy = sinon.spy(x);
|
|
|
|
obj.beforeResolve.handler(false, spy);
|
|
|
|
should(spy.called).be.exactly(true);
|
|
});
|
|
});
|
|
|
|
describe("when after resolve is called", () => {
|
|
it("default call where regex is correct", () => {
|
|
let obj = buildPluginWithParams(/selector/, "./folder", true, /filter/);
|
|
|
|
let x = (nothing, result) => {
|
|
result.resource.should.containEql("selector");
|
|
result.resource.should.containEql("folder");
|
|
};
|
|
|
|
let spy = sinon.spy(x);
|
|
|
|
obj.afterResolve.handler({
|
|
resource: "selector",
|
|
dependencies: [{
|
|
critical: true
|
|
}]
|
|
}, spy);
|
|
|
|
should(spy.called).be.exactly(true);
|
|
});
|
|
|
|
it("default call where regex is incorrect", () => {
|
|
let obj = buildPluginWithParams(/selector/, "./folder", true, /filter/);
|
|
|
|
let x = (nothing, result) => {
|
|
result.resource.should.containEql("importwontwork");
|
|
};
|
|
|
|
let spy = sinon.spy(x);
|
|
|
|
obj.afterResolve.handler({
|
|
resource: "importwontwork",
|
|
dependencies: [{
|
|
critical: true
|
|
}]
|
|
}, spy);
|
|
|
|
should(spy.called).be.exactly(true);
|
|
});
|
|
|
|
it("default call where regex is correct", () => {
|
|
let obj = buildPluginWithParams(/selector/, (result) => {
|
|
//noop
|
|
}, true, /filter/);
|
|
|
|
let x = (nothing, result) => {
|
|
result.resource.should.equal("selector");
|
|
};
|
|
|
|
let spy = sinon.spy(x);
|
|
|
|
obj.afterResolve.handler({
|
|
resource: "selector",
|
|
dependencies: [{
|
|
critical: true
|
|
}]
|
|
}, spy);
|
|
|
|
should(spy.called).be.exactly(true);
|
|
});
|
|
|
|
it("default call where regex is correct and using function as newContent Resource", () => {
|
|
let obj = buildPluginWithParams(/selector/, (result) => {
|
|
result.resource = "imadifferentselector";
|
|
}, true, /filter/);
|
|
|
|
let x = (nothing, result) => {
|
|
result.resource.should.containEql("selector");
|
|
result.resource.should.containEql("imadifferentselector");
|
|
};
|
|
|
|
let spy = sinon.spy(x);
|
|
|
|
obj.afterResolve.handler({
|
|
resource: "selector",
|
|
dependencies: [{
|
|
critical: true
|
|
}]
|
|
}, spy);
|
|
|
|
should(spy.called).be.exactly(true);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
let buildPluginWithParams = (resourceRegExp, newContentResource, newContentRecursive, newContentRegExp) => {
|
|
let instance = new ContextReplacementPlugin(resourceRegExp, newContentResource, newContentRecursive, newContentRegExp);
|
|
|
|
let pluginEnvironment = new PluginEnvironment();
|
|
instance.apply(pluginEnvironment.getEnvironmentStub());
|
|
|
|
let contextModuleFactory = pluginEnvironment.getEventBindings()[0];
|
|
pluginEnvironment.getEventBindings().length.should.be.exactly(1);
|
|
|
|
let contextModuleFactoryPluginEnv = new PluginEnvironment();
|
|
|
|
contextModuleFactory.handler(contextModuleFactoryPluginEnv.getEnvironmentStub());
|
|
|
|
let contextModuleFactoryEventBindings = contextModuleFactoryPluginEnv.getEventBindings();
|
|
contextModuleFactoryPluginEnv.getEventBindings().length.should.be.exactly(2);
|
|
|
|
let beforeResolve = contextModuleFactoryEventBindings[0];
|
|
let afterResolve = contextModuleFactoryEventBindings[1];
|
|
|
|
return {
|
|
contextModuleFactory,
|
|
beforeResolve,
|
|
afterResolve
|
|
};
|
|
};
|