001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: package org.netbeans.lib.lexer;
042:
043: import java.util.List;
044: import org.netbeans.api.lexer.Language;
045: import org.netbeans.api.lexer.LanguagePath;
046: import org.netbeans.api.lexer.TokenHierarchy;
047: import org.netbeans.api.lexer.TokenId;
048: import org.netbeans.api.lexer.TokenSequence;
049: import org.netbeans.junit.NbTestCase;
050: import org.netbeans.lib.lexer.test.LexerTestUtilities;
051: import org.netbeans.lib.lexer.test.ModificationTextDocument;
052: import org.netbeans.lib.lexer.lang.TestJavadocTokenId;
053: import org.netbeans.lib.lexer.lang.TestTokenId;
054: import org.netbeans.lib.lexer.lang.TestHTMLTagTokenId;
055:
056: /**
057: * Test collecting and maintaining of token sequence lists.
058: *
059: * @author Miloslav Metelka
060: */
061: public class TokenSequenceListTest extends NbTestCase {
062:
063: public TokenSequenceListTest(String testName) {
064: super (testName);
065: }
066:
067: protected void setUp() throws Exception {
068: }
069:
070: public void testBatch() throws Exception {
071: TokenHierarchy<?> tokenHierarchy = TokenHierarchy.create(
072: getText1(), TestTokenId.language());
073: testHierarchy(tokenHierarchy);
074: }
075:
076: public void testInc() throws Exception {
077: ModificationTextDocument doc = new ModificationTextDocument();
078: doc.insertString(0, getText1(), null);
079: doc.putProperty(Language.class, TestTokenId.language());
080: testHierarchy(TokenHierarchy.get(doc));
081: }
082:
083: public void testBoundaries() throws Exception {
084: ModificationTextDocument doc = new ModificationTextDocument();
085: doc.insertString(0, getText1(), null);
086: doc.putProperty(Language.class, TestTokenId.language());
087:
088: LanguagePath lp = LanguagePath.get(TestTokenId.language())
089: .embedded(TestJavadocTokenId.language()).embedded(
090: TestHTMLTagTokenId.language());
091:
092: TokenHierarchy<?> tokenHierarchy = TokenHierarchy.get(doc);
093: List<TokenSequence<?>> tsList = tokenHierarchy
094: .tokenSequenceList(lp, 35, 48);
095:
096: assertEquals(3, tsList.size());
097: TokenSequence<?> ts = tsList.get(0);
098: assertTrue(ts.moveNext());
099: LexerTestUtilities.assertTokenEquals(ts,
100: TestHTMLTagTokenId.TEXT, "tq", -1);
101: assertTrue(ts.moveNext());
102: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.GT,
103: ">", -1);
104:
105: ts = tsList.get(1);
106: assertTrue(ts.moveNext());
107: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.LT,
108: "<", -1);
109: assertTrue(ts.moveNext());
110: LexerTestUtilities.assertTokenEquals(ts,
111: TestHTMLTagTokenId.TEXT, "/tq", -1);
112: assertTrue(ts.moveNext());
113: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.GT,
114: ">", -1);
115:
116: ts = tsList.get(2);
117: assertTrue(ts.moveNext());
118: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.LT,
119: "<", -1);
120: assertTrue(ts.moveNext());
121: LexerTestUtilities.assertTokenEquals(ts,
122: TestHTMLTagTokenId.TEXT, "code", -1);
123: }
124:
125: private String getText1() {
126: return "ab/**<t> x*/c/**u<t2>v*/jkl/**hey<tq>aaa</tq><code>sample</code>*/";
127: }
128:
129: private void testHierarchy(TokenHierarchy<?> tokenHierarchy)
130: throws Exception {
131: LanguagePath lp = LanguagePath.get(TestTokenId.language());
132: List<TokenSequence<?>> tsList = tokenHierarchy
133: .tokenSequenceList(lp, 0, Integer.MAX_VALUE);
134: assertEquals(1, tsList.size());
135: TokenSequence<?> ts = tsList.get(0);
136: assertTrue(ts.moveNext());
137: LexerTestUtilities.assertTokenEquals(ts,
138: TestTokenId.IDENTIFIER, "ab", 0);
139: assertTrue(ts.moveNext());
140: LexerTestUtilities.assertTokenEquals(ts,
141: TestTokenId.JAVADOC_COMMENT, "/**<t> x*/", 2);
142: assertTrue(ts.moveNext());
143: LexerTestUtilities.assertTokenEquals(ts,
144: TestTokenId.IDENTIFIER, "c", 12);
145: assertTrue(ts.moveNext());
146: LexerTestUtilities.assertTokenEquals(ts,
147: TestTokenId.JAVADOC_COMMENT, "/**u<t2>v*/", 13);
148: assertTrue(ts.moveNext());
149: LexerTestUtilities.assertTokenEquals(ts,
150: TestTokenId.IDENTIFIER, "jkl", 24);
151: assertTrue(ts.moveNext());
152: LexerTestUtilities.assertTokenEquals(ts,
153: TestTokenId.JAVADOC_COMMENT,
154: "/**hey<tq>aaa</tq><code>sample</code>*/", 27);
155:
156: // Collect all javadocs
157: lp = lp.embedded(TestJavadocTokenId.language());
158: tsList = tokenHierarchy.tokenSequenceList(lp, 0,
159: Integer.MAX_VALUE);
160: assertEquals(3, tsList.size());
161: ts = tsList.get(0);
162: assertTrue(ts.moveNext());
163: LexerTestUtilities.assertTokenEquals(ts,
164: TestJavadocTokenId.HTML_TAG, "<t>", 5);
165: assertTrue(ts.moveNext());
166: LexerTestUtilities.assertTokenEquals(ts,
167: TestJavadocTokenId.OTHER_TEXT, " ", 8);
168: assertTrue(ts.moveNext());
169: LexerTestUtilities.assertTokenEquals(ts,
170: TestJavadocTokenId.IDENT, "x", 9);
171:
172: ts = tsList.get(1);
173: assertTrue(ts.moveNext());
174: LexerTestUtilities.assertTokenEquals(ts,
175: TestJavadocTokenId.IDENT, "u", -1);
176: assertTrue(ts.moveNext());
177: LexerTestUtilities.assertTokenEquals(ts,
178: TestJavadocTokenId.HTML_TAG, "<t2>", -1);
179: assertTrue(ts.moveNext());
180: LexerTestUtilities.assertTokenEquals(ts,
181: TestJavadocTokenId.IDENT, "v", -1);
182:
183: ts = tsList.get(2);
184: assertTrue(ts.moveNext());
185: LexerTestUtilities.assertTokenEquals(ts,
186: TestJavadocTokenId.IDENT, "hey", -1);
187: assertTrue(ts.moveNext());
188: LexerTestUtilities.assertTokenEquals(ts,
189: TestJavadocTokenId.HTML_TAG, "<tq>", -1);
190: assertTrue(ts.moveNext());
191: LexerTestUtilities.assertTokenEquals(ts,
192: TestJavadocTokenId.IDENT, "aaa", -1);
193: assertTrue(ts.moveNext());
194: LexerTestUtilities.assertTokenEquals(ts,
195: TestJavadocTokenId.HTML_TAG, "</tq>", -1);
196: assertTrue(ts.moveNext());
197: LexerTestUtilities.assertTokenEquals(ts,
198: TestJavadocTokenId.HTML_TAG, "<code>", -1);
199: assertTrue(ts.moveNext());
200: LexerTestUtilities.assertTokenEquals(ts,
201: TestJavadocTokenId.IDENT, "sample", -1);
202: assertTrue(ts.moveNext());
203: LexerTestUtilities.assertTokenEquals(ts,
204: TestJavadocTokenId.HTML_TAG, "</code>", -1);
205:
206: // Collect embedded html tags
207: lp = lp.embedded(TestHTMLTagTokenId.language());
208: tsList = tokenHierarchy.tokenSequenceList(lp, 0,
209: Integer.MAX_VALUE);
210: assertEquals(6, tsList.size());
211: ts = tsList.get(0);
212: assertTrue(ts.moveNext());
213: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.LT,
214: "<", -1);
215: assertTrue(ts.moveNext());
216: LexerTestUtilities.assertTokenEquals(ts,
217: TestHTMLTagTokenId.TEXT, "t", -1);
218: assertTrue(ts.moveNext());
219: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.GT,
220: ">", -1);
221:
222: ts = tsList.get(1);
223: assertTrue(ts.moveNext());
224: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.LT,
225: "<", -1);
226: assertTrue(ts.moveNext());
227: LexerTestUtilities.assertTokenEquals(ts,
228: TestHTMLTagTokenId.TEXT, "t2", -1);
229: assertTrue(ts.moveNext());
230: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.GT,
231: ">", -1);
232:
233: ts = tsList.get(2);
234: assertTrue(ts.moveNext());
235: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.LT,
236: "<", -1);
237: assertTrue(ts.moveNext());
238: LexerTestUtilities.assertTokenEquals(ts,
239: TestHTMLTagTokenId.TEXT, "tq", -1);
240: assertTrue(ts.moveNext());
241: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.GT,
242: ">", -1);
243:
244: ts = tsList.get(3);
245: assertTrue(ts.moveNext());
246: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.LT,
247: "<", -1);
248: assertTrue(ts.moveNext());
249: LexerTestUtilities.assertTokenEquals(ts,
250: TestHTMLTagTokenId.TEXT, "/tq", -1);
251: assertTrue(ts.moveNext());
252: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.GT,
253: ">", -1);
254:
255: ts = tsList.get(4);
256: assertTrue(ts.moveNext());
257: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.LT,
258: "<", -1);
259: assertTrue(ts.moveNext());
260: LexerTestUtilities.assertTokenEquals(ts,
261: TestHTMLTagTokenId.TEXT, "code", -1);
262: assertTrue(ts.moveNext());
263: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.GT,
264: ">", -1);
265:
266: ts = tsList.get(5);
267: assertTrue(ts.moveNext());
268: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.LT,
269: "<", -1);
270: assertTrue(ts.moveNext());
271: LexerTestUtilities.assertTokenEquals(ts,
272: TestHTMLTagTokenId.TEXT, "/code", -1);
273: assertTrue(ts.moveNext());
274: LexerTestUtilities.assertTokenEquals(ts, TestHTMLTagTokenId.GT,
275: ">", -1);
276:
277: }
278:
279: }
|