Files
NativeScript/packages/webpack/bundle-config-loader.spec.ts

115 lines
3.3 KiB
TypeScript

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
'./tests/example.js': false, // do not include files from tests folder
'./tests/component1/model1/file1.js': false, // do not include files from tests folder
'./components/tests/example.js': true,
};
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___');
});
});