This test checks highlighter correctness.


After highlighting 5 lines
1 : /** : javascript-comment[0-5]
2 :  * line #1 : javascript-comment[0-10]
3 :  * line #2 : javascript-comment[0-10]
4 :  * line #3 : javascript-comment[0-10]
5 :  * line #4 : javascript-comment[0-10]
6 :  * line #5 : null
7 :  * line #6 : null
8 :  * line #7 : null
9 :  * line #8 : null
10 :  * var a = new A(); //*/ : null
11 : some text : null
12 :  : null

After highlighting all lines
1 : /** : javascript-comment[0-5]
2 :  * line #1 : javascript-comment[0-10]
3 :  * line #2 : javascript-comment[0-10]
4 :  * line #3 : javascript-comment[0-10]
5 :  * line #4 : javascript-comment[0-10]
6 :  * line #5 : javascript-comment[0-10]
7 :  * line #6 : javascript-comment[0-10]
8 :  * line #7 : javascript-comment[0-10]
9 :  * line #8 : javascript-comment[0-10]
10 :  * var a = new A(); //*/ : javascript-comment[0-24]
11 : some text : javascript-ident[0-4] whitespace[4-5] javascript-ident[5-9]
12 :  :

After changing text model, but before updating highlights
1 : /** : javascript-comment[0-5]
2 :  * line #1 : javascript-comment[0-10]
3 :  * line #2 : javascript-comment[0-10]
4 : /** : null
5 :  * line #1 : null
6 :  * line #2 : null
7 :  * line #3 : null
8 :  * line #4 : null
9 :  * line #5 : null
10 :  * line #6 : null
11 :  * line #7 : null
12 :  * line #8 : null
13 :  * var a = new A(); //*/ : null
14 : some text : null
15 :  * line #6 : javascript-comment[0-10]
16 :  * line #7 : javascript-comment[0-10]
17 :  * line #8 : javascript-comment[0-10]
18 :  * var a = new A(); //*/ : javascript-comment[0-24]
19 : some text : javascript-ident[0-4] whitespace[4-5] javascript-ident[5-9]
20 :  :

After updating highlights
1 : /** : javascript-comment[0-5]
2 :  * line #1 : javascript-comment[0-10]
3 :  * line #2 : javascript-comment[0-10]
4 : /** : javascript-comment[0-4]
5 :  * line #1 : javascript-comment[0-10]
6 :  * line #2 : javascript-comment[0-10]
7 :  * line #3 : javascript-comment[0-10]
8 :  * line #4 : javascript-comment[0-10]
9 :  * line #5 : javascript-comment[0-10]
10 :  * line #6 : javascript-comment[0-10]
11 :  * line #7 : javascript-comment[0-10]
12 :  * line #8 : javascript-comment[0-10]
13 :  * var a = new A(); //*/ : javascript-comment[0-24]
14 : some text : javascript-ident[0-4] whitespace[4-5] javascript-ident[5-9]
15 :  * line #6 : whitespace[0-1] whitespace[2-3] javascript-ident[3-7] whitespace[7-8] javascript-number[9-10]
16 :  * line #7 : null
17 :  * line #8 : null
18 :  * var a = new A(); //*/ : null
19 : some text : null
20 :  : null

