mirror of https://github.com/webpack/webpack.git
141 lines
4.3 KiB
JavaScript
141 lines
4.3 KiB
JavaScript
"use strict";
|
|
|
|
const _ = require("lodash");
|
|
const should = require("should");
|
|
const sinon = require("sinon");
|
|
const ContextDependencyTemplateAsId = require("../lib/dependencies/ContextDependencyTemplateAsId");
|
|
|
|
const requestShortenerMock = {
|
|
shorten: (request) => `shortened ${request}`
|
|
};
|
|
|
|
describe("ContextDependencyTemplateAsId", () => {
|
|
let env;
|
|
|
|
const applyContextDependencyTemplateAsId = function() {
|
|
const contextDependencyTemplateAsId = new ContextDependencyTemplateAsId();
|
|
const args = [].slice.call(arguments).concat(requestShortenerMock);
|
|
contextDependencyTemplateAsId.apply.apply(contextDependencyTemplateAsId, args);
|
|
};
|
|
|
|
beforeEach(() => {
|
|
env = {
|
|
source: {
|
|
replace: sinon.stub()
|
|
},
|
|
outputOptions: {
|
|
pathinfo: true
|
|
},
|
|
module: {
|
|
id: "123",
|
|
dependencies: [
|
|
"myModuleDependency"
|
|
]
|
|
},
|
|
baseDependency: {
|
|
range: [1, 25],
|
|
request: "myModule"
|
|
}
|
|
};
|
|
});
|
|
|
|
it("has apply function", () => {
|
|
(new ContextDependencyTemplateAsId()).apply.should.be.a.Function();
|
|
});
|
|
|
|
describe("when applied", () => {
|
|
describe("with module missing depedencies", () => {
|
|
beforeEach(() => {
|
|
applyContextDependencyTemplateAsId(env.baseDependency, env.source, env.outputOptions);
|
|
});
|
|
|
|
it("replaces source with missing module error", () => {
|
|
env.source.replace.callCount.should.be.exactly(1);
|
|
sinon.assert.calledWith(env.source.replace, 1, 24, '!(function webpackMissingModule() { var e = new Error("Cannot find module \\"myModule\\""); e.code = \'MODULE_NOT_FOUND\'; throw e; }())');
|
|
});
|
|
});
|
|
|
|
describe("with module which does not have a value range", () => {
|
|
beforeEach(() => {
|
|
env.dependency = _.extend(env.baseDependency, {
|
|
prepend: "prepend value",
|
|
module: env.module
|
|
});
|
|
});
|
|
|
|
describe("and path info true", function() {
|
|
beforeEach(function() {
|
|
env.outputOptions.pathinfo = true;
|
|
applyContextDependencyTemplateAsId(env.dependency, env.source, env.outputOptions);
|
|
});
|
|
|
|
it("replaces source with webpack require with comment", () => {
|
|
env.source.replace.callCount.should.be.exactly(1);
|
|
sinon.assert.calledWith(env.source.replace, 1, 24, '__webpack_require__(/*! shortened myModule */ "123").resolve');
|
|
});
|
|
});
|
|
|
|
describe("and path info false", function() {
|
|
beforeEach(function() {
|
|
env.outputOptions.pathinfo = false;
|
|
applyContextDependencyTemplateAsId(env.dependency, env.source, env.outputOptions);
|
|
});
|
|
|
|
it("replaces source with webpack require without comment", () => {
|
|
env.source.replace.callCount.should.be.exactly(1);
|
|
sinon.assert.calledWith(env.source.replace, 1, 24, '__webpack_require__("123").resolve');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("with module which has a value range", () => {
|
|
describe("with no replacements", () => {
|
|
beforeEach(() => {
|
|
const dependency = _.extend(env.baseDependency, {
|
|
valueRange: [8, 18],
|
|
prepend: "prepend value",
|
|
module: env.module
|
|
});
|
|
|
|
applyContextDependencyTemplateAsId(dependency, env.source, env.outputOptions);
|
|
});
|
|
|
|
it("replaces source with webpack require and wraps value", () => {
|
|
env.source.replace.callCount.should.be.exactly(2);
|
|
sinon.assert.calledWith(env.source.replace, 18, 24, ")");
|
|
sinon.assert.calledWith(env.source.replace, 1, 7, '__webpack_require__(/*! shortened myModule */ "123").resolve("prepend value"');
|
|
});
|
|
});
|
|
|
|
describe("with replacements", () => {
|
|
beforeEach(() => {
|
|
const dependency = _.extend(env.baseDependency, {
|
|
valueRange: [8, 18],
|
|
replaces: [{
|
|
value: "foo",
|
|
range: [9, 11]
|
|
},
|
|
{
|
|
value: "bar",
|
|
range: [13, 15]
|
|
}
|
|
],
|
|
prepend: "prepend value",
|
|
module: env.module
|
|
});
|
|
|
|
applyContextDependencyTemplateAsId(dependency, env.source, env.outputOptions);
|
|
});
|
|
|
|
it("replaces source with webpack require, wraps value and make replacements", () => {
|
|
env.source.replace.callCount.should.be.exactly(4);
|
|
sinon.assert.calledWith(env.source.replace, 9, 10, "foo");
|
|
sinon.assert.calledWith(env.source.replace, 13, 14, "bar");
|
|
sinon.assert.calledWith(env.source.replace, 18, 24, ")");
|
|
sinon.assert.calledWith(env.source.replace, 1, 7, '__webpack_require__(/*! shortened myModule */ "123").resolve("prepend value"');
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|