@@ -3,9 +3,10 @@ const Dgeni = require('dgeni');
33
44describe ( 'processNgModuleDocs processor' , ( ) => {
55 let processor ;
6+ let injector ;
67 beforeEach ( ( ) => {
78 const dgeni = new Dgeni ( [ testPackage ( 'angular-api-package' ) ] ) ;
8- const injector = dgeni . configureInjector ( ) ;
9+ injector = dgeni . configureInjector ( ) ;
910 processor = injector . get ( 'processNgModuleDocs' ) ;
1011 } ) ;
1112
@@ -14,11 +15,105 @@ describe('processNgModuleDocs processor', () => {
1415 } ) ;
1516
1617 it ( 'should run before the correct processor' , ( ) => {
17- expect ( processor . $runBefore ) . toEqual ( [ 'docs-processed ' ] ) ;
18+ expect ( processor . $runBefore ) . toEqual ( [ 'createSitemap ' ] ) ;
1819 } ) ;
1920
2021 it ( 'should run after the correct processor' , ( ) => {
21- expect ( processor . $runAfter ) . toEqual ( [ 'extractDecoratedClassesProcessor' ] ) ;
22+ expect ( processor . $runAfter ) . toEqual ( [ 'extractDecoratedClassesProcessor' , 'computeIdsProcessor' ] ) ;
2223 } ) ;
2324
25+ it ( 'should non-arrayNgModule options to arrays' , ( ) => {
26+ const docs = [ {
27+ docType : 'ngmodule' ,
28+ ngmoduleOptions : {
29+ a : [ 'AAA' ] ,
30+ b : 'BBB' ,
31+ c : 42
32+ }
33+ } ] ;
34+ processor . $process ( docs ) ;
35+ expect ( docs [ 0 ] . ngmoduleOptions . a ) . toEqual ( [ 'AAA' ] ) ;
36+ expect ( docs [ 0 ] . ngmoduleOptions . b ) . toEqual ( [ 'BBB' ] ) ;
37+ expect ( docs [ 0 ] . ngmoduleOptions . c ) . toEqual ( [ 42 ] ) ;
38+ } ) ;
39+
40+ it ( 'should link directive/pipe docs with their NgModule docs' , ( ) => {
41+ const aliasMap = injector . get ( 'aliasMap' ) ;
42+ const ngModule1 = { docType : 'ngmodule' , id : 'NgModule1' , aliases : [ 'NgModule1' ] , ngmoduleOptions : { } } ;
43+ const ngModule2 = { docType : 'ngmodule' , id : 'NgModule2' , aliases : [ 'NgModule2' ] , ngmoduleOptions : { } } ;
44+ const directive1 = { docType : 'directive' , id : 'Directive1' , ngModules : [ 'NgModule1' ] } ;
45+ const directive2 = { docType : 'directive' , id : 'Directive2' , ngModules : [ 'NgModule2' ] } ;
46+ const directive3 = { docType : 'directive' , id : 'Directive3' , ngModules : [ 'NgModule1' , 'NgModule2' ] } ;
47+ const pipe1 = { docType : 'pipe' , id : 'Pipe1' , ngModules : [ 'NgModule1' ] } ;
48+ const pipe2 = { docType : 'pipe' , id : 'Pipe2' , ngModules : [ 'NgModule2' ] } ;
49+ const pipe3 = { docType : 'pipe' , id : 'Pipe3' , ngModules : [ 'NgModule1' , 'NgModule2' ] } ;
50+
51+ aliasMap . addDoc ( ngModule1 ) ;
52+ aliasMap . addDoc ( ngModule2 ) ;
53+ processor . $process ( [ ngModule1 , ngModule2 , directive1 , directive2 , directive3 , pipe1 , pipe2 , pipe3 ] ) ;
54+
55+ expect ( ngModule1 . directives ) . toEqual ( [ directive1 , directive3 ] ) ;
56+ expect ( ngModule1 . pipes ) . toEqual ( [ pipe1 , pipe3 ] ) ;
57+ expect ( ngModule2 . directives ) . toEqual ( [ directive2 , directive3 ] ) ;
58+ expect ( ngModule2 . pipes ) . toEqual ( [ pipe2 , pipe3 ] ) ;
59+
60+ expect ( directive1 . ngModules ) . toEqual ( [ ngModule1 ] ) ;
61+ expect ( directive2 . ngModules ) . toEqual ( [ ngModule2 ] ) ;
62+ expect ( directive3 . ngModules ) . toEqual ( [ ngModule1 , ngModule2 ] ) ;
63+
64+ expect ( pipe1 . ngModules ) . toEqual ( [ ngModule1 ] ) ;
65+ expect ( pipe2 . ngModules ) . toEqual ( [ ngModule2 ] ) ;
66+ expect ( pipe3 . ngModules ) . toEqual ( [ ngModule1 , ngModule2 ] ) ;
67+ } ) ;
68+
69+ it ( 'should error if a pipe/directive does not have a `@ngModule` tag' , ( ) => {
70+ const log = injector . get ( 'log' ) ;
71+ expect ( ( ) => {
72+ processor . $process ( [ { docType : 'directive' , id : 'Directive1' } ] ) ;
73+ } ) . toThrowError ( 'Failed to process NgModule relationships.' ) ;
74+ expect ( log . error ) . toHaveBeenCalledWith (
75+ '"Directive1" has no @ngModule tag. Docs of type "directive" must have this tag. - doc "Directive1" (directive) ' ) ;
76+
77+ expect ( ( ) => {
78+ processor . $process ( [ { docType : 'pipe' , id : 'Pipe1' } ] ) ;
79+ } ) . toThrowError ( 'Failed to process NgModule relationships.' ) ;
80+ expect ( log . error ) . toHaveBeenCalledWith (
81+ '"Pipe1" has no @ngModule tag. Docs of type "pipe" must have this tag. - doc "Pipe1" (pipe) ' ) ;
82+ } ) ;
83+
84+ it ( 'should error if a pipe/directive has an @ngModule tag that does not match an NgModule doc' , ( ) => {
85+ const log = injector . get ( 'log' ) ;
86+ expect ( ( ) => {
87+ processor . $process ( [ { docType : 'directive' , id : 'Directive1' , ngModules : [ 'MissingNgModule' ] } ] ) ;
88+ } ) . toThrowError ( 'Failed to process NgModule relationships.' ) ;
89+ expect ( log . error ) . toHaveBeenCalledWith (
90+ '"@ngModule MissingNgModule" does not match a public NgModule - doc "Directive1" (directive) ' ) ;
91+
92+ expect ( ( ) => {
93+ processor . $process ( [ { docType : 'pipe' , id : 'Pipe1' , ngModules : [ 'MissingNgModule' ] } ] ) ;
94+ } ) . toThrowError ( 'Failed to process NgModule relationships.' ) ;
95+ expect ( log . error ) . toHaveBeenCalledWith (
96+ '"@ngModule MissingNgModule" does not match a public NgModule - doc "Pipe1" (pipe) ' ) ;
97+ } ) ;
98+
99+ it ( 'should error if a pipe/directive has an @ngModule tag that matches more than one NgModule doc' , ( ) => {
100+ const aliasMap = injector . get ( 'aliasMap' ) ;
101+ const log = injector . get ( 'log' ) ;
102+ const ngModule1 = { docType : 'ngmodule' , id : 'NgModule1' , aliases : [ 'NgModuleAlias' ] , ngmoduleOptions : { } } ;
103+ const ngModule2 = { docType : 'ngmodule' , id : 'NgModule2' , aliases : [ 'NgModuleAlias' ] , ngmoduleOptions : { } } ;
104+ aliasMap . addDoc ( ngModule1 ) ;
105+ aliasMap . addDoc ( ngModule2 ) ;
106+
107+ expect ( ( ) => {
108+ processor . $process ( [ { docType : 'directive' , id : 'Directive1' , ngModules : [ 'NgModuleAlias' ] } ] ) ;
109+ } ) . toThrowError ( 'Failed to process NgModule relationships.' ) ;
110+ expect ( log . error ) . toHaveBeenCalledWith (
111+ '"@ngModule NgModuleAlias" is ambiguous. Matches: NgModule1, NgModule2 - doc "Directive1" (directive) ' ) ;
112+
113+ expect ( ( ) => {
114+ processor . $process ( [ { docType : 'pipe' , id : 'Pipe1' , ngModules : [ 'NgModuleAlias' ] } ] ) ;
115+ } ) . toThrowError ( 'Failed to process NgModule relationships.' ) ;
116+ expect ( log . error ) . toHaveBeenCalledWith (
117+ '"@ngModule NgModuleAlias" is ambiguous. Matches: NgModule1, NgModule2 - doc "Pipe1" (pipe) ' ) ;
118+ } ) ;
24119} ) ;
0 commit comments