After highlighting up to the end
1 : /** : javascript-comment[0-5]
2 :  * line #1 : javascript-comment[0-10]
3 :  * line #2 : javascript-comment[0-10]
4 : /** : javascript-comment[0-4]
5 :  * line #1 : javascript-comment[0-10]
6 :  * line #2 : javascript-comment[0-10]
7 :  * line #3 : javascript-comment[0-10]
8 :  * line #4 : javascript-comment[0-10]
9 :  * line #5 : javascript-comment[0-10]
10 :  * line #6 : javascript-comment[0-10]
11 :  * line #7 : javascript-comment[0-10]
12 :  * line #8 : javascript-comment[0-10]
13 :  * var a = new A(); //*/ : javascript-comment[0-24]
14 : some text : javascript-ident[0-4] whitespace[4-5] javascript-ident[5-9]
15 :  * line #6 : whitespace[0-1] whitespace[2-3] javascript-ident[3-7] whitespace[7-8] javascript-number[9-10]
16 :  * line #7 : whitespace[0-1] whitespace[2-3] javascript-ident[3-7] whitespace[7-8] javascript-number[9-10]
17 :  * line #8 : whitespace[0-1] whitespace[2-3] javascript-ident[3-7] whitespace[7-8] javascript-number[9-10]
18 :  * var a = new A(); //*/ : whitespace[0-1] whitespace[2-3] javascript-keyword[3-6] whitespace[6-7] javascript-ident[7-8] whitespace[8-9] whitespace[10-11] javascript-keyword[11-14] whitespace[14-15] javascript-ident[15-16] whitespace[19-20] javascript-comment[20-24]
19 : some text : javascript-ident[0-4] whitespace[4-5] javascript-ident[5-9]
20 :  :

After changing the first line, and updating the highlights for the first 5 lines
1 : foo /* comment */ : javascript-ident[0-3] whitespace[3-4] javascript-comment[4-17]
2 :  * line #1 : whitespace[0-1] whitespace[2-3] javascript-ident[3-7] whitespace[7-8] javascript-number[9-10]
3 :  * line #2 : whitespace[0-1] whitespace[2-3] javascript-ident[3-7] whitespace[7-8] javascript-number[9-10]
4 : /** : javascript-comment[0-5]
5 :  * line #1 : javascript-comment[0-10]
6 :  * line #2 : javascript-comment[0-10]
7 :  * line #3 : javascript-comment[0-10]
8 :  * line #4 : javascript-comment[0-10]
9 :  * line #5 : javascript-comment[0-10]
10 :  * line #6 : javascript-comment[0-10]
11 :  * line #7 : javascript-comment[0-10]
12 :  * line #8 : javascript-comment[0-10]
13 :  * var a = new A(); //*/ : javascript-comment[0-24]
14 : some text : javascript-ident[0-4] whitespace[4-5] javascript-ident[5-9]
15 :  * line #6 : whitespace[0-1] whitespace[2-3] javascript-ident[3-7] whitespace[7-8] javascript-number[9-10]
16 :  * line #7 : whitespace[0-1] whitespace[2-3] javascript-ident[3-7] whitespace[7-8] javascript-number[9-10]
17 :  * line #8 : whitespace[0-1] whitespace[2-3] javascript-ident[3-7] whitespace[7-8] javascript-number[9-10]
18 :  * var a = new A(); //*/ : whitespace[0-1] whitespace[2-3] javascript-keyword[3-6] whitespace[6-7] javascript-ident[7-8] whitespace[8-9] whitespace[10-11] javascript-keyword[11-14] whitespace[14-15] javascript-ident[15-16] whitespace[19-20] javascript-comment[20-24]
19 : some text : javascript-ident[0-4] whitespace[4-5] javascript-ident[5-9]
20 :  :

Again change the first line, but update only first 2 lines (invalidate update for the lines below)
1 : foo /* comment */ /* : javascript-ident[0-3] whitespace[3-4] javascript-comment[4-17] whitespace[17-18] javascript-comment[18-21]
2 :  * line #1 : javascript-comment[0-10]
3 :  * line #2 : null
4 : /** : null
5 :  * line #1 : null
6 :  * line #2 : null
7 :  * line #3 : null
8 :  * line #4 : null
9 :  * line #5 : null
10 :  * line #6 : null
11 :  * line #7 : null
12 :  * line #8 : null
13 :  * var a = new A(); //*/ : null
14 : some text : null
15 :  * line #6 : null
16 :  * line #7 : null
17 :  * line #8 : null
18 :  * var a = new A(); //*/ : null
19 : some text : null
20 :  : null

