@@ -9,59 +9,118 @@ import {decodeTextMateToken, DecodeMap} from 'vs/editor/node/textMate/TMSyntax';
99
1010suite ( 'textMate' , ( ) => {
1111
12- test ( 'decodeTextMateToken' , ( ) => {
12+ function assertRelaxedEqual ( a :string , b :string ) : void {
13+ let relaxString = ( str :string ) => {
14+ let pieces = str . split ( '.' ) ;
15+ pieces . sort ( ) ;
16+ return pieces . join ( '.' ) ;
17+ } ;
18+ assert . equal ( relaxString ( a ) , relaxString ( b ) ) ;
19+ }
20+
21+ function slowDecodeTextMateToken ( scopes :string [ ] ) : string {
22+ let allTokensMap : { [ token :string ] :boolean ; } = Object . create ( null ) ;
23+ for ( let i = 1 ; i < scopes . length ; i ++ ) {
24+ let pieces = scopes [ i ] . split ( '.' ) ;
25+ for ( let j = 0 ; j < pieces . length ; j ++ ) {
26+ allTokensMap [ pieces [ j ] ] = true ;
27+ }
28+ }
29+ return Object . keys ( allTokensMap ) . join ( '.' ) ;
30+ }
31+
32+ function testOneDecodeTextMateToken ( decodeMap :DecodeMap , scopes :string [ ] , expected :string ) : void {
33+ let actual = decodeTextMateToken ( decodeMap , scopes ) ;
34+ assert . equal ( actual , expected ) ;
35+
36+ // Sanity-check
37+ let alternativeExpected = slowDecodeTextMateToken ( scopes ) ;
38+ assertRelaxedEqual ( actual , alternativeExpected ) ;
39+ }
40+
41+ function testDecodeTextMateToken ( input :string [ ] [ ] , expected :string [ ] ) : void {
1342 let decodeMap = new DecodeMap ( ) ;
1443
15- let input = getTestScopes ( ) ;
16- let actual :string [ ] = [ ] ;
17- for ( let i = 0 , len = input . length ; i < len ; i ++ ) {
18- actual . push ( decodeTextMateToken ( decodeMap , input [ i ] ) ) ;
44+ for ( let i = 0 ; i < input . length ; i ++ ) {
45+ testOneDecodeTextMateToken ( decodeMap , input [ i ] , expected [ i ] ) ;
1946 }
47+ }
48+
49+ test ( 'decodeTextMateToken JSON regression' , ( ) => {
50+ let input = [
51+ [ 'source.json' , 'meta.structure.dictionary.json' ] ,
52+ [ 'source.json' , 'meta.structure.dictionary.json' , 'support.type.property-name.json' , 'punctuation.support.type.property-name.begin.json' ] ,
53+ [ 'source.json' , 'meta.structure.dictionary.json' , 'support.type.property-name.json' ] ,
54+ [ 'source.json' , 'meta.structure.dictionary.json' , 'support.type.property-name.json' , 'punctuation.support.type.property-name.end.json' ] ,
55+ [ 'source.json' , 'meta.structure.dictionary.json' , 'meta.structure.dictionary.value.json' , 'punctuation.separator.dictionary.key-value.json' ] ,
56+ [ 'source.json' , 'meta.structure.dictionary.json' , 'meta.structure.dictionary.value.json' ] ,
57+ [ 'source.json' , 'meta.structure.dictionary.json' , 'meta.structure.dictionary.value.json' , 'string.quoted.double.json' , 'punctuation.definition.string.begin.json' ] ,
58+ [ 'source.json' , 'meta.structure.dictionary.json' , 'meta.structure.dictionary.value.json' , 'string.quoted.double.json' , 'punctuation.definition.string.end.json' ] ,
59+ [ 'source.json' , 'meta.structure.dictionary.json' , 'meta.structure.dictionary.value.json' , 'punctuation.separator.dictionary.pair.json' ]
60+ ] ;
61+
62+ let expected = [
63+ 'meta.structure.dictionary.json' ,
64+ 'meta.structure.dictionary.json.support.type.property-name.punctuation.begin' ,
65+ 'meta.structure.dictionary.json.support.type.property-name' ,
66+ 'meta.structure.dictionary.json.support.type.property-name.punctuation.end' ,
67+ 'meta.structure.dictionary.json.punctuation.value.separator.key-value' ,
68+ 'meta.structure.dictionary.json.value' ,
69+ 'meta.structure.dictionary.json.punctuation.begin.value.string.quoted.double.definition' ,
70+ 'meta.structure.dictionary.json.punctuation.end.value.string.quoted.double.definition' ,
71+ 'meta.structure.dictionary.json.punctuation.value.separator.pair'
72+ ] ;
73+
74+ testDecodeTextMateToken ( input , expected ) ;
75+ } ) ;
76+
77+ test ( 'decodeTextMateToken' , ( ) => {
78+ let input = getTestScopes ( ) ;
2079
2180 let expected = [
22- 'meta function js decl block type parameters paren cover object method declaration field member entity ' ,
23- 'meta function js decl block type parameters paren cover object method declaration field member parameter brace ' ,
24- 'meta function js decl block type parameters paren cover object method declaration field member parameter ' ,
25- 'meta function js decl block type parameters paren cover object method declaration field member name parameter ' ,
26- 'meta function js decl block type parameters paren cover object method declaration field member parameter ' ,
27- 'meta function js decl block type parameters paren cover object method declaration field member name parameter ' ,
28- 'meta function js decl block type parameters paren cover object method declaration field member parameter ' ,
29- 'meta function js decl block type parameters paren cover object method declaration field member name parameter ' ,
30- 'meta function js decl block type parameters paren cover object method declaration field member parameter brace round ' ,
31- 'meta function js decl block type parameters paren cover object method declaration field member ' ,
32- 'meta function js decl block type parameters paren cover object method declaration field member entity name ' ,
33- 'meta function js decl block type parameters paren cover object method declaration field member parameter brace round ' ,
34- 'meta function js decl block type parameters paren cover object method declaration field member name parameter variable ' ,
35- 'meta function js decl block type parameters paren cover object method declaration field member parameter brace round ' ,
36- 'meta function js decl block type parameters paren cover object method declaration field member ' ,
37- 'meta function js decl block type parameters paren cover object method declaration field member brace ' ,
38- 'meta function js decl block type parameters paren cover object method declaration field member ' ,
39- 'meta function js decl block type parameters paren cover object method declaration field member keyword operator ' ,
40- 'meta function js decl block type parameters paren cover object method declaration field member string ' ,
41- 'meta function js decl block type parameters paren cover object method declaration field member string ' ,
42- 'meta function js decl block type parameters paren cover object method declaration field member string ' ,
43- 'meta function js decl block type parameters paren cover object method declaration field member keyword operator ' ,
44- 'meta function js decl block type parameters paren cover object method declaration field member ' ,
45- 'meta function js decl block type parameters paren cover object method declaration field member keyword operator ' ,
46- 'meta function js decl block type parameters paren cover object method declaration field member string double ' ,
47- 'meta function js decl block type parameters paren cover object method declaration field member string double ' ,
48- 'meta function js decl block type parameters paren cover object method declaration field member string double ' ,
49- 'meta function js decl block type parameters paren cover object method declaration field member ' ,
50- 'meta function js decl block type parameters paren cover object method declaration field member brace array literal ' ,
51- 'meta function js decl block type parameters paren cover object method declaration field member array literal ' ,
52- 'meta function js decl block type parameters paren cover object method declaration field member brace array literal ' ,
53- 'meta function js decl block type parameters paren cover object method declaration field member keyword operator comparison ' ,
54- 'meta function js decl block type parameters paren cover object method declaration field member ' ,
55- 'meta function js decl block type parameters paren cover object method declaration field member brace curly ' ,
56- 'meta function js decl block type parameters paren cover object method declaration field member brace curly ' ,
57- 'meta function js decl block type parameters paren cover object method declaration field member name ' ,
58- 'meta function js decl block type parameters paren cover object method declaration field member ' ,
59- 'meta function js decl block type parameters paren cover object method declaration field member name ' ,
60- 'meta function js decl block type parameters paren cover object method declaration field member ' ,
61- 'meta function js decl block type parameters paren cover object method declaration field member '
81+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. entity.name ' ,
82+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. parameter. brace.round ' ,
83+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. parameter' ,
84+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. name. parameter.variable ' ,
85+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. parameter' ,
86+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. name. parameter.variable ' ,
87+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. parameter' ,
88+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. name. parameter.variable ' ,
89+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. parameter. brace. round' ,
90+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member' ,
91+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. entity. name.overload ' ,
92+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. parameter. brace. round' ,
93+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. name. parameter. variable' ,
94+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. parameter. brace. round' ,
95+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member' ,
96+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. brace.curly ' ,
97+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member' ,
98+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. keyword. operator.comparison ' ,
99+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. string.double ' ,
100+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. string.double ' ,
101+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. string.double ' ,
102+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. keyword. operator.arithmetic ' ,
103+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member' ,
104+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. keyword. operator.arithmetic ' ,
105+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. string. double' ,
106+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. string. double' ,
107+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. string. double' ,
108+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member' ,
109+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. brace. array. literal.square ' ,
110+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. array. literal' ,
111+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. brace. array. literal.square ' ,
112+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. keyword. operator. comparison' ,
113+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member' ,
114+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. brace. curly' ,
115+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. brace. curly' ,
116+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. name' ,
117+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member' ,
118+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member. name' ,
119+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member' ,
120+ 'meta. function.js. decl. block. type. parameters. paren. cover. object. method. declaration. field. member'
62121 ] ;
63122
64- assert . deepEqual ( actual , expected ) ;
123+ testDecodeTextMateToken ( input , expected ) ;
65124 } ) ;
66125} ) ;
67126
0 commit comments