forked from NativeScript/nativescript-dev-webpack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbundle-config-loader.spec.ts
114 lines (93 loc) · 3.53 KB
/
bundle-config-loader.spec.ts
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
import bundleConfigLoader from "./bundle-config-loader";
const defaultLoaderOptions = {
angular: false,
loadCss: true,
unitTesting: false,
};
const defaultTestFiles = {
"./app-root.xml": true,
"./app-root.land.xml": true,
"./app.ts": true,
"./app.css": true,
"./app.android.scss": true,
"./app.ios.scss": true,
"./app.land.css": true,
"./components/my-component.css": true,
"./components/my-component.land.ts": true,
"./components/my-component.ts": true,
"./components/my-component.land.xml": true,
"./components/my-component.xml": true,
"./components/my-component.land.css": true,
"./main/main-page.land.css": true,
"./main/main-page.css": true,
"./main/main-page.ts": true,
"./main/main-page.land.xml": true,
"./main/main-page.xml": true,
"./main/main-page.land.ts": true,
"./main/main-page-vm.ts": true,
"./app_component.scss": true,
"./App_Resources123/some-file.xml": true,
"./MyApp_Resources/some-file.xml": true,
"./App_Resources_Nobody_Names_Folders_Like_That_Roska/some-file.xml": true,
"./package.json": false, // do not include package.json files
"./app.d.ts": false, // do not include ts definitions
"./_app-common.scss": false, // do not include scss partial files
"./_app-variables.scss": false, // do not include scss partial files
"./App_Resources/Android/src/main/res/values/colors.xml": false, // do not include App_Resources
"./App_Resources/Android/src/main/AndroidManifest.xml": false, // do not include App_Resources
};
const loaderOptionsWithIgnore = {
angular: false,
loadCss: true,
unitTesting: false,
ignoredFiles: ["./application", "./activity"]
};
const ignoredTestFiles = {
"./application.ts": false,
"./activity.ts": false,
}
function getRequireContextRegex(source: string): RegExp {
const requireContextStr = `require.context("~/", true, `;
expect(source).toContain(requireContextStr);
const start = source.indexOf(requireContextStr) + requireContextStr.length;
const end = source.indexOf(");\n", start);
const regexStr = source.substring(start, end);
const regex: RegExp = eval(regexStr);
expect(regex instanceof RegExp).toBeTruthy();
return regex;
}
function assertTestFilesAreMatched(testFiles: { [key: string]: boolean }, regex: RegExp) {
for (let fileName in testFiles) {
if (defaultTestFiles[fileName]) {
expect(fileName).toMatch(regex);
}
else {
expect(fileName).not.toMatch(regex);
}
}
}
describe("BundleConfigLoader should create require.context", () => {
it("default case", (done) => {
const loaderContext = {
callback: (error, source: string, map) => {
const regex = getRequireContextRegex(source);
assertTestFilesAreMatched(defaultTestFiles, regex);
done();
},
query: defaultLoaderOptions
}
bundleConfigLoader.call(loaderContext, " ___CODE___");
})
it("with ignored files", (done) => {
const loaderContext = {
callback: (error, source: string, map) => {
const regex = getRequireContextRegex(source);
const testFiles = { ...defaultTestFiles, ...ignoredTestFiles };
assertTestFilesAreMatched(testFiles, regex);
done();
},
query: loaderOptionsWithIgnore
}
bundleConfigLoader.call(loaderContext, " ___CODE___");
})
});