-
Notifications
You must be signed in to change notification settings - Fork 193
/
Copy pathfullSpecified.test.js
128 lines (121 loc) · 3.51 KB
/
fullSpecified.test.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
const { Volume } = require("memfs");
const { ResolverFactory } = require("../");
describe("fullSpecified", function () {
const fileSystem = Volume.fromJSON(
{
"/a/node_modules/package1/index.js": "",
"/a/node_modules/package1/file.js": "",
"/a/node_modules/package2/package.json": JSON.stringify({
main: "a"
}),
"/a/node_modules/package2/a.js": "",
"/a/node_modules/package3/package.json": JSON.stringify({
main: "dir"
}),
"/a/node_modules/package3/dir/index.js": "",
"/a/node_modules/package4/package.json": JSON.stringify({
browser: {
"./a.js": "./b"
}
}),
"/a/node_modules/package4/a.js": "",
"/a/node_modules/package4/b.js": "",
"/a/abc.js": "",
"/a/dir/index.js": "",
"/a/index.js": ""
},
"/"
);
const resolver = ResolverFactory.createResolver({
alias: {
alias1: "/a/abc",
alias2: "/a/"
},
aliasFields: ["browser"],
fullySpecified: true,
useSyncFileSystemCalls: true,
// @ts-ignore
fileSystem: fileSystem
});
const contextResolver = ResolverFactory.createResolver({
alias: {
alias1: "/a/abc",
alias2: "/a/"
},
aliasFields: ["browser"],
fullySpecified: true,
resolveToContext: true,
useSyncFileSystemCalls: true,
// @ts-ignore
fileSystem: fileSystem
});
const failingResolves = {
"no extensions": "./abc",
"no extensions (absolute)": "/a/abc",
"no extensions in packages": "package1/file",
"no directories": ".",
"no directories 2": "./",
"no directories in packages": "package3/dir",
"no extensions in packages 2": "package3/a"
};
const pkg = "/a/node_modules/package";
const successfulResolves = {
"fully relative": ["./abc.js", "/a/abc.js"],
"fully absolute": ["/a/abc.js", "/a/abc.js"],
"fully relative in package": ["package1/file.js", `${pkg}1/file.js`],
"extensions in mainFiles": ["package1", `${pkg}1/index.js`],
"extensions in mainFields": ["package2", `${pkg}2/a.js`],
"extensions in alias": ["alias1", `/a/abc.js`],
"directories in alias": ["alias2", `/a/index.js`],
"directories in packages": ["package3", `${pkg}3/dir/index.js`],
"extensions in aliasFields": ["package4/a.js", `${pkg}4/b.js`]
};
for (const key of Object.keys(failingResolves)) {
const request = failingResolves[key];
it(`should fail resolving ${key}`, () => {
expect(() => {
resolver.resolveSync({}, "/a", request);
}).toThrowError();
});
}
for (const key of Object.keys(successfulResolves)) {
const [request, expected] = successfulResolves[key];
it(`should resolve ${key} successfully`, () => {
try {
expect(resolver.resolveSync({}, "/a", request)).toEqual(expected);
} catch (e) {
e.message += `\n${e.details}`;
throw e;
}
});
}
const successfulContextResolves = {
"current folder": [".", "/a"],
"current folder 2": ["./", "/a"],
"relative directory": ["./dir", "/a/dir"],
"relative directory 2": ["./dir/", "/a/dir"],
"relative directory with query and fragment": [
"./dir?123#456",
"/a/dir?123#456"
],
"relative directory with query and fragment 2": [
"./dir/?123#456",
"/a/dir?123#456"
],
"absolute directory": ["/a/dir", "/a/dir"],
"directory in package": ["package3/dir", `${pkg}3/dir`]
};
for (const key of Object.keys(successfulContextResolves)) {
const [request, expected] = successfulContextResolves[key];
it(`should resolve ${key} successfully to an context`, () => {
try {
expect(contextResolver.resolveSync({}, "/a", request)).toEqual(
expected
);
} catch (e) {
e.message += `\n${e.details}`;
throw e;
}
});
}
});