001: /*
002: * ParserTest.java
003: * JUnit based test
004: *
005: * Created on January 30, 2006, 9:32 PM
006: */
007:
008: package org.netbeans.modules.languages.parser;
009:
010: import org.netbeans.api.languages.ASTToken;
011: import org.netbeans.api.languages.CharInput;
012: import org.netbeans.api.languages.ParseException;
013: import java.util.ArrayList;
014: import java.util.List;
015: import junit.framework.*;
016:
017: import org.netbeans.modules.languages.Feature;
018: import org.netbeans.modules.languages.TestLanguage;
019: import org.netbeans.modules.languages.TokenType;
020: import org.netbeans.modules.languages.parser.Parser.Cookie;
021:
022: /**
023: *
024: * @author Jan Jancura
025: */
026: public class ParserTest extends TestCase {
027:
028: public ParserTest(String testName) {
029: super (testName);
030: }
031:
032: // public void testRead123 () throws ParseException {
033: // Parser abc = Parser.create ("abc", "abc");
034: // Parser axd = Parser.create ("a.d", "axd");
035: // Parser p = abc.merge (axd);
036: // Input in = Input.create (
037: // "abd"
038: // );
039: // assertEquals ("state: " + p.getState () + " text: " + in, "axd", p.read (p.getState (), in));
040: // assertEquals (0, in.current ());
041: // assertEquals (true, in.eof ());
042: // }
043:
044: // public void testRead () throws ParseException {
045: // Parser abc = Parser.create ("(abc)*|(ab)*", "abc");
046: // Parser abcd = Parser.create ("abcd", "abcd");
047: // Parser whitespace = Parser.create ("[ \n\r\t]+", "whitespace");
048: // Parser p = abc.merge (abcd).append (whitespace).star ();
049: // Input in = Input.create (
050: // "abab abcd abcabcd abcd"
051: // );
052: // assertEquals ("state: " + p.getState () + " text: " + in, "abc", p.read (p.getState (), in));
053: // assertEquals ("state: " + p.getState () + " text: " + in, "whitespace", p.read (p.getState (), in));
054: // assertEquals ("state: " + p.getState () + " text: " + in, "abcd", p.read (p.getState (), in));
055: // assertEquals ("state: " + p.getState () + " text: " + in, "whitespace", p.read (p.getState (), in));
056: // assertEquals ("state: " + p.getState () + " text: " + in, "abc", p.read (p.getState (), in));
057: // assertEquals ("state: " + p.getState () + " text: " + in, null, p.read (p.getState (), in));
058: // in.read ();
059: // assertEquals ("state: " + p.getState () + " text: " + in, "whitespace", p.read (p.getState (), in));
060: // assertEquals ("state: " + p.getState () + " text: " + in, "abcd", p.read (p.getState (), in));
061: // assertEquals (0, in.current ());
062: // assertEquals (true, in.eof ());
063: // }
064: //
065: // public void testRead1 () throws ParseException {
066: // Parser value = Parser.create ("[^\n]+", "VALUE");
067: // Parser eol = Parser.create ("[\n]", "EOL");
068: // Parser p = value.merge (eol).star ();
069: // Input in = Input.create (
070: // "test:ttt\n" +
071: // "test\n" +
072: // "#comment"
073: // );
074: // assertEquals ("state: " + p.getState () + " text: " + in, "VALUE", p.read (p.getState (), in));
075: // assertEquals ("state: " + p.getState () + " text: " + in, "EOL", p.read (p.getState (), in));
076: // assertEquals ("state: " + p.getState () + " text: " + in, "VALUE", p.read (p.getState (), in));
077: // assertEquals ("state: " + p.getState () + " text: " + in, "EOL", p.read (p.getState (), in));
078: // assertEquals ("state: " + p.getState () + " text: " + in, "VALUE", p.read (p.getState (), in));
079: // assertEquals (0, in.current ());
080: // assertEquals (true, in.eof ());
081: // }
082: //
083: // public void testReadManifest () throws ParseException {
084: // Parser p = Parser.create ();
085: // p.add ("LINE_COMMENT", "#[^\n\r]*");
086: // p.add ("EOL", "[\n\r][\n\r]?");
087: // p.add (p.DEFAULT_STATE, "NAME", "[^:\n\r]*", "STATE_COLON");
088: // p.add ("STATE_COLON", "COLON", ":", "STATE_VALUE");
089: // p.add ("STATE_COLON", "EOL", "[\n\r][\n\r]?", p.DEFAULT_STATE);
090: // p.add ("STATE_VALUE", "VALUE", "[^\n\r]*", p.DEFAULT_STATE);
091: //
092: // Input in = Input.create (
093: // "#comment\n" +
094: // "test:ttt\n" +
095: // "#comment\n" +
096: // "test\n" +
097: // "t:t"
098: // );
099: // S ystem.out.println(p);
100: // assertEquals ("state: " + p.getState () + " text: " + in, "LINE_COMMENT", p.read (p.getState (), in));
101: // assertEquals ("state: " + p.getState () + " text: " + in, "EOL", p.read (p.getState (), in));
102: // assertEquals ("state: " + p.getState () + " text: " + in, "NAME", p.read (p.getState (), in));
103: // assertEquals ("state: " + p.getState () + " text: " + in, "COLON", p.read (p.getState (), in));
104: // assertEquals ("state: " + p.getState () + " text: " + in, "VALUE", p.read (p.getState (), in));
105: // assertEquals ("state: " + p.getState () + " text: " + in, "EOL", p.read (p.getState (), in));
106: // assertEquals ("state: " + p.getState () + " text: " + in, "LINE_COMMENT", p.read (p.getState (), in));
107: // assertEquals ("state: " + p.getState () + " text: " + in, "EOL", p.read (p.getState (), in));
108: // assertEquals ("state: " + p.getState () + " text: " + in, "NAME", p.read (p.getState (), in));
109: // assertEquals ("state: " + p.getState () + " text: " + in, "EOL", p.read (p.getState (), in));
110: // assertEquals ("state: " + p.getState () + " text: " + in, "NAME", p.read (p.getState (), in));
111: // assertEquals ("state: " + p.getState () + " text: " + in, "COLON", p.read (p.getState (), in));
112: // assertEquals ("state: " + p.getState () + " text: " + in, "VALUE", p.read (p.getState (), in));
113: // assertEquals (0, in.current ());
114: // assertEquals (true, in.eof ());
115: // }
116: //
117:
118: private static TestLanguage create(String[] l)
119: throws ParseException {
120: TestLanguage language = new TestLanguage();
121: List<TokenType> rules = new ArrayList<TokenType>();
122: int i, k = l.length;
123: for (i = 0; i < k; i += 4) {
124: String tokenName = (String) l[i + 1];
125: String pattern = (String) l[i + 2];
126: language.addToken((int) i / 4, tokenName, Pattern
127: .create(pattern), (String) l[i], (String) l[i + 3],
128: (int) i / 4, null);
129: }
130: return language;
131: }
132:
133: public void testReadJava() throws ParseException {
134: TestLanguage language = create(new String[] {
135: null,
136: "comment",
137: "'/*'-'*/'",
138: null,
139: null,
140: "comment",
141: "'//'[^'\n''\r']*",
142: null,
143: null,
144: "keyword",
145: "'if'|'else'|'public'|'static'|'private'|'protected'|'class'|'extends'|'import'|'package'|'try'|'int'|'false'|'true'|'void'",
146: null,
147: null,
148: "operator",
149: "['\\\\''/''*''-''+''.'',''=''{''}''('')''!''@''#''$''%''^''&''~''|'';']",
150: null,
151: null,
152: "string",
153: "'\\\"'[^'\\\"']*'\\\"'",
154: null,
155: null,
156: "char",
157: "'\\\''[^'\\\'']'\\\''",
158: null,
159: null,
160: "number",
161: "['0'-'9']['0'-'9''.']*",
162: null,
163: null,
164: "whitespace",
165: "[' ''\t''\n''\r']+",
166: null,
167: null,
168: "identifier",
169: "['a'-'z''A'-'Z'][^' ''\\t''\\n''\\r''/''*''-''+''.'',''=''{''}''('')''!''@''#''$''%''^''&''~''|''\\\\'';']*",
170: null });
171:
172: CharInput in = new StringInput("/** dsfsf\n"
173: + " asd as * asdf */ " + "package ifa.vv.b;\n"
174: + "import a.v;\n" + "\n"
175: + "public class Asd extends sd {\n"
176: + " void main (String[] s) {\n"
177: + " return \"asd\" + \'a\' + 123;\n" + " }\n"
178: + "}");
179: Cookie c = new MyCookie();
180: Parser parser = language.getParser();
181: assertEquals("state: " + c.getState() + " text: " + in,
182: "comment", ((ASTToken) parser.read(c, in, language))
183: .getTypeName());
184: assertEquals("state: " + c.getState() + " text: " + in,
185: "whitespace", ((ASTToken) parser.read(c, in, language))
186: .getTypeName());
187: assertEquals("state: " + c.getState() + " text: " + in,
188: "keyword", ((ASTToken) parser.read(c, in, language))
189: .getTypeName());
190: assertEquals("state: " + c.getState() + " text: " + in,
191: "whitespace", ((ASTToken) parser.read(c, in, language))
192: .getTypeName());
193: assertEquals("state: " + c.getState() + " text: " + in,
194: "identifier", ((ASTToken) parser.read(c, in, language))
195: .getTypeName());
196: assertEquals("state: " + c.getState() + " text: " + in,
197: "operator", ((ASTToken) parser.read(c, in, language))
198: .getTypeName());
199: assertEquals("state: " + c.getState() + " text: " + in,
200: "identifier", ((ASTToken) parser.read(c, in, language))
201: .getTypeName());
202: assertEquals("state: " + c.getState() + " text: " + in,
203: "operator", ((ASTToken) parser.read(c, in, language))
204: .getTypeName());
205: assertEquals("state: " + c.getState() + " text: " + in,
206: "identifier", ((ASTToken) parser.read(c, in, language))
207: .getTypeName());
208: assertEquals("state: " + c.getState() + " text: " + in,
209: "operator", ((ASTToken) parser.read(c, in, language))
210: .getTypeName());
211: }
212:
213: public void testReadHtml() throws ParseException {
214: TestLanguage language = create(new String[] { null, "TEXT",
215: "[^'<']*", null, null, "COMMENT", "'<!'-'-->'", null,
216: Parser.DEFAULT_STATE, "ELEMENT",
217: "'<'[^' ''>''\\t''\\n''\\r']+", "IN_ELEMENT", null,
218: "END_ELEMENT", "'</'[^' ''>''\\t''\\n''\\r']+'>'",
219: null, "IN_ELEMENT", "ELEMENT", "'/'?'>'",
220: Parser.DEFAULT_STATE, "IN_ELEMENT", "ATTRIBUTE_NAME",
221: "[^' ''>''=''\\t''\\n''\\r']+", "IN_ATTRIBUTE",
222: "IN_ATTRIBUTE", "OPERATOR", "'='", "IN_ATTRIBUTE2",
223: "IN_ATTRIBUTE2", "ATTRIBUTE_VALUE",
224: "'\\\"'[^'\\\"']*'\\\"'", "IN_ELEMENT",
225:
226: "IN_ATTRIBUTE", "ELEMENT", "'/'?'>'",
227: Parser.DEFAULT_STATE, "IN_ATTRIBUTE", "ATTRIBUTE_NAME",
228: "[^' ''=''\\t''\\n''\\r']+", "IN_ATTRIBUTE",
229: "IN_ELEMENT", "WHITESPACE", "[' ''\\t''\\n''\\r']*",
230: "IN_ELEMENT", "IN_ATTRIBUTE", "WHITESPACE",
231: "[' ''\\t''\\n''\\r']*", "IN_ATTRIBUTE",
232: "IN_ATTRIBUTE2", "WHITESPACE", "[' ''\\t''\\n''\\r']*",
233: "IN_ATTRIBUTE2" });
234:
235: CharInput in = new StringInput("<test a=\"asz\"> \n"
236: + " \" sdf\" = sdf" + "<!-- NewPage"
237: + " ?!?@? -- > sdf -> -->\n"
238: + "<HTML><\\HTML> <test t>");
239: Cookie c = new MyCookie();
240: Parser parser = language.getParser();
241: assertEquals("state: " + c + " text: " + in, "ELEMENT",
242: ((ASTToken) parser.read(c, in, language)).getTypeName());
243: assertEquals("state: " + c + " text: " + in, "WHITESPACE",
244: ((ASTToken) parser.read(c, in, language)).getTypeName());
245: assertEquals("state: " + c + " text: " + in, "ATTRIBUTE_NAME",
246: ((ASTToken) parser.read(c, in, language)).getTypeName());
247: assertEquals("state: " + c + " text: " + in, "OPERATOR",
248: ((ASTToken) parser.read(c, in, language)).getTypeName());
249: assertEquals("state: " + c + " text: " + in, "ATTRIBUTE_VALUE",
250: ((ASTToken) parser.read(c, in, language)).getTypeName());
251: assertEquals("state: " + c + " text: " + in, "ELEMENT",
252: ((ASTToken) parser.read(c, in, language)).getTypeName());
253: assertEquals("state: " + c + " text: " + in, "TEXT",
254: ((ASTToken) parser.read(c, in, language)).getTypeName());
255: assertEquals("state: " + c + " text: " + in, "COMMENT",
256: ((ASTToken) parser.read(c, in, language)).getTypeName());
257: assertEquals("state: " + c + " text: " + in, "TEXT",
258: ((ASTToken) parser.read(c, in, language)).getTypeName());
259: assertEquals("state: " + c + " text: " + in, "ELEMENT",
260: ((ASTToken) parser.read(c, in, language)).getTypeName());
261: assertEquals("state: " + c + " text: " + in, "ELEMENT",
262: ((ASTToken) parser.read(c, in, language)).getTypeName());
263: assertEquals("state: " + c + " text: " + in, "ELEMENT",
264: ((ASTToken) parser.read(c, in, language)).getTypeName());
265: assertEquals("state: " + c + " text: " + in, "ELEMENT",
266: ((ASTToken) parser.read(c, in, language)).getTypeName());
267: assertEquals("state: " + c + " text: " + in, "TEXT",
268: ((ASTToken) parser.read(c, in, language)).getTypeName());
269: assertEquals("state: " + c + " text: " + in, "ELEMENT",
270: ((ASTToken) parser.read(c, in, language)).getTypeName());
271: assertEquals("state: " + c + " text: " + in, "WHITESPACE",
272: ((ASTToken) parser.read(c, in, language)).getTypeName());
273: assertEquals("state: " + c + " text: " + in, "ATTRIBUTE_NAME",
274: ((ASTToken) parser.read(c, in, language)).getTypeName());
275: assertEquals("state: " + c + " text: " + in, "ELEMENT",
276: ((ASTToken) parser.read(c, in, language)).getTypeName());
277: assertTrue(in.eof());
278: }
279:
280: private static class MyCookie implements Parser.Cookie {
281:
282: private int state = -1;
283:
284: public int getState() {
285: return state;
286: }
287:
288: public void setState(int state) {
289: this .state = state;
290: }
291:
292: public void setProperties(Feature properties) {
293: }
294: }
295: }
|