@nstudio/angular
Version:
Angular Plugin for xplat
124 lines (123 loc) • 8.33 kB
JavaScript
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.`);
}));
});
;