Skip to content

Commit b061e27

Browse files
authored
Merge pull request webpack#4203 from alistairjcbrown/add-contextdependencytemplateasid-tests
Add tests for ContextDependencyTemplateAsId
2 parents 9cbc385 + 962c758 commit b061e27

1 file changed

Lines changed: 140 additions & 0 deletions

File tree

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
"use strict";
2+
3+
const _ = require("lodash");
4+
const should = require("should");
5+
const sinon = require("sinon");
6+
const ContextDependencyTemplateAsId = require("../lib/dependencies/ContextDependencyTemplateAsId");
7+
8+
const requestShortenerMock = {
9+
shorten: (request) => `shortened ${request}`
10+
};
11+
12+
describe("ContextDependencyTemplateAsId", () => {
13+
let env;
14+
15+
const applyContextDependencyTemplateAsId = function() {
16+
const contextDependencyTemplateAsId = new ContextDependencyTemplateAsId();
17+
const args = [].slice.call(arguments).concat(requestShortenerMock);
18+
contextDependencyTemplateAsId.apply.apply(contextDependencyTemplateAsId, args);
19+
};
20+
21+
beforeEach(() => {
22+
env = {
23+
source: {
24+
replace: sinon.stub()
25+
},
26+
outputOptions: {
27+
pathinfo: true
28+
},
29+
module: {
30+
id: "123",
31+
dependencies: [
32+
"myModuleDependency"
33+
]
34+
},
35+
baseDependency: {
36+
range: [1, 25],
37+
request: "myModule"
38+
}
39+
};
40+
});
41+
42+
it("has apply function", () => {
43+
(new ContextDependencyTemplateAsId()).apply.should.be.a.Function();
44+
});
45+
46+
describe("when applied", () => {
47+
describe("with module missing depedencies", () => {
48+
beforeEach(() => {
49+
applyContextDependencyTemplateAsId(env.baseDependency, env.source, env.outputOptions);
50+
});
51+
52+
it("replaces source with missing module error", () => {
53+
env.source.replace.callCount.should.be.exactly(1);
54+
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; }())');
55+
});
56+
});
57+
58+
describe("with module which does not have a value range", () => {
59+
beforeEach(() => {
60+
env.dependency = _.extend(env.baseDependency, {
61+
prepend: "prepend value",
62+
module: env.module
63+
});
64+
});
65+
66+
describe("and path info true", function() {
67+
beforeEach(function() {
68+
env.outputOptions.pathinfo = true;
69+
applyContextDependencyTemplateAsId(env.dependency, env.source, env.outputOptions);
70+
});
71+
72+
it("replaces source with webpack require with comment", () => {
73+
env.source.replace.callCount.should.be.exactly(1);
74+
sinon.assert.calledWith(env.source.replace, 1, 24, '__webpack_require__(/*! shortened myModule */ "123").resolve');
75+
});
76+
});
77+
78+
describe("and path info false", function() {
79+
beforeEach(function() {
80+
env.outputOptions.pathinfo = false;
81+
applyContextDependencyTemplateAsId(env.dependency, env.source, env.outputOptions);
82+
});
83+
84+
it("replaces source with webpack require without comment", () => {
85+
env.source.replace.callCount.should.be.exactly(1);
86+
sinon.assert.calledWith(env.source.replace, 1, 24, '__webpack_require__("123").resolve');
87+
});
88+
});
89+
});
90+
91+
describe("with module which has a value range", () => {
92+
describe("with no replacements", () => {
93+
beforeEach(() => {
94+
const dependency = _.extend(env.baseDependency, {
95+
valueRange: [8, 18],
96+
prepend: "prepend value",
97+
module: env.module
98+
});
99+
100+
applyContextDependencyTemplateAsId(dependency, env.source, env.outputOptions);
101+
});
102+
103+
it("replaces source with webpack require and wraps value", () => {
104+
env.source.replace.callCount.should.be.exactly(2);
105+
sinon.assert.calledWith(env.source.replace, 18, 24, ")");
106+
sinon.assert.calledWith(env.source.replace, 1, 7, '__webpack_require__(/*! shortened myModule */ "123").resolve("prepend value"');
107+
});
108+
});
109+
110+
describe("with replacements", () => {
111+
beforeEach(() => {
112+
const dependency = _.extend(env.baseDependency, {
113+
valueRange: [8, 18],
114+
replaces: [{
115+
value: "foo",
116+
range: [9, 11]
117+
},
118+
{
119+
value: "bar",
120+
range: [13, 15]
121+
}
122+
],
123+
prepend: "prepend value",
124+
module: env.module
125+
});
126+
127+
applyContextDependencyTemplateAsId(dependency, env.source, env.outputOptions);
128+
});
129+
130+
it("replaces source with webpack require, wraps value and make replacements", () => {
131+
env.source.replace.callCount.should.be.exactly(4);
132+
sinon.assert.calledWith(env.source.replace, 9, 10, "foo");
133+
sinon.assert.calledWith(env.source.replace, 13, 14, "bar");
134+
sinon.assert.calledWith(env.source.replace, 18, 24, ")");
135+
sinon.assert.calledWith(env.source.replace, 1, 7, '__webpack_require__(/*! shortened myModule */ "123").resolve("prepend value"');
136+
});
137+
});
138+
});
139+
});
140+
});

0 commit comments

Comments
 (0)