import { SymbolHelper } from './symbol-helper' ; import { ts , SyntaxKind } from 'ts-morph' ; import { expect } from 'chai' ; describe ( SymbolHelper . name , ( ) => { let helper ; beforeEach ( ( ) => { helper = new SymbolHelper ( ) ; } ) ; describe ( 'parseProviderConfiguration' , ( ) => { it ( 'should handle property is identifier' , ( ) => { const provideProperty = ts . createPropertyAssignment ( 'provide' , ts . createIdentifier ( 'APP_BASE_HREF' ) ) ; const useValue = ts . createPropertyAssignment ( 'useValue' , ts . createLiteral ( '/' ) ) ; const obj = ts . createObjectLiteral ( [ provideProperty , useValue ] ) ; const result = helper . parseProviderConfiguration ( obj ) ; expect ( result ) . to . equal ( '{ provide: APP_BASE_HREF, useValue: "/" }' ) ; } ) ; it ( 'should handle property is array' , ( ) => { const array = ts . createArrayLiteral ( [ ts . createLiteral ( 'd1' ) , ts . createLiteral ( 'd2' ) ] ) ; const obj = ts . createObjectLiteral ( [ ts . createPropertyAssignment ( 'deps' , array ) ] ) ; const result = helper . parseProviderConfiguration ( obj ) ; expect ( result ) . to . equal ( '{ deps: ["d1", "d2"] }' ) ; } ) ; it ( 'should handle lambda' , ( ) => { const dateCall = ts . createNew ( ts . createIdentifier ( 'Date' ) , [ ] , [ ] ) ; const arrowFunc = ts . createArrowFunction ( [ ] , [ ] , [ ts . createParameter ( [ ] , [ ] , undefined , 'd1' ) , ts . createParameter ( [ ] , [ ] , undefined , 'd2' ) ] , undefined , ts . createToken ( SyntaxKind . EqualsGreaterThanToken ) , dateCall ) ; const obj = ts . createObjectLiteral ( [ ts . createPropertyAssignment ( 'useFactory' , arrowFunc ) ] ) ; const result = helper . parseProviderConfiguration ( obj ) ; expect ( result ) . to . equal ( '{ useFactory: (d1, d2) => new Date() }' ) ; } ) ; } ) ; describe ( 'buildIdentifierName' , ( ) => { it ( 'should handle RouterModule.forRoot' , ( ) => { const routerModule = ts . createIdentifier ( 'RouterModule' ) ; const propertyAccess = ts . createPropertyAccess ( routerModule , 'forRoot' ) ; const result = helper . buildIdentifierName ( propertyAccess ) ; expect ( result ) . to . equal ( 'RouterModule.forRoot' ) ; } ) ; } ) ; describe ( 'parseSymbolElements' , ( ) => { it ( 'should handle CallExpression and remove args' , ( ) => { const routerModule = ts . createIdentifier ( 'RouterModule' ) ; const forRoot = ts . createPropertyAccess ( routerModule , 'forRoot' ) ; const callExp = ts . createCall ( forRoot , [ ] , [ ts . createLiteral ( 'arg1' ) ] ) ; const result = helper . parseSymbolElements ( callExp ) ; expect ( result ) . to . equal ( 'RouterModule.forRoot(args)' ) ; } ) ; it ( 'should handle sub-Module' , ( ) => { const shared = ts . createIdentifier ( 'Shared' ) ; const module = ts . createPropertyAccess ( shared , 'Module' ) ; const result = helper . parseSymbolElements ( module ) ; expect ( result ) . to . equal ( 'Shared.Module' ) ; } ) ; it ( 'should handle string literal' , ( ) => { const stringLiteral = ts . createLiteral ( './app.component.css' ) ; const result = helper . parseSymbolElements ( stringLiteral ) ; expect ( result ) . to . equal ( './app.component.css' ) ; } ) ; } ) ; } ) ;