From e35e2bed0ff269a2dbe3b9bd7bd9f3a8ee5df5cf Mon Sep 17 00:00:00 2001 From: qwert789 Date: Sat, 8 Sep 2018 18:29:09 +0300 Subject: [PATCH] Fix module declaration import closes #38 --- src/angular-cli.ts | 9 +++++---- test/extension.test.ts | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/angular-cli.ts b/src/angular-cli.ts index 89ff1c5..0a167d4 100644 --- a/src/angular-cli.ts +++ b/src/angular-cli.ts @@ -61,18 +61,19 @@ export class AngularCli { private parseNgModule(data: string) { - const startPattern = '@NgModule('; - const endPattern = ')'; + const startPattern = '@NgModule({'; + const endPattern = '})'; const startIndex = data.indexOf(startPattern) + startPattern.length; const endIndex = data.indexOf(endPattern, startIndex); - const ngModuleStr = data.substring(startIndex, endIndex) + const ngModuleStr = data + .substring(startIndex, endIndex) .replace('{', '') .replace('}', '') .split(' ') .join(''); const before = data.substring(0, startIndex - startPattern.length); - const after = data.substring(endIndex + 1, data.length); + const after = data.substring(endIndex + endPattern.length, data.length); const ngModuleTokens = ngModuleStr.split('],'); diff --git a/test/extension.test.ts b/test/extension.test.ts index 7a8f7c0..b1051a6 100644 --- a/test/extension.test.ts +++ b/test/extension.test.ts @@ -155,6 +155,29 @@ describe('Extension Tests:', () => { const moduleFileContent = fs.readFileSync(path.join(moduleLocation.fullPath, moduleFilename), 'utf-8'); expect(moduleFileContent).to.contain('MyComponentComponent', 'No declaration has been added'); }); + + it('Should generate component with valid module declaration', async () => { + // tslint:disable-next-line:max-line-length + const beforeModuleContent = `import { BrowserModule } from \'@angular/platform-browser\';\nimport { NgModule } from \'@angular/core\';\nimport { RouterModule, Routes } from \'@angular/router\';\n\nimport { AppComponent } from \'./app.component\';\nimport { AdminSettingsComponent } from \'./admin-settings/admin-settings.component\';\nimport { AdminLandingComponent } from \'./admin-landing/admin-landing.component\';\nimport { AdminSettingsGradeMarksComponent } from \'./admin-settings-grade-marks/admin-settings-grade-marks.component\';\n\nconst appRoutes: Routes = [\n { path: \'settings/main\', component: AdminSettingsComponent },\n { path: \'settings/grade-marks\', component: AdminSettingsGradeMarksComponent },\n { path: \'\', component: AdminLandingComponent }\n];\n\n@NgModule({\n declarations: [\n AppComponent,\n AdminSettingsComponent,\n AdminLandingComponent,\n AdminSettingsGradeMarksComponent\n ],\n imports: [\n RouterModule.forRoot(appRoutes),\n BrowserModule\n ],\n providers: [\n RouterModule\n ],\n bootstrap: [\n AppComponent\n ]\n})\nexport class AppModule {}\n`; + // tslint:disable-next-line:max-line-length + const afterModuleContent = `import { BrowserModule } from \'@angular/platform-browser\';\nimport { NgModule } from \'@angular/core\';\nimport { RouterModule, Routes } from \'@angular/router\';\n\nimport { AppComponent } from \'./app.component\';\nimport { AdminSettingsComponent } from \'./admin-settings/admin-settings.component\';\nimport { AdminLandingComponent } from \'./admin-landing/admin-landing.component\';\nimport { AdminSettingsGradeMarksComponent } from \'./admin-settings-grade-marks/admin-settings-grade-marks.component\';\nimport { JeffTestComponent } from \'./JeffTest/JeffTest.component\';\n\nconst appRoutes: Routes = [\n { path: \'settings/main\', component: AdminSettingsComponent },\n { path: \'settings/grade-marks\', component: AdminSettingsGradeMarksComponent },\n { path: \'\', component: AdminLandingComponent }\n];\n\n@NgModule({\n declarations: [\n AppComponent,\n AdminSettingsComponent,\n AdminLandingComponent,\n AdminSettingsGradeMarksComponent,\n JeffTestComponent\n ],\n imports: [\n RouterModule.forRoot(appRoutes),\n BrowserModule\n ],\n providers: [\n RouterModule\n ],\n bootstrap: [\n AppComponent\n ]\n})\nexport class AppModule {}\n`; + const moduleLocation = Object.assign({}, { fullPath: path.join(testPath, 'my-module'), fileName: 'my-module', dirName: '', dirPath: testPath, rootPath: __dirname, params: [] }); + config.defaults.component.module = 'my-module'; + await angularCli.generateResources(ResourceType.Module, moduleLocation, config); + const moduleFilename = fs.readdirSync(moduleLocation.fullPath).find(f => f.endsWith('module.ts')); + + expect(moduleFilename).not.to.be.empty; + + // write test module content + fs.writeFileSync(path.join(moduleLocation.fullPath, moduleFilename), beforeModuleContent,'utf-8'); + + const componentLocation = Object.assign({}, moduleLocation, { fullPath: path.join(testPath, 'my-module', 'JeffTest'), fileName: 'JeffTest', dirPath: path.join(testPath, 'my-module') }); + const result = await angularCli.generateResources(ResourceType.Component, componentLocation, config); + + const realModuleFileContent = fs.readFileSync(path.join(moduleLocation.fullPath, moduleFilename), 'utf-8'); + + expect(realModuleFileContent).to.be.eql(afterModuleContent); + }); }); describe('Generate class tests', () => {