@@ -37,6 +37,133 @@ describe('loadModules', function() {
3737 expect ( container . resolve ( 'someClass' ) ) . toBeInstanceOf ( SomeClass )
3838 } )
3939
40+ it ( 'registers non-default export modules containing RESOLVER token with the container' , function ( ) {
41+ const container = createContainer ( )
42+
43+ class SomeNonDefaultClass {
44+ static [ RESOLVER ] = { }
45+ }
46+
47+ const modules : any = {
48+ 'someIgnoredName.js' : { SomeNonDefaultClass }
49+ }
50+ const moduleLookupResult = lookupResultFor ( modules )
51+ const deps = {
52+ container,
53+ listModules : jest . fn ( ( ) => moduleLookupResult ) ,
54+ require : jest . fn ( path => modules [ path ] )
55+ }
56+
57+ const result = loadModules ( deps , 'anything' )
58+ expect ( result ) . toEqual ( { loadedModules : moduleLookupResult } )
59+ expect ( Object . keys ( container . registrations ) . length ) . toBe ( 1 )
60+ // Note the capital first letter because the export key name is used instead of the filename
61+ expect ( container . resolve ( 'SomeNonDefaultClass' ) ) . toBeInstanceOf (
62+ SomeNonDefaultClass
63+ )
64+ } )
65+
66+ it ( 'does not register non-default modules without a RESOLVER token' , function ( ) {
67+ const container = createContainer ( )
68+
69+ class SomeClass { }
70+
71+ const modules : any = {
72+ 'nopeClass.js' : { SomeClass }
73+ }
74+ const moduleLookupResult = lookupResultFor ( modules )
75+ const deps = {
76+ container,
77+ listModules : jest . fn ( ( ) => moduleLookupResult ) ,
78+ require : jest . fn ( path => modules [ path ] )
79+ }
80+
81+ const result = loadModules ( deps , 'anything' )
82+ expect ( result ) . toEqual ( { loadedModules : moduleLookupResult } )
83+ expect ( Object . keys ( container . registrations ) . length ) . toBe ( 0 )
84+ } )
85+
86+ it ( 'registers multiple loaded modules from one file with the container' , function ( ) {
87+ const container = createContainer ( )
88+
89+ class SomeClass { }
90+ class SomeNonDefaultClass {
91+ static [ RESOLVER ] = { }
92+ }
93+ class SomeNamedNonDefaultClass {
94+ static [ RESOLVER ] = {
95+ name : 'nameOverride'
96+ }
97+ }
98+
99+ const modules : any = {
100+ 'mixedFile.js' : {
101+ default : SomeClass ,
102+ nonDefault : SomeNonDefaultClass ,
103+ namedNonDefault : SomeNamedNonDefaultClass
104+ }
105+ }
106+ const moduleLookupResult = lookupResultFor ( modules )
107+ const deps = {
108+ container,
109+ listModules : jest . fn ( ( ) => moduleLookupResult ) ,
110+ require : jest . fn ( path => modules [ path ] )
111+ }
112+
113+ const result = loadModules ( deps , 'anything' )
114+ expect ( result ) . toEqual ( { loadedModules : moduleLookupResult } )
115+ expect ( Object . keys ( container . registrations ) . length ) . toBe ( 3 )
116+ expect ( container . resolve ( 'mixedFile' ) ) . toBeInstanceOf ( SomeClass )
117+ expect ( container . resolve ( 'nonDefault' ) ) . toBeInstanceOf ( SomeNonDefaultClass )
118+ expect ( container . resolve ( 'nameOverride' ) ) . toBeInstanceOf (
119+ SomeNamedNonDefaultClass
120+ )
121+ } )
122+
123+ it ( 'registers only the last module with a certain name with the container' , function ( ) {
124+ const container = createContainer ( )
125+
126+ class SomeClass { }
127+ class SomeNonDefaultClass {
128+ static [ RESOLVER ] = { }
129+ }
130+ class SomeNamedNonDefaultClass {
131+ static [ RESOLVER ] = {
132+ name : 'nameOverride'
133+ }
134+ }
135+
136+ const modules : any = {
137+ 'mixedFileOne.js' : {
138+ default : SomeClass ,
139+ nameOverride : SomeNonDefaultClass ,
140+ // this will override the above named export with its specified name
141+ namedNonDefault : SomeNamedNonDefaultClass
142+ } ,
143+ 'mixedFileTwo.js' : {
144+ // this will override the default export from mixedFileOne
145+ mixedFileOne : SomeNonDefaultClass
146+ }
147+ }
148+
149+ const moduleLookupResult = lookupResultFor ( modules )
150+ const deps = {
151+ container,
152+ listModules : jest . fn ( ( ) => moduleLookupResult ) ,
153+ require : jest . fn ( path => modules [ path ] )
154+ }
155+
156+ const result = loadModules ( deps , 'anything' )
157+ expect ( result ) . toEqual ( { loadedModules : moduleLookupResult } )
158+ expect ( Object . keys ( container . registrations ) . length ) . toBe ( 2 )
159+ expect ( container . resolve ( 'mixedFileOne' ) ) . toBeInstanceOf (
160+ SomeNonDefaultClass
161+ )
162+ expect ( container . resolve ( 'nameOverride' ) ) . toBeInstanceOf (
163+ SomeNamedNonDefaultClass
164+ )
165+ } )
166+
40167 it ( 'uses built-in formatter when given a formatName as a string' , function ( ) {
41168 const container = createContainer ( )
42169 const modules : any = {
0 commit comments