UNPKG

@nstudio/angular

Version:

Angular Plugin for xplat

124 lines (123 loc) 8.33 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const schematics_1 = require("@angular-devkit/schematics"); const xplat_utils_1 = require("@nstudio/xplat-utils"); const testing_1 = require("@nstudio/xplat/testing"); const testing_2 = require("../../utils/testing"); (0, xplat_utils_1.setTest)(); describe('xplat schematic', () => { let appTree; const defaultOptions = { npmScope: 'testing', prefix: 'ft', // foo test }; beforeEach(() => { appTree = schematics_1.Tree.empty(); appTree = (0, testing_1.createEmptyWorkspace)(appTree, 'angular'); }); it('should create default xplat support for web,nativescript + libs + testing support', () => __awaiter(void 0, void 0, void 0, function* () { const options = Object.assign({}, defaultOptions); options.platforms = 'web,nativescript'; const tree = yield (0, testing_2.runSchematic)('xplat', options, appTree); const files = tree.files; // console.log(files); expect(files.indexOf('/libs/xplat/core/src/lib/index.ts')).toBeGreaterThanOrEqual(0); expect(files.indexOf('/libs/xplat/features/src/lib/index.ts')).toBeGreaterThanOrEqual(0); expect(files.indexOf('/libs/xplat/scss/src/package.json')).toBeGreaterThanOrEqual(0); expect(files.indexOf('/libs/xplat/web/core/src/lib/index.ts')).toBeGreaterThanOrEqual(0); expect(files.indexOf('/libs/xplat/nativescript/core/src/lib/index.ts')).toBeGreaterThanOrEqual(0); let filePath = '/tsconfig.base.json'; let fileContent = (0, xplat_utils_1.jsonParse)((0, testing_1.getFileContent)(tree, filePath)); // console.log(fileContent); expect(fileContent.compilerOptions.paths['@testing/xplat/environments']).toBeTruthy(); })); it('should create default xplat support for web,nativescript', () => __awaiter(void 0, void 0, void 0, function* () { const options = Object.assign({}, defaultOptions); options.platforms = 'web,nativescript'; const tree = yield (0, testing_2.runSchematic)('xplat', options, appTree); const files = tree.files; expect(files.indexOf('/libs/xplat/web/features/src/lib/items/items.module.ts')).toBe(-1); expect(files.indexOf('/libs/xplat/web/core/src/lib/index.ts')).toBeGreaterThanOrEqual(0); expect(files.indexOf('/libs/xplat/nativescript/core/src/lib/index.ts')).toBeGreaterThanOrEqual(0); expect(files.indexOf('/libs/xplat/nativescript/features/src/lib/items/items.module.ts')).toBe(-1); })); xit('should create default xplat support for ionic which should always include web as well', () => __awaiter(void 0, void 0, void 0, function* () { const options = Object.assign({}, defaultOptions); options.platforms = 'ionic'; options.framework = 'angular'; const tree = yield (0, testing_2.runSchematic)('xplat', options, appTree); const files = tree.files; expect(files.indexOf('/xplat/web/index.ts')).toBeGreaterThanOrEqual(0); expect(files.indexOf('/xplat/ionic/index.ts')).toBeGreaterThanOrEqual(0); expect(files.indexOf('/xplat/nativescript/index.ts')).toBeGreaterThanOrEqual(-1); const packagePath = '/package.json'; const packageFile = (0, xplat_utils_1.jsonParse)((0, testing_1.getFileContent)(tree, packagePath)); const hasScss = packageFile.dependencies[`@testing/scss`]; expect(hasScss).not.toBeUndefined(); const hasWebScss = packageFile.dependencies[`@testing/web-scss`]; expect(hasWebScss).not.toBeUndefined(); // should not include these root packages const hasNativeScript = packageFile.dependencies[`nativescript-angular`]; expect(hasNativeScript).toBeUndefined(); })); it('should create default xplat support for electron which should always include web as well', () => __awaiter(void 0, void 0, void 0, function* () { const options = Object.assign({}, defaultOptions); options.platforms = 'electron'; const tree = yield (0, testing_2.runSchematic)('xplat', options, appTree); const files = tree.files; expect(files.indexOf('/libs/xplat/web/core/src/lib/index.ts')).toBeGreaterThanOrEqual(0); expect(files.indexOf('/libs/xplat/electron/core/src/lib/index.ts')).toBeGreaterThanOrEqual(0); expect(files.indexOf('/libs/xplat/nativescript/core/src/lib/index.ts')).toBeGreaterThanOrEqual(-1); const packagePath = '/package.json'; const packageFile = (0, xplat_utils_1.jsonParse)((0, testing_1.getFileContent)(tree, packagePath)); const hasScss = packageFile.dependencies[`@testing/xplat-scss`]; expect(hasScss).not.toBeUndefined(); // const hasWebScss = packageFile.dependencies[`@testing/xplat-web-scss`]; // expect(hasWebScss).not.toBeUndefined(); // should not include these root packages const hasNativeScript = packageFile.dependencies[`nativescript-angular`]; expect(hasNativeScript).toBeUndefined(); const hasElectron = packageFile.devDependencies[`electron`]; expect(hasElectron).toBeDefined(); })); it('should create additional xplat support when generated with different platforms', () => __awaiter(void 0, void 0, void 0, function* () { const options = Object.assign({}, defaultOptions); options.platforms = 'ionic,web'; options.framework = 'angular'; let tree = yield (0, testing_2.runSchematic)('xplat', options, appTree); // let files = tree.files; expect(tree.exists('/libs/xplat/web/core/src/lib/index.ts')).toBeTruthy(); expect(tree.exists('/libs/xplat/ionic/core/src/lib/index.ts')).toBeTruthy(); expect(tree.exists('/libs/xplat/nativescript/core/src/lib/index.ts')).toBeFalsy(); options.platforms = 'nativescript'; // let packageFile = jsonParse(getFileContent(tree, 'package.json')); // console.log('packageFile.xplat:', packageFile.xplat); tree = yield (0, testing_2.runSchematic)('xplat', options, tree); // packageFile = jsonParse(getFileContent(tree, 'package.json')); // console.log('after 2nd xplat run packageFile.xplat:', packageFile.xplat); // files = tree.files; // console.log('files:', files); // should be unchanged expect(tree.exists('/libs/xplat/web/core/src/lib/index.ts')).toBeTruthy(); expect(tree.exists('/libs/xplat/ionic/core/src/lib/index.ts')).toBeTruthy(); expect(tree.exists('/libs/xplat/nativescript/core/src/lib/index.ts')).toBeTruthy(); })); it('should NOT create xplat unless platforms are specified', () => __awaiter(void 0, void 0, void 0, function* () { const options = Object.assign({}, defaultOptions); yield expect((0, testing_2.runSchematic)('xplat', options, appTree)).rejects.toThrow(`You must specify which platforms you wish to generate support for. For example: nx g @nstudio/xplat:init --prefix=foo --platforms=${xplat_utils_1.supportedPlatforms.join(',')}`); })); it('should NOT create unsupported xplat option and throw', () => __awaiter(void 0, void 0, void 0, function* () { const options = Object.assign({}, defaultOptions); options.platforms = 'desktop'; yield expect((0, testing_2.runSchematic)('xplat', options, appTree)).rejects.toThrow(`desktop is currently not a supported platform. Supported at the moment: ${xplat_utils_1.supportedPlatforms}. Please request support for this platform if you'd like and/or submit a PR which we would greatly appreciate.`); })); });