@@ -18,7 +18,7 @@ describe('Evaluator', () => {
1818 beforeEach ( ( ) => {
1919 host = new Host ( FILES , [
2020 'expressions.ts' , 'consts.ts' , 'const_expr.ts' , 'forwardRef.ts' , 'classes.ts' ,
21- 'newExpression.ts' , 'errors.ts'
21+ 'newExpression.ts' , 'errors.ts' , 'declared.ts'
2222 ] ) ;
2323 service = ts . createLanguageService ( host , documentRegistry ) ;
2424 program = service . getProgram ( ) ;
@@ -39,15 +39,15 @@ describe('Evaluator', () => {
3939 } ) ;
4040
4141 it ( 'should be able to fold literal expressions' , ( ) => {
42- var consts = program . getSourceFile ( 'consts.ts' ) ;
42+ const consts = program . getSourceFile ( 'consts.ts' ) ;
4343 expect ( evaluator . isFoldable ( findVar ( consts , 'someName' ) . initializer ) ) . toBeTruthy ( ) ;
4444 expect ( evaluator . isFoldable ( findVar ( consts , 'someBool' ) . initializer ) ) . toBeTruthy ( ) ;
4545 expect ( evaluator . isFoldable ( findVar ( consts , 'one' ) . initializer ) ) . toBeTruthy ( ) ;
4646 expect ( evaluator . isFoldable ( findVar ( consts , 'two' ) . initializer ) ) . toBeTruthy ( ) ;
4747 } ) ;
4848
4949 it ( 'should be able to fold expressions with foldable references' , ( ) => {
50- var expressions = program . getSourceFile ( 'expressions.ts' ) ;
50+ const expressions = program . getSourceFile ( 'expressions.ts' ) ;
5151 symbols . define ( 'someName' , 'some-name' ) ;
5252 symbols . define ( 'someBool' , true ) ;
5353 symbols . define ( 'one' , 1 ) ;
@@ -61,15 +61,15 @@ describe('Evaluator', () => {
6161 } ) ;
6262
6363 it ( 'should be able to evaluate literal expressions' , ( ) => {
64- var consts = program . getSourceFile ( 'consts.ts' ) ;
64+ const consts = program . getSourceFile ( 'consts.ts' ) ;
6565 expect ( evaluator . evaluateNode ( findVar ( consts , 'someName' ) . initializer ) ) . toBe ( 'some-name' ) ;
6666 expect ( evaluator . evaluateNode ( findVar ( consts , 'someBool' ) . initializer ) ) . toBe ( true ) ;
6767 expect ( evaluator . evaluateNode ( findVar ( consts , 'one' ) . initializer ) ) . toBe ( 1 ) ;
6868 expect ( evaluator . evaluateNode ( findVar ( consts , 'two' ) . initializer ) ) . toBe ( 2 ) ;
6969 } ) ;
7070
7171 it ( 'should be able to evaluate expressions' , ( ) => {
72- var expressions = program . getSourceFile ( 'expressions.ts' ) ;
72+ const expressions = program . getSourceFile ( 'expressions.ts' ) ;
7373 symbols . define ( 'someName' , 'some-name' ) ;
7474 symbols . define ( 'someBool' , true ) ;
7575 symbols . define ( 'one' , 1 ) ;
@@ -117,29 +117,29 @@ describe('Evaluator', () => {
117117 } ) ;
118118
119119 it ( 'should report recursive references as symbolic' , ( ) => {
120- var expressions = program . getSourceFile ( 'expressions.ts' ) ;
120+ const expressions = program . getSourceFile ( 'expressions.ts' ) ;
121121 expect ( evaluator . evaluateNode ( findVar ( expressions , 'recursiveA' ) . initializer ) )
122122 . toEqual ( { __symbolic : 'reference' , name : 'recursiveB' } ) ;
123123 expect ( evaluator . evaluateNode ( findVar ( expressions , 'recursiveB' ) . initializer ) )
124124 . toEqual ( { __symbolic : 'reference' , name : 'recursiveA' } ) ;
125125 } ) ;
126126
127127 it ( 'should correctly handle special cases for CONST_EXPR' , ( ) => {
128- var const_expr = program . getSourceFile ( 'const_expr.ts' ) ;
128+ const const_expr = program . getSourceFile ( 'const_expr.ts' ) ;
129129 expect ( evaluator . evaluateNode ( findVar ( const_expr , 'bTrue' ) . initializer ) ) . toEqual ( true ) ;
130130 expect ( evaluator . evaluateNode ( findVar ( const_expr , 'bFalse' ) . initializer ) ) . toEqual ( false ) ;
131131 } ) ;
132132
133133 it ( 'should resolve a forwardRef' , ( ) => {
134- var forwardRef = program . getSourceFile ( 'forwardRef.ts' ) ;
134+ const forwardRef = program . getSourceFile ( 'forwardRef.ts' ) ;
135135 expect ( evaluator . evaluateNode ( findVar ( forwardRef , 'bTrue' ) . initializer ) ) . toEqual ( true ) ;
136136 expect ( evaluator . evaluateNode ( findVar ( forwardRef , 'bFalse' ) . initializer ) ) . toEqual ( false ) ;
137137 } ) ;
138138
139139 it ( 'should return new expressions' , ( ) => {
140140 symbols . define ( 'Value' , { __symbolic : 'reference' , module : './classes' , name : 'Value' } ) ;
141141 evaluator = new Evaluator ( symbols ) ;
142- var newExpression = program . getSourceFile ( 'newExpression.ts' ) ;
142+ const newExpression = program . getSourceFile ( 'newExpression.ts' ) ;
143143 expect ( evaluator . evaluateNode ( findVar ( newExpression , 'someValue' ) . initializer ) ) . toEqual ( {
144144 __symbolic : 'new' ,
145145 expression : { __symbolic : 'reference' , name : 'Value' , module : './classes' } ,
@@ -152,54 +152,57 @@ describe('Evaluator', () => {
152152 } ) ;
153153 } ) ;
154154
155- it ( 'should return errors for unsupported expressions ' , ( ) => {
156- let errors = program . getSourceFile ( 'errors .ts' ) ;
157- let aDecl = findVar ( errors , 'a' ) ;
155+ it ( 'should support referene to a declared module type ' , ( ) => {
156+ const declared = program . getSourceFile ( 'declared .ts' ) ;
157+ const aDecl = findVar ( declared , 'a' ) ;
158158 expect ( evaluator . evaluateNode ( aDecl . type ) ) . toEqual ( {
159- __symbolic : 'error' ,
160- message : 'Qualified type names not supported' ,
161- line : 5 ,
162- character : 10
159+ __symbolic : 'select' ,
160+ expression : { __symbolic : 'reference' , name : 'Foo' } ,
161+ member : 'A'
163162 } ) ;
164- let fDecl = findVar ( errors , 'f' ) ;
163+ } ) ;
164+
165+ it ( 'should return errors for unsupported expressions' , ( ) => {
166+ const errors = program . getSourceFile ( 'errors.ts' ) ;
167+ const fDecl = findVar ( errors , 'f' ) ;
165168 expect ( evaluator . evaluateNode ( fDecl . initializer ) )
166169 . toEqual (
167- { __symbolic : 'error' , message : 'Function call not supported' , line : 6 , character : 11 } ) ;
168- let eDecl = findVar ( errors , 'e' ) ;
170+ { __symbolic : 'error' , message : 'Function call not supported' , line : 1 , character : 11 } ) ;
171+ const eDecl = findVar ( errors , 'e' ) ;
169172 expect ( evaluator . evaluateNode ( eDecl . type ) ) . toEqual ( {
170173 __symbolic : 'error' ,
171174 message : 'Could not resolve type' ,
172- line : 7 ,
175+ line : 2 ,
173176 character : 10 ,
174177 context : { typeName : 'NotFound' }
175178 } ) ;
176- let sDecl = findVar ( errors , 's' ) ;
179+ const sDecl = findVar ( errors , 's' ) ;
177180 expect ( evaluator . evaluateNode ( sDecl . initializer ) ) . toEqual ( {
178181 __symbolic : 'error' ,
179182 message : 'Name expected' ,
180- line : 8 ,
183+ line : 3 ,
181184 character : 13 ,
182185 context : { received : '1' }
183186 } ) ;
184- let tDecl = findVar ( errors , 't' ) ;
187+ const tDecl = findVar ( errors , 't' ) ;
185188 expect ( evaluator . evaluateNode ( tDecl . initializer ) ) . toEqual ( {
186189 __symbolic : 'error' ,
187190 message : 'Expression form not supported' ,
188- line : 9 ,
191+ line : 4 ,
189192 character : 11
190193 } ) ;
191194 } ) ;
192195
193196 it ( 'should be able to fold an array spread' , ( ) => {
194- let expressions = program . getSourceFile ( 'expressions.ts' ) ;
197+ const expressions = program . getSourceFile ( 'expressions.ts' ) ;
195198 symbols . define ( 'arr' , [ 1 , 2 , 3 , 4 ] ) ;
196- let arrSpread = findVar ( expressions , 'arrSpread' ) ;
199+ const arrSpread = findVar ( expressions , 'arrSpread' ) ;
197200 expect ( evaluator . evaluateNode ( arrSpread . initializer ) ) . toEqual ( [ 0 , 1 , 2 , 3 , 4 , 5 ] ) ;
198201 } ) ;
199202
200203 it ( 'should be able to produce a spread expression' , ( ) => {
201- let expressions = program . getSourceFile ( 'expressions.ts' ) ;
202- let arrSpreadRef = findVar ( expressions , 'arrSpreadRef' ) ;
204+ const expressions = program . getSourceFile ( 'expressions.ts' ) ;
205+ const arrSpreadRef = findVar ( expressions , 'arrSpreadRef' ) ;
203206 expect ( evaluator . evaluateNode ( arrSpreadRef . initializer ) ) . toEqual ( [
204207 0 , { __symbolic : 'spread' , expression : { __symbolic : 'reference' , name : 'arrImport' } } , 5
205208 ] ) ;
@@ -296,14 +299,16 @@ const FILES: Directory = {
296299 export const complex = CONST_EXPR(new Value("name", forwardRef(() => 12)));
297300 ` ,
298301 'errors.ts' : `
299- declare namespace Foo {
300- type A = string;
301- }
302-
303- let a: Foo.A = 'some value';
304302 let f = () => 1;
305303 let e: NotFound;
306304 let s = { 1: 1, 2: 2 };
307305 let t = typeof 12;
308306 ` ,
307+ 'declared.ts' : `
308+ declare namespace Foo {
309+ type A = string;
310+ }
311+
312+ let a: Foo.A = 'some value';
313+ `
309314} ;
0 commit comments