1 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 38 public class CustomEmbeddingTest extends NbTestCase { 39 40 public CustomEmbeddingTest(String testName) { 41 super(testName); 42 } 43 44 protected void setUp() throws java.lang.Exception { 45 } 46 47 protected void tearDown() throws java.lang.Exception { 48 } 49 50 public void testCreateEmbedding() { 51 String 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 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()); assertEquals(0, etc.removedTokenCount()); 80 assertEquals(SimpleTokenId.language(), etc.language()); 81 assertEquals(0, etc.embeddedChangeCount()); 82 83 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 assertTrue(ts.movePrevious()); 95 assertTrue(ts.createEmbedding(SimpleTokenId.language(), 2, 2)); 96 ets = ts.embedded(); 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 ets = ts.embedded(SimplePlainTokenId.language()); 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 { 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 |