KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > lib > lexer > test > simple > CustomEmbeddingTest


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.lib.lexer.test.simple;
21
22 import org.netbeans.api.lexer.TokenChange;
23 import org.netbeans.api.lexer.TokenHierarchy;
24 import org.netbeans.api.lexer.TokenHierarchyEvent;
25 import org.netbeans.api.lexer.TokenHierarchyListener;
26 import org.netbeans.api.lexer.TokenId;
27 import org.netbeans.api.lexer.TokenSequence;
28 import org.netbeans.junit.NbTestCase;
29 import org.netbeans.lib.lexer.test.LexerTestUtilities;
30 import org.netbeans.lib.lexer.test.simple.SimplePlainTokenId;
31 import org.netbeans.spi.lexer.LanguageEmbedding;
32
33 /**
34  * Test several simple lexer impls.
35  *
36  * @author mmetelka
37  */

38 public class CustomEmbeddingTest extends NbTestCase {
39     
40     public CustomEmbeddingTest(String JavaDoc testName) {
41         super(testName);
42     }
43     
44     protected void setUp() throws java.lang.Exception JavaDoc {
45     }
46
47     protected void tearDown() throws java.lang.Exception JavaDoc {
48     }
49
50     public void testCreateEmbedding() {
51         String JavaDoc text = "abc/*def ghi */// line comment";
52         TokenHierarchy<?> hi = TokenHierarchy.create(text, SimpleTokenId.language());
53         THListener listener = new THListener();
54         hi.addTokenHierarchyListener(listener);
55         TokenSequence<? extends TokenId> ts = hi.tokenSequence();
56         assertTrue(ts.moveNext());
57         LexerTestUtilities.assertTokenEquals(ts, SimpleTokenId.IDENTIFIER, "abc", 0);
58         assertTrue(ts.moveNext());
59         LexerTestUtilities.assertTokenEquals(ts, SimpleTokenId.BLOCK_COMMENT, "/*def ghi */", 3);
60         assertTrue(ts.moveNext());
61         LexerTestUtilities.assertTokenEquals(ts, SimpleTokenId.LINE_COMMENT, "// line comment", 15);
62         assertTrue(ts.createEmbedding(SimpleTokenId.language(), 3, 0));
63         
64         // Check the fired event
65
TokenHierarchyEvent evt = listener.fetchLastEvent();
66         assertNotNull(evt);
67         TokenChange<? extends TokenId> tc = evt.tokenChange();
68         assertNotNull(tc);
69         assertEquals(2, tc.index());
70         assertEquals(15, tc.offset());
71         assertEquals(0, tc.addedTokenCount());
72         assertEquals(0, tc.removedTokenCount());
73         assertEquals(SimpleTokenId.language(), tc.language());
74         assertEquals(1, tc.embeddedChangeCount());
75         TokenChange<? extends TokenId> etc = tc.embeddedChange(0);
76         assertEquals(0, etc.index());
77         assertEquals(18, etc.offset());
78         assertEquals(0, etc.addedTokenCount()); // 0 to allow for lazy lexing where this would be unknowns
79
assertEquals(0, etc.removedTokenCount());
80         assertEquals(SimpleTokenId.language(), etc.language());
81         assertEquals(0, etc.embeddedChangeCount());
82         
83         // Test the contents of the embedded sequence
84
TokenSequence<? extends TokenId> ets = ts.embedded();
85         assertTrue(ets.moveNext());
86         LexerTestUtilities.assertTokenEquals(ets, SimpleTokenId.IDENTIFIER, "line", 18);
87         assertTrue(ets.moveNext());
88         LexerTestUtilities.assertTokenEquals(ets, SimpleTokenId.WHITESPACE, " ", 22);
89         assertTrue(ets.moveNext());
90         LexerTestUtilities.assertTokenEquals(ets, SimpleTokenId.IDENTIFIER, "comment", 23);
91         assertFalse(ets.moveNext());
92         
93         // Move main TS back and try extra embedding on comment
94
assertTrue(ts.movePrevious());
95         assertTrue(ts.createEmbedding(SimpleTokenId.language(), 2, 2));
96         ets = ts.embedded(); // Should be the explicit one
97
assertTrue(ets.moveNext());
98         LexerTestUtilities.assertTokenEquals(ets, SimpleTokenId.IDENTIFIER, "def", 5);
99         assertTrue(ets.moveNext());
100         LexerTestUtilities.assertTokenEquals(ets, SimpleTokenId.WHITESPACE, " ", 8);
101         assertTrue(ets.moveNext());
102         LexerTestUtilities.assertTokenEquals(ets, SimpleTokenId.IDENTIFIER, "ghi", 9);
103         assertTrue(ets.moveNext());
104         LexerTestUtilities.assertTokenEquals(ets, SimpleTokenId.WHITESPACE, " ", 12);
105         assertFalse(ets.moveNext());
106         
107         // Get the default embedding - should be available as well
108
ets = ts.embedded(SimplePlainTokenId.language()); // Should be the explicit one
109
assertTrue(ets.moveNext());
110         LexerTestUtilities.assertTokenEquals(ets, SimplePlainTokenId.WORD, "def", 5);
111         assertTrue(ets.moveNext());
112         LexerTestUtilities.assertTokenEquals(ets, SimplePlainTokenId.WHITESPACE, " ", 8);
113         assertTrue(ets.moveNext());
114         LexerTestUtilities.assertTokenEquals(ets, SimplePlainTokenId.WORD, "ghi", 9);
115         assertTrue(ets.moveNext());
116         LexerTestUtilities.assertTokenEquals(ets, SimplePlainTokenId.WHITESPACE, " ", 12);
117         assertFalse(ets.moveNext());
118     }
119     
120     public void testEmbeddingCaching() throws Exception JavaDoc {
121         LanguageEmbedding<? extends TokenId> e = LanguageEmbedding.create(SimpleTokenId.language(), 2, 1);
122         assertSame(SimpleTokenId.language(), e.language());
123         assertSame(2, e.startSkipLength());
124         assertSame(1, e.endSkipLength());
125         LanguageEmbedding<? extends TokenId> e2 = LanguageEmbedding.create(SimpleTokenId.language(), 2, 1);
126         assertSame(e, e2);
127     }
128     
129     private static final class THListener implements TokenHierarchyListener {
130         
131         private TokenHierarchyEvent lastEvent;
132     
133         public void tokenHierarchyChanged(TokenHierarchyEvent evt) {
134             this.lastEvent = evt;
135         }
136         
137         public TokenHierarchyEvent fetchLastEvent() {
138             TokenHierarchyEvent evt = lastEvent;
139             lastEvent = null;
140             return evt;
141         }
142
143     }
144
145 }
146
Popular Tags