| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var path_1 = require("path");
- var fs = require("fs");
- var Constants = require("../util/constants");
- var helpers = require("../util/helpers");
- var globUtils = require("../util/glob-util");
- var util = require("./util");
- var GeneratorConstants = require("./constants");
- describe('util', function () {
- describe('hydrateRequest', function () {
- it('should take a component request and return a hydrated component request', function () {
- // arrange
- var baseDir = path_1.join(process.cwd(), 'someDir', 'project');
- var componentsDir = path_1.join(baseDir, 'src', 'components');
- var context = {
- componentsDir: componentsDir
- };
- var request = {
- type: Constants.COMPONENT,
- name: 'settings view',
- includeSpec: true,
- includeNgModule: true
- };
- var templateDir = path_1.join(baseDir, 'node_modules', 'ionic-angular', 'templates');
- spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue(templateDir);
- // act
- var hydratedRequest = util.hydrateRequest(context, request);
- // assert
- expect(hydratedRequest).toEqual({
- className: 'SettingsViewComponent',
- dirToRead: path_1.join(templateDir, 'component'),
- dirToWrite: path_1.join(componentsDir, 'settings-view'),
- fileName: 'settings-view',
- importStatement: 'import { IonicPage, NavController, NavParams } from \'ionic-angular\';',
- includeNgModule: true,
- includeSpec: true,
- ionicPage: '\n@IonicPage()',
- name: 'settings view',
- type: 'component'
- });
- expect(hydratedRequest.type).toEqual(Constants.COMPONENT);
- expect(hydratedRequest.name).toEqual(request.name);
- expect(hydratedRequest.includeNgModule).toBeTruthy();
- expect(hydratedRequest.includeSpec).toBeTruthy();
- expect(hydratedRequest.className).toEqual('SettingsViewComponent');
- expect(hydratedRequest.fileName).toEqual('settings-view');
- expect(hydratedRequest.dirToRead).toEqual(path_1.join(templateDir, Constants.COMPONENT));
- expect(hydratedRequest.dirToWrite).toEqual(path_1.join(componentsDir, hydratedRequest.fileName));
- });
- it('should take a page request and return a hydrated page request', function () {
- // arrange
- var baseDir = path_1.join(process.cwd(), 'someDir', 'project');
- var pagesDir = path_1.join(baseDir, 'src', 'pages');
- var context = {
- pagesDir: pagesDir
- };
- var request = {
- type: Constants.PAGE,
- name: 'settings view',
- includeSpec: true,
- includeNgModule: true
- };
- var templateDir = path_1.join(baseDir, 'node_modules', 'ionic-angular', 'templates');
- spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue(templateDir);
- // act
- var hydratedRequest = util.hydrateRequest(context, request);
- // assert
- expect(hydratedRequest).toEqual({
- className: 'SettingsViewPage',
- dirToRead: path_1.join(templateDir, 'page'),
- dirToWrite: path_1.join(pagesDir, 'settings-view'),
- fileName: 'settings-view',
- importStatement: 'import { IonicPage, NavController, NavParams } from \'ionic-angular\';',
- includeNgModule: true,
- includeSpec: true,
- ionicPage: '\n@IonicPage()',
- name: 'settings view',
- type: 'page'
- });
- expect(hydratedRequest.type).toEqual(Constants.PAGE);
- expect(hydratedRequest.name).toEqual(request.name);
- expect(hydratedRequest.includeNgModule).toBeTruthy();
- expect(hydratedRequest.includeSpec).toBeTruthy();
- expect(hydratedRequest.className).toEqual('SettingsViewPage');
- expect(hydratedRequest.fileName).toEqual('settings-view');
- expect(hydratedRequest.dirToRead).toEqual(path_1.join(templateDir, Constants.PAGE));
- expect(hydratedRequest.dirToWrite).toEqual(path_1.join(pagesDir, hydratedRequest.fileName));
- });
- it('should take a page with no module request and return a hydrated page request', function () {
- // arrange
- var baseDir = path_1.join(process.cwd(), 'someDir', 'project');
- var pagesDir = path_1.join(baseDir, 'src', 'pages');
- var context = {
- pagesDir: pagesDir
- };
- var includeNgModule = false;
- var request = {
- type: Constants.PAGE,
- name: 'about',
- includeSpec: true,
- includeNgModule: false
- };
- var templateDir = path_1.join(baseDir, 'node_modules', 'ionic-angular', 'templates');
- spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue(templateDir);
- // act
- var hydratedRequest = util.hydrateRequest(context, request);
- // assert
- expect(hydratedRequest).toEqual({
- className: 'AboutPage',
- dirToRead: path_1.join(templateDir, 'page'),
- dirToWrite: path_1.join(pagesDir, 'about'),
- fileName: 'about',
- importStatement: 'import { NavController, NavParams } from \'ionic-angular\';',
- includeNgModule: false,
- includeSpec: true,
- ionicPage: null,
- name: 'about',
- type: 'page'
- });
- expect(hydratedRequest.ionicPage).toEqual(null);
- expect(hydratedRequest.importStatement).toEqual('import { NavController, NavParams } from \'ionic-angular\';');
- expect(hydratedRequest.type).toEqual(Constants.PAGE);
- expect(hydratedRequest.name).toEqual(request.name);
- expect(hydratedRequest.includeNgModule).toBeFalsy();
- expect(hydratedRequest.includeSpec).toBeTruthy();
- expect(hydratedRequest.className).toEqual('AboutPage');
- expect(hydratedRequest.fileName).toEqual('about');
- expect(hydratedRequest.dirToRead).toEqual(path_1.join(templateDir, Constants.PAGE));
- expect(hydratedRequest.dirToWrite).toEqual(path_1.join(pagesDir, hydratedRequest.fileName));
- });
- });
- describe('hydrateTabRequest', function () {
- it('should take a lazy loaded page set the tab root to a string', function () {
- // arrange
- var baseDir = path_1.join(process.cwd(), 'someDir', 'project');
- var pagesDir = path_1.join(baseDir, 'src', 'pages');
- var templateDir = path_1.join(baseDir, 'node_modules', 'ionic-angular', 'templates');
- var context = { pagesDir: pagesDir };
- var request = {
- type: 'tabs',
- name: 'stooges',
- includeNgModule: true,
- tabs: [
- {
- includeNgModule: true,
- type: 'page',
- name: 'moe',
- className: 'MoePage',
- fileName: 'moe',
- dirToRead: path_1.join(templateDir, 'page'),
- dirToWrite: path_1.join(pagesDir, 'moe')
- }
- ]
- };
- spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue(templateDir);
- // act
- var hydatedTabRequest = util.hydrateTabRequest(context, request);
- // assert
- expect(hydatedTabRequest.tabVariables).toEqual(" moeRoot = 'MoePage'\n");
- });
- it('should take a page set the tab root to a component ref', function () {
- // arrange
- var baseDir = path_1.join(process.cwd(), 'someDir', 'project');
- var pagesDir = path_1.join(baseDir, 'src', 'pages');
- var templateDir = path_1.join(baseDir, 'node_modules', 'ionic-angular', 'templates');
- var context = { pagesDir: pagesDir };
- var request = {
- type: 'tabs',
- name: 'stooges',
- includeNgModule: false,
- tabs: [
- {
- includeNgModule: false,
- type: 'page',
- name: 'moe',
- className: 'MoePage',
- fileName: 'moe',
- dirToRead: path_1.join(templateDir, 'page'),
- dirToWrite: path_1.join(pagesDir, 'moe')
- }
- ]
- };
- spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue(templateDir);
- // act
- var hydatedTabRequest = util.hydrateTabRequest(context, request);
- // assert
- expect(hydatedTabRequest.tabVariables).toEqual(' moeRoot = MoePage\n');
- });
- });
- describe('readTemplates', function () {
- it('should get a map of templates and their content back', function () {
- // arrange
- var templateDir = '/Users/noone/project/node_modules/ionic-angular/templates/component';
- var knownValues = [
- 'html.tmpl',
- 'scss.tmpl',
- 'spec.ts.tmpl',
- 'ts.tmpl',
- 'module.tmpl'
- ];
- var fileContent = 'SomeContent';
- spyOn(fs, 'readdirSync').and.returnValue(knownValues);
- spyOn(helpers, helpers.readFileAsync.name).and.returnValue(Promise.resolve(fileContent));
- // act
- var promise = util.readTemplates(templateDir);
- // assert
- return promise.then(function (map) {
- expect(map.get(path_1.join(templateDir, knownValues[0]))).toEqual(fileContent);
- expect(map.get(path_1.join(templateDir, knownValues[1]))).toEqual(fileContent);
- expect(map.get(path_1.join(templateDir, knownValues[2]))).toEqual(fileContent);
- expect(map.get(path_1.join(templateDir, knownValues[3]))).toEqual(fileContent);
- expect(map.get(path_1.join(templateDir, knownValues[4]))).toEqual(fileContent);
- });
- });
- });
- describe('filterOutTemplates', function () {
- it('should preserve all templates', function () {
- var map = new Map();
- var templateDir = '/Users/noone/project/node_modules/ionic-angular/templates/component';
- var fileContent = 'SomeContent';
- var knownValues = [
- 'html.tmpl',
- 'scss.tmpl',
- 'spec.ts.tmpl',
- 'ts.tmpl',
- 'module.tmpl'
- ];
- map.set(path_1.join(templateDir, knownValues[0]), fileContent);
- map.set(path_1.join(templateDir, knownValues[1]), fileContent);
- map.set(path_1.join(templateDir, knownValues[2]), fileContent);
- map.set(path_1.join(templateDir, knownValues[3]), fileContent);
- map.set(path_1.join(templateDir, knownValues[4]), fileContent);
- var newMap = util.filterOutTemplates({ includeNgModule: true, includeSpec: true }, map);
- expect(newMap.size).toEqual(knownValues.length);
- });
- it('should remove spec', function () {
- var map = new Map();
- var templateDir = '/Users/noone/project/node_modules/ionic-angular/templates/component';
- var fileContent = 'SomeContent';
- var knownValues = [
- 'html.tmpl',
- 'scss.tmpl',
- 'spec.ts.tmpl',
- 'ts.tmpl',
- 'module.tmpl'
- ];
- map.set(path_1.join(templateDir, knownValues[0]), fileContent);
- map.set(path_1.join(templateDir, knownValues[1]), fileContent);
- map.set(path_1.join(templateDir, knownValues[2]), fileContent);
- map.set(path_1.join(templateDir, knownValues[3]), fileContent);
- map.set(path_1.join(templateDir, knownValues[4]), fileContent);
- var newMap = util.filterOutTemplates({ includeNgModule: true, includeSpec: false }, map);
- expect(newMap.size).toEqual(4);
- expect(newMap.get(path_1.join(templateDir, knownValues[0]))).toBeTruthy();
- expect(newMap.get(path_1.join(templateDir, knownValues[1]))).toBeTruthy();
- expect(newMap.get(path_1.join(templateDir, knownValues[2]))).toBeFalsy();
- expect(newMap.get(path_1.join(templateDir, knownValues[3]))).toBeTruthy();
- expect(newMap.get(path_1.join(templateDir, knownValues[4]))).toBeTruthy();
- });
- it('should remove spec and module', function () {
- var map = new Map();
- var templateDir = '/Users/noone/project/node_modules/ionic-angular/templates/component';
- var fileContent = 'SomeContent';
- var knownValues = [
- 'html.tmpl',
- 'scss.tmpl',
- 'spec.ts.tmpl',
- 'ts.tmpl',
- 'module.ts.tmpl'
- ];
- map.set(path_1.join(templateDir, knownValues[0]), fileContent);
- map.set(path_1.join(templateDir, knownValues[1]), fileContent);
- map.set(path_1.join(templateDir, knownValues[2]), fileContent);
- map.set(path_1.join(templateDir, knownValues[3]), fileContent);
- map.set(path_1.join(templateDir, knownValues[4]), fileContent);
- var newMap = util.filterOutTemplates({ includeNgModule: false, includeSpec: false }, map);
- expect(newMap.size).toEqual(3);
- expect(newMap.get(path_1.join(templateDir, knownValues[0]))).toBeTruthy();
- expect(newMap.get(path_1.join(templateDir, knownValues[1]))).toBeTruthy();
- expect(newMap.get(path_1.join(templateDir, knownValues[2]))).toBeFalsy();
- expect(newMap.get(path_1.join(templateDir, knownValues[3]))).toBeTruthy();
- expect(newMap.get(path_1.join(templateDir, knownValues[4]))).toBeFalsy();
- });
- });
- describe('applyTemplates', function () {
- it('should replace the template content', function () {
- var fileOne = '/Users/noone/fileOne';
- var fileOneContent = "\n<!--\n Generated template for the $CLASSNAME component.\n\n See https://angular.io/docs/ts/latest/api/core/index/ComponentMetadata-class.html\n for more info on Angular 2 Components.\n-->\n\n{{text}}\n\n ";
- var fileTwo = '/Users/noone/fileTwo';
- var fileTwoContent = "\n$FILENAME {\n\n}\n ";
- var fileThree = '/Users/noone/fileThree';
- var fileThreeContent = "\ndescribe('$CLASSNAME', () => {\n it('should do something', () => {\n expect(true).toEqual(true);\n });\n});\n ";
- var fileFour = '/Users/noone/fileFour';
- var fileFourContent = "\nimport { Component } from '@angular/core';\n\n/*\n Generated class for the $CLASSNAME component.\n\n See https://angular.io/docs/ts/latest/api/core/index/ComponentMetadata-class.html\n for more info on Angular 2 Components.\n*/\n@Component({\n selector: '$FILENAME',\n templateUrl: '$FILENAME.html'\n})\nexport class $CLASSNAMEComponent {\n\n text: string;\n\n constructor() {\n console.log('Hello $CLASSNAME Component');\n this.text = 'Hello World';\n }\n\n}\n\n ";
- var fileFive = '/Users/noone/fileFive';
- var fileFiveContent = "\nimport { NgModule } from '@angular/core';\nimport { $CLASSNAME } from './$FILENAME';\nimport { IonicModule } from 'ionic-angular';\n\n@NgModule({\n declarations: [\n $CLASSNAME,\n ],\n imports: [\n IonicModule.forChild($CLASSNAME)\n ],\n entryComponents: [\n $CLASSNAME\n ],\n providers: []\n})\nexport class $CLASSNAMEModule {}\n ";
- var fileSix = '/Users/noone/fileSix';
- var fileSixContent = "\n<!--\n Generated template for the $CLASSNAME page.\n\n See http://ionicframework.com/docs/v2/components/#navigation for more info on\n Ionic pages and navigation.\n-->\n<ion-header>\n\n <ion-navbar>\n <ion-title>$SUPPLIEDNAME</ion-title>\n </ion-navbar>\n\n</ion-header>\n\n\n<ion-content padding>\n\n</ion-content>\n ";
- var fileSeven = '/Users/noone/fileSeven';
- var fileSevenContent = "\n<ion-tabs>\n$TAB_CONTENT\n</ion-tabs>\n ";
- var map = new Map();
- map.set(fileOne, fileOneContent);
- map.set(fileTwo, fileTwoContent);
- map.set(fileThree, fileThreeContent);
- map.set(fileFour, fileFourContent);
- map.set(fileFive, fileFiveContent);
- map.set(fileSix, fileSixContent);
- map.set(fileSeven, fileSevenContent);
- var className = 'SettingsView';
- var fileName = 'settings-view';
- var suppliedName = 'settings view';
- var results = util.applyTemplates({ name: suppliedName, className: className, fileName: fileName }, map);
- var modifiedContentOne = results.get(fileOne);
- var modifiedContentTwo = results.get(fileTwo);
- var modifiedContentThree = results.get(fileThree);
- var modifiedContentFour = results.get(fileFour);
- var modifiedContentFive = results.get(fileFive);
- var modifiedContentSix = results.get(fileSix);
- var modifiedContentSeven = results.get(fileSeven);
- var nonExistentVars = [
- GeneratorConstants.CLASSNAME_VARIABLE,
- GeneratorConstants.FILENAME_VARIABLE,
- GeneratorConstants.SUPPLIEDNAME_VARIABLE,
- GeneratorConstants.TAB_CONTENT_VARIABLE,
- GeneratorConstants.TAB_VARIABLES_VARIABLE
- ];
- for (var _i = 0, nonExistentVars_1 = nonExistentVars; _i < nonExistentVars_1.length; _i++) {
- var v = nonExistentVars_1[_i];
- expect(modifiedContentOne.indexOf(v)).toEqual(-1);
- expect(modifiedContentTwo.indexOf(v)).toEqual(-1);
- expect(modifiedContentThree.indexOf(v)).toEqual(-1);
- expect(modifiedContentFour.indexOf(v)).toEqual(-1);
- expect(modifiedContentFive.indexOf(v)).toEqual(-1);
- expect(modifiedContentSix.indexOf(v)).toEqual(-1);
- expect(modifiedContentSeven.indexOf(v)).toEqual(-1);
- }
- });
- });
- describe('writeGeneratedFiles', function () {
- it('should return the list of files generated', function () {
- var map = new Map();
- var templateDir = '/Users/noone/project/node_modules/ionic-angular/templates/component';
- var fileContent = 'SomeContent';
- var knownValues = [
- 'html.tmpl',
- 'scss.tmpl',
- 'spec.ts.tmpl',
- 'ts.tmpl',
- 'module.tmpl'
- ];
- var fileName = 'settings-view';
- var dirToWrite = path_1.join('/Users/noone/project/src/components', fileName);
- map.set(path_1.join(templateDir, knownValues[0]), fileContent);
- map.set(path_1.join(templateDir, knownValues[1]), fileContent);
- map.set(path_1.join(templateDir, knownValues[2]), fileContent);
- map.set(path_1.join(templateDir, knownValues[3]), fileContent);
- map.set(path_1.join(templateDir, knownValues[4]), fileContent);
- spyOn(helpers, helpers.mkDirpAsync.name).and.returnValue(Promise.resolve());
- spyOn(helpers, helpers.writeFileAsync.name).and.returnValue(Promise.resolve());
- var promise = util.writeGeneratedFiles({ dirToWrite: dirToWrite, fileName: fileName }, map);
- return promise.then(function (filesCreated) {
- var fileExtensions = knownValues.map(function (knownValue) {
- return path_1.basename(knownValue, GeneratorConstants.KNOWN_FILE_EXTENSION);
- });
- expect(filesCreated[0]).toEqual(path_1.join(dirToWrite, fileName + "." + fileExtensions[0]));
- expect(filesCreated[1]).toEqual(path_1.join(dirToWrite, fileName + "." + fileExtensions[1]));
- expect(filesCreated[2]).toEqual(path_1.join(dirToWrite, fileName + "." + fileExtensions[2]));
- expect(filesCreated[3]).toEqual(path_1.join(dirToWrite, fileName + "." + fileExtensions[3]));
- expect(filesCreated[4]).toEqual(path_1.join(dirToWrite, fileName + "." + fileExtensions[4]));
- });
- });
- });
- describe('getDirToWriteToByType', function () {
- var context;
- var componentsDir = '/path/to/components';
- var directivesDir = '/path/to/directives';
- var pagesDir = '/path/to/pages';
- var pipesDir = '/path/to/pipes';
- var providersDir = '/path/to/providers';
- beforeEach(function () {
- context = {
- componentsDir: componentsDir,
- directivesDir: directivesDir,
- pagesDir: pagesDir,
- pipesDir: pipesDir,
- providersDir: providersDir
- };
- });
- it('should return the appropriate components directory', function () {
- expect(util.getDirToWriteToByType(context, 'component')).toEqual(componentsDir);
- });
- it('should return the appropriate directives directory', function () {
- expect(util.getDirToWriteToByType(context, 'directive')).toEqual(directivesDir);
- });
- it('should return the appropriate pages directory', function () {
- expect(util.getDirToWriteToByType(context, 'page')).toEqual(pagesDir);
- });
- it('should return the appropriate pipes directory', function () {
- expect(util.getDirToWriteToByType(context, 'pipe')).toEqual(pipesDir);
- });
- it('should return the appropriate providers directory', function () {
- expect(util.getDirToWriteToByType(context, 'provider')).toEqual(providersDir);
- });
- it('should throw error upon unknown generator type', function () {
- expect(function () { return util.getDirToWriteToByType(context, 'dan'); }).toThrowError('Unknown Generator Type: dan');
- });
- });
- describe('getNgModules', function () {
- var context;
- var componentsDir = path_1.join(process.cwd(), 'path', 'to', 'components');
- var directivesDir = path_1.join(process.cwd(), 'path', 'to', 'directives');
- var pagesDir = path_1.join(process.cwd(), 'path', 'to', 'pages');
- var pipesDir = path_1.join(process.cwd(), 'path', 'to', 'pipes');
- var providersDir = path_1.join(process.cwd(), 'path', 'to', 'providers');
- beforeEach(function () {
- context = {
- componentsDir: componentsDir,
- directivesDir: directivesDir,
- pagesDir: pagesDir,
- pipesDir: pipesDir,
- providersDir: providersDir
- };
- });
- it('should return an empty list of glob results', function () {
- var globAllSpy = spyOn(globUtils, globUtils.globAll.name);
- util.getNgModules(context, []);
- expect(globAllSpy).toHaveBeenCalledWith([]);
- });
- it('should return a list of glob results for components', function () {
- var globAllSpy = spyOn(globUtils, globUtils.globAll.name);
- spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue('.module.ts');
- util.getNgModules(context, ['component']);
- expect(globAllSpy).toHaveBeenCalledWith([
- path_1.join(componentsDir, '**', '*.module.ts')
- ]);
- });
- it('should return a list of glob results for pages and components', function () {
- var globAllSpy = spyOn(globUtils, globUtils.globAll.name);
- spyOn(helpers, helpers.getStringPropertyValue.name).and.returnValue('.module.ts');
- util.getNgModules(context, ['page', 'component']);
- expect(globAllSpy).toHaveBeenCalledWith([
- path_1.join(pagesDir, '**', '*.module.ts'),
- path_1.join(componentsDir, '**', '*.module.ts')
- ]);
- });
- });
- });
|