forked from webpack/webpack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathContextDependencyTemplateAsId.unittest.js
140 lines (121 loc) · 4.28 KB
/
ContextDependencyTemplateAsId.unittest.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
"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"');
});
});
});
});
});