Skip to content

Commit 13849f7

Browse files
chore: restore tests
1 parent b794831 commit 13849f7

File tree

201 files changed

+2753
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

201 files changed

+2753
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = [[/prefix\/deep\/c/]];
Lines changed: 264 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
let warnings = [];
2+
let oldWarn;
3+
4+
beforeEach((done) => {
5+
oldWarn = console.warn;
6+
console.warn = (m) => warnings.push(m);
7+
done();
8+
});
9+
10+
afterEach((done) => {
11+
expectWarning();
12+
console.warn = oldWarn;
13+
done();
14+
});
15+
16+
const expectWarning = (regexp) => {
17+
if (!regexp) {
18+
expect(warnings).toEqual([]);
19+
} else {
20+
warnings.forEach((warning) => {
21+
expect(regexp.test(warning)).toEqual(true);
22+
});
23+
}
24+
warnings.length = 0;
25+
};
26+
27+
it('should load the shared modules with ignored warnings', async () => {
28+
__webpack_share_scopes__['test-scope'] = {
29+
package: {
30+
0: {
31+
get: () => () => 'shared package',
32+
},
33+
},
34+
'@scoped/package': {
35+
0: {
36+
get: () => Promise.resolve(() => 'shared @scoped/package'),
37+
},
38+
},
39+
'prefix/a': {
40+
0: {
41+
get: () => () => 'shared prefix/a',
42+
},
43+
},
44+
'prefix/deep/c': {
45+
0: {
46+
get: () => () => 'shared prefix/deep/c',
47+
},
48+
},
49+
'./relative1': {
50+
0: {
51+
get: () => () => 'shared relative1',
52+
},
53+
},
54+
};
55+
__webpack_share_scopes__['other-scope'] = {
56+
'advanced/123': {
57+
'1.2.beta.1': {
58+
get: () => () => '1.2.beta.1',
59+
},
60+
'1.2.3': {
61+
get: () => () => '123',
62+
},
63+
},
64+
'advanced/error1': {
65+
'1.2.3': {
66+
get: () => {
67+
throw new Error('error1');
68+
},
69+
},
70+
},
71+
'advanced/error2': {
72+
'1.2.3': {
73+
get: () =>
74+
Promise.resolve().then(() => {
75+
throw new Error('error2');
76+
}),
77+
},
78+
},
79+
'advanced/error3': {
80+
'1.2.3': {
81+
get: () =>
82+
Promise.resolve().then(() => () => {
83+
throw new Error('error3');
84+
}),
85+
},
86+
},
87+
'advanced/error4': {
88+
'1.0.0': {
89+
get: () => () => 'wrong',
90+
},
91+
},
92+
};
93+
{
94+
const result = await import('package');
95+
expect(result.default).toBe('shared package');
96+
}
97+
{
98+
const result = await import('@scoped/package');
99+
expect(result.default).toBe('shared @scoped/package');
100+
}
101+
{
102+
const result = await import('prefix/a');
103+
expect(result.default).toBe('shared prefix/a');
104+
}
105+
{
106+
const result = await import('prefix/deep/b');
107+
expect(result.default).toBe('b');
108+
}
109+
{
110+
const result = await import('prefix/deep/c');
111+
expect(result.default).toBe('shared prefix/deep/c');
112+
}
113+
{
114+
const result = await import('./relative1');
115+
expect(result.default).toBe('shared relative1');
116+
}
117+
{
118+
const result = await import('./relative2');
119+
expect(result.default).toBe('relative2');
120+
}
121+
{
122+
const result = await import('advanced/123');
123+
expect(result.default).toBe('123');
124+
}
125+
{
126+
await expect(() => import('advanced/error0')).rejects.toEqual(
127+
expect.objectContaining({
128+
message: expect.stringContaining('advanced/error0'),
129+
}),
130+
);
131+
}
132+
{
133+
await expect(() => import('advanced/error1')).rejects.toEqual(
134+
expect.objectContaining({
135+
message: expect.stringContaining('error1'),
136+
}),
137+
);
138+
}
139+
{
140+
await expect(() => import('advanced/error2')).rejects.toEqual(
141+
expect.objectContaining({
142+
message: expect.stringContaining('error2'),
143+
}),
144+
);
145+
}
146+
{
147+
await expect(() => import('advanced/error3')).rejects.toEqual(
148+
expect.objectContaining({
149+
message: expect.stringContaining('error3'),
150+
}),
151+
);
152+
}
153+
{
154+
await expect(() => import('advanced/error4')).rejects.toEqual(
155+
expect.objectContaining({
156+
message: expect.stringContaining('advanced/error4'),
157+
}),
158+
);
159+
}
160+
});
161+
162+
it('should handle version matching correctly in strict and singleton mode', async () => {
163+
__webpack_share_scopes__['default'] = {
164+
strict0: {
165+
'1.1.1': {
166+
get: () => () => 'shared strict0',
167+
},
168+
},
169+
strict1: {
170+
'1.1.1': {
171+
get: () => () => 'shared strict1',
172+
},
173+
},
174+
strict2: {
175+
'1.1.1': {
176+
get: () => () => 'shared strict2',
177+
},
178+
},
179+
strict3: {
180+
'1.1.1': {
181+
get: () => () => 'shared strict3',
182+
},
183+
},
184+
strict4: {
185+
'1.1.1': {
186+
get: () => () => 'shared strict4',
187+
},
188+
},
189+
strict5: {
190+
'1.1.1': {
191+
get: () => () => 'shared strict5',
192+
},
193+
},
194+
singleton: {
195+
'1.1.1': {
196+
get: () => () => 'shared singleton',
197+
from: 'container-a',
198+
},
199+
},
200+
singletonWithoutVersion: {
201+
'1.0.0': {
202+
get: () => () => 'shared singleton v1.0.0',
203+
loaded: true,
204+
},
205+
'2.0.0': {
206+
get: () => () => 'shared singleton v2.0.0',
207+
},
208+
},
209+
};
210+
{
211+
const result = await import('strict0');
212+
expect(result.default).toBe('shared strict0');
213+
expectWarning();
214+
}
215+
{
216+
const result = await import('strict1');
217+
expect(result.default).toBe('strict');
218+
}
219+
{
220+
const result = await import('strict2');
221+
expect(result.default).toBe('strict');
222+
}
223+
{
224+
const result = await import('strict3');
225+
expect(result.default).toBe('strict');
226+
}
227+
{
228+
const result = await import('strict4');
229+
expect(result.default).toBe('strict');
230+
}
231+
{
232+
await expect(() => import('strict5')).rejects.toEqual(
233+
expect.objectContaining({
234+
message: expect.stringContaining('strict5'),
235+
}),
236+
);
237+
expectWarning();
238+
}
239+
{
240+
const result = await import('singleton');
241+
expect(result.default).toBe('shared singleton');
242+
expectWarning(
243+
/Version 1\.1\.1 from container-a of shared singleton module singleton/,
244+
);
245+
}
246+
});
247+
248+
it('should not instantiate multiple singletons even if a higher version exists', async () => {
249+
__webpack_share_scopes__['default'] = {
250+
singletonWithoutVersion: {
251+
'1.0.0': {
252+
get: () => () => 'shared singleton v1.0.0',
253+
loaded: true,
254+
},
255+
'2.0.0': {
256+
get: () => () => 'shared singleton v2.0.0',
257+
},
258+
},
259+
};
260+
{
261+
const result = await import('singletonWithoutVersion');
262+
expect(result.default).toBe('shared singleton v1.0.0');
263+
}
264+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"dependencies": {
3+
"package": "*",
4+
"@scoped/package": "*",
5+
"prefix": "*"
6+
}
7+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = 'relative1';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = 'relative2';
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// eslint-disable-next-line node/no-unpublished-require
2+
const { ConsumeSharedPlugin } = require('../../../../dist/src');
3+
4+
/** @type {import("../../../../").Configuration} */
5+
module.exports = {
6+
mode: 'development',
7+
output: {
8+
ignoreBrowserWarnings: true,
9+
},
10+
plugins: [
11+
new ConsumeSharedPlugin({
12+
shareScope: 'test-scope',
13+
consumes: [
14+
'package',
15+
'@scoped/package',
16+
'prefix/',
17+
'./relative1',
18+
'./relative2',
19+
{
20+
'advanced/': {
21+
import: false,
22+
requiredVersion: '^1.2.3',
23+
shareScope: 'other-scope',
24+
strictVersion: true,
25+
},
26+
},
27+
],
28+
}),
29+
new ConsumeSharedPlugin({
30+
consumes: {
31+
strict0: {
32+
requiredVersion: '^1.0.0',
33+
strictVersion: true,
34+
},
35+
strict1: {
36+
requiredVersion: '>=1.2.0',
37+
strictVersion: true,
38+
},
39+
strict2: {
40+
requiredVersion: '1.1.0',
41+
strictVersion: true,
42+
},
43+
strict3: {
44+
requiredVersion: '~1.0.0',
45+
strictVersion: true,
46+
},
47+
strict4: {
48+
requiredVersion: '^2.2.3',
49+
strictVersion: true,
50+
},
51+
strict5: {
52+
import: false,
53+
requiredVersion: 'alpha',
54+
strictVersion: true,
55+
},
56+
singleton: {
57+
requiredVersion: '1.1.0',
58+
singleton: true,
59+
strictVersion: false,
60+
},
61+
singletonWithoutVersion: {
62+
requiredVersion: false,
63+
singleton: true,
64+
},
65+
},
66+
}),
67+
],
68+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = [[/prefix\/deep\/c/]];

0 commit comments

Comments
 (0)