@@ -16,59 +16,84 @@ test.each(["{}", "[]"])("typeof object literal (%p)", inp => {
1616 util . testExpression `typeof ${ inp } ` . expectToMatchJsResult ( ) ;
1717} ) ;
1818
19+ test ( "typeof class" , ( ) => {
20+ util . testFunction `
21+ class MyClass {}
22+ return typeof MyClass;
23+ ` . expectToEqual ( "object" ) ;
24+ } ) ;
25+
1926test ( "typeof class instance" , ( ) => {
2027 util . testFunction `
21- class myClass {}
22- let inst = new myClass();
23- return typeof inst;
28+ class MyClass {}
29+ return typeof new MyClass();
2430 ` . expectToMatchJsResult ( ) ;
2531} ) ;
2632
2733test ( "typeof function" , ( ) => {
2834 util . testExpression `typeof (() => 3)` . expectToMatchJsResult ( ) ;
2935} ) ;
3036
31- test . each ( [ "null" , "undefined" ] ) ( "typeof undefined (%p) " , inp => {
37+ test . each ( [ "null" , "undefined" ] ) ( "typeof %s " , inp => {
3238 util . testExpression `typeof ${ inp } ` . expectToEqual ( "undefined" ) ;
3339} ) ;
3440
35- test . each ( [
36- { expression : "{}" , operator : "===" , compareTo : "object" , expectResult : true } ,
37- { expression : "{}" , operator : "!==" , compareTo : "object" , expectResult : false } ,
38- { expression : "{}" , operator : "==" , compareTo : "object" , expectResult : true } ,
39- { expression : "{}" , operator : "!=" , compareTo : "object" , expectResult : false } ,
40- { expression : "undefined" , operator : "===" , compareTo : "undefined" , expectResult : true } ,
41- { expression : "() => {}" , operator : "===" , compareTo : "function" , expectResult : true } ,
42- { expression : "1" , operator : "===" , compareTo : "number" , expectResult : true } ,
43- { expression : "true" , operator : "===" , compareTo : "boolean" , expectResult : true } ,
44- { expression : `"foo"` , operator : "===" , compareTo : "string" , expectResult : true } ,
45- ] ) ( "typeof literal comparison (%p)" , ( { expression, operator, compareTo, expectResult } ) => {
46- const code = `
47- let val = ${ expression } ;
48- return typeof val ${ operator } "${ compareTo } ";` ;
41+ interface ComparisonCase {
42+ expression : string ;
43+ operator : string ;
44+ compareTo : string ;
45+ }
4946
50- expect ( util . transpileString ( code ) ) . not . toMatch ( "__TS__TypeOf" ) ;
51- expect ( util . transpileAndExecute ( code ) ) . toBe ( expectResult ) ;
52- } ) ;
47+ const equalityComparisonCases : ComparisonCase [ ] = [
48+ { expression : "{}" , operator : "===" , compareTo : "object" } ,
49+ { expression : "{}" , operator : "!==" , compareTo : "object" } ,
50+ { expression : "{}" , operator : "==" , compareTo : "object" } ,
51+ { expression : "{}" , operator : "!=" , compareTo : "object" } ,
52+ { expression : "undefined" , operator : "===" , compareTo : "undefined" } ,
53+ { expression : "() => {}" , operator : "===" , compareTo : "function" } ,
54+ { expression : "1" , operator : "===" , compareTo : "number" } ,
55+ { expression : "true" , operator : "===" , compareTo : "boolean" } ,
56+ { expression : `"foo"` , operator : "===" , compareTo : "string" } ,
57+ ] ;
58+
59+ const relationalComparisonCases : ComparisonCase [ ] = [
60+ { expression : "undefined" , operator : "<=" , compareTo : "object" } ,
61+ { expression : "undefined" , operator : "<" , compareTo : "object" } ,
62+ { expression : "undefined" , operator : ">=" , compareTo : "object" } ,
63+ { expression : "undefined" , operator : ">" , compareTo : "object" } ,
64+ ] ;
5365
54- test . each ( [
55- { expression : "{}" , operator : "===" , compareTo : "object" , expectResult : true } ,
56- { expression : "{}" , operator : "!==" , compareTo : "object" , expectResult : false } ,
57- { expression : "{}" , operator : "==" , compareTo : "object" , expectResult : true } ,
58- { expression : "{}" , operator : "!=" , compareTo : "object" , expectResult : false } ,
59- { expression : "{}" , operator : "<=" , compareTo : "object" , expectResult : true } ,
60- { expression : "{}" , operator : "<" , compareTo : "object" , expectResult : false } ,
61- { expression : "undefined" , operator : "===" , compareTo : "undefined" , expectResult : true } ,
62- { expression : "() => {}" , operator : "===" , compareTo : "function" , expectResult : true } ,
63- { expression : "1" , operator : "===" , compareTo : "number" , expectResult : true } ,
64- { expression : "true" , operator : "===" , compareTo : "boolean" , expectResult : true } ,
65- { expression : `"foo"` , operator : "===" , compareTo : "string" , expectResult : true } ,
66- ] ) ( "typeof non-literal comparison (%p)" , ( { expression, operator, compareTo, expectResult } ) => {
67- const code = `
68- let val = ${ expression } ;
69- let compareTo = "${ compareTo } ";
70- return typeof val ${ operator } compareTo;` ;
66+ const expectTypeOfHelper : util . TapCallback = builder => expect ( builder . getMainLuaCodeChunk ( ) ) . toMatch ( "__TS__TypeOf" ) ;
67+ const expectNoTypeOfHelper : util . TapCallback = builder =>
68+ expect ( builder . getMainLuaCodeChunk ( ) ) . not . toMatch ( "__TS__TypeOf" ) ;
7169
72- expect ( util . transpileString ( code ) ) . toMatch ( "__TS__TypeOf" ) ;
73- expect ( util . transpileAndExecute ( code ) ) . toBe ( expectResult ) ;
70+ test . each ( equalityComparisonCases ) ( "typeof literal equality comparison (%p)" , ( { expression, operator, compareTo } ) => {
71+ util . testFunction `
72+ const value = ${ expression } ;
73+ return typeof value ${ operator } "${ compareTo } ";
74+ `
75+ . tap ( expectNoTypeOfHelper )
76+ . expectToMatchJsResult ( ) ;
7477} ) ;
78+
79+ test . each ( relationalComparisonCases ) ( "typeof literal comparison (%p)" , ( { expression, operator, compareTo } ) => {
80+ util . testFunction `
81+ const value = ${ expression } ;
82+ return typeof value ${ operator } "${ compareTo } ";
83+ `
84+ . tap ( expectTypeOfHelper )
85+ . expectToMatchJsResult ( ) ;
86+ } ) ;
87+
88+ test . each ( [ ...equalityComparisonCases , ...relationalComparisonCases ] ) (
89+ "typeof non-literal comparison (%p)" ,
90+ ( { expression, operator, compareTo } ) => {
91+ util . testFunction `
92+ const value = ${ expression } ;
93+ const compareTo = "${ compareTo } ";
94+ return typeof value ${ operator } compareTo;
95+ `
96+ . tap ( expectTypeOfHelper )
97+ . expectToMatchJsResult ( ) ;
98+ }
99+ ) ;
0 commit comments