001: /*
002: * LLAnalyserTest.java
003: * JUnit based test
004: *
005: * Created on March 26, 2006, 9:57 AM
006: */
007:
008: package org.netbeans.modules.languages.parser;
009:
010: import java.util.Arrays;
011: import java.util.Iterator;
012: import java.util.List;
013: import java.io.IOException;
014: import java.util.ArrayList;
015: import junit.framework.TestCase;
016:
017: import org.netbeans.api.languages.CharInput;
018: import org.netbeans.api.languages.ParseException;
019: import org.netbeans.api.languages.ASTToken;
020: import org.netbeans.api.languages.ASTNode;
021: import org.netbeans.api.languages.TokenInput;
022: import org.netbeans.modules.languages.LanguageImpl;
023: import org.netbeans.modules.languages.TestLanguage;
024: import org.netbeans.modules.languages.TestUtils;
025:
026: /**
027: *
028: * @author Jan Jancura
029: */
030: public class AnalyserTest extends TestCase {
031:
032: public AnalyserTest(String testName) {
033: super (testName);
034: }
035:
036: private static String mimeType = "text/test";
037:
038: public void test1() throws ParseException {
039: TestLanguage language = new TestLanguage();
040: language.addToken(0, "identifier");
041: language.addToken(1, "operator");
042:
043: language.addRule("S", Arrays.asList(new Object[] {
044: ASTToken.create(language, "identifier", null, 0,
045: "identifier".length(), null), "S" }));
046: language.addRule("S", Arrays.asList(new Object[] {
047: ASTToken.create(language, "operator", "{", 0,
048: "operator".length(), null),
049: "S",
050: ASTToken.create(language, "operator", "}", 0,
051: "operator".length(), null), "S" }));
052: language.addRule("S", Arrays.asList(new Object[] {}));
053:
054: //PetraTest.print (Petra.first (r, 5));
055: TokenInput input = TokenInputUtils.create(new ASTToken[] {
056: ASTToken.create(language, "identifier", "asd", 0, "asd"
057: .length(), null),
058: ASTToken.create(language, "identifier", "ss", 0, "ss"
059: .length(), null),
060: ASTToken.create(language, "operator", "{", 0, "{"
061: .length(), null),
062: ASTToken.create(language, "identifier", "a", 0, "a"
063: .length(), null),
064: ASTToken.create(language, "operator", "{", 0, "{"
065: .length(), null),
066: ASTToken.create(language, "operator", "}", 0, "}"
067: .length(), null),
068: ASTToken.create(language, "identifier", "asd", 0, "asd"
069: .length(), null),
070: ASTToken.create(language, "operator", "}", 0, "}"
071: .length(), null), });
072: assertNotNull(language.getAnalyser().read(input, false,
073: new ArrayList<SyntaxError>(), new boolean[] { false }));
074: assert (input.eof());
075: }
076:
077: public void test4() throws ParseException, IOException {
078: LanguageImpl language = TestUtils
079: .createLanguage("TOKEN:operator:( '{' | '}' | '.' | ',' | '(' | ')' )"
080: + "TOKEN:separator:( ';' )"
081: + "TOKEN:whitespace:( ['\\n' '\\r' ' ' '\\t']+ )"
082: + "TOKEN:keyword:( 'void' | 'public' )"
083: + "TOKEN:identifier:( ['a'-'z' 'A'-'Z' '0'-'9' '_' '-' '$' '%']+ )"
084: + "SKIP:whitespace "
085: + "S = variable S;"
086: + "S = ;"
087: + "variable = modifiers <keyword> <identifier> <separator,';'>;"
088: + "variable = modifiers <identifier> <identifier> <separator,';'>;"
089: + "modifiers = <keyword,'public'> modifiers;"
090: + "modifiers = ;");
091: language.read();
092: CharInput input = new StringInput("void a;" + "public ii name;");
093: ASTNode n = language.getAnalyser().read(
094: TokenInputUtils.create(language, language.getParser(),
095: input), false, new ArrayList<SyntaxError>(),
096: new boolean[] { false });
097: assertNotNull(n);
098: assertTrue(input.eof());
099: }
100:
101: public void test5() throws ParseException, IOException {
102: LanguageImpl language = TestUtils
103: .createLanguage("TOKEN:TAG:( '<' ['a'-'z']+ )"
104: + "TOKEN:SYMBOL:( '>' | '=')"
105: + "TOKEN:ENDTAG:( '</' ['a'-'z']+ )"
106: + "TOKEN:ATTRIBUTE:( ['a'-'z']+ )"
107: + "TOKEN:ATTR_VALUE:( '\\\"' [^ '\\n' '\\r' '\\\"']+ '\\\"' )"
108: + "TOKEN:VALUE:( '\\\"' [^ '\\n' '\\r' '\\\"']+ '\\\"' )"
109: + "TOKEN:TEXT:( [^'<']+ )"
110: + "S = tags;"
111: + "tags = (startTag | endTag | etext)*;"
112: + "startTag = <TAG> (attribute)* ( <SYMBOL, '>'> | <SYMBOL, '/>'> );"
113: + "endTag = <ENDTAG> <SYMBOL, '>'>;"
114: + "attribute = <ATTRIBUTE>;"
115: + "attribute = <ATTR_VALUE>;"
116: + "attribute = <ATTRIBUTE> <SYMBOL,'='> <VALUE>;"
117: + "etext = (<TEXT>)*;");
118: language.read();
119: CharInput input = new StringInput("<a></a>");
120: ASTNode n = language.getAnalyser().read(
121: TokenInputUtils.create(language, language.getParser(),
122: input), false, new ArrayList<SyntaxError>(),
123: new boolean[] { false });
124: //S ystem.out.println(n.print ());
125: assertTrue(input.eof());
126: assertEquals(1, n.getChildren().size());
127: assertEquals("S", n.getNT());
128: n = (ASTNode) n.getChildren().get(0);
129: assertEquals(2, n.getChildren().size());
130: assertEquals("tags", n.getNT());
131: assertEquals("startTag", ((ASTNode) n.getChildren().get(0))
132: .getNT());
133: assertEquals("endTag", ((ASTNode) n.getChildren().get(1))
134: .getNT());
135: n = (ASTNode) n.getChildren().get(0);
136: assertEquals(2, n.getChildren().size());
137: assertEquals("TAG", ((ASTToken) n.getChildren().get(0))
138: .getTypeName());
139: assertEquals("SYMBOL", ((ASTToken) n.getChildren().get(1))
140: .getTypeName());
141: }
142:
143: private void print(List l, String indent) {
144: Iterator it = l.iterator();
145: while (it.hasNext()) {
146: Object next = it.next();
147: System.out.println(indent + next);
148: if (next instanceof ASTToken)
149: continue;
150: print((List) it.next(), indent + " ");
151: }
152: }
153: }
|