001: /*
002: * PatternTest.java
003: * JUnit based test
004: *
005: * Created on February 9, 2006, 10:00 AM
006: */
007:
008: package org.netbeans.modules.languages.parser;
009:
010: import junit.framework.TestCase;
011: import org.netbeans.api.languages.CharInput;
012: import org.netbeans.api.languages.ParseException;
013: import org.netbeans.modules.languages.parser.StringInput;
014:
015: /**
016: *
017: * @author Jan Jancura
018: */
019: public class PatternTest extends TestCase {
020:
021: public PatternTest(String testName) {
022: super (testName);
023: }
024:
025: public void testNext() throws ParseException {
026: testReadToken("'/'?'>'", "/>>", true, ">");
027: testReadToken("'/'?'>'", ">>", true, ">");
028: testReadToken("'/'?'>'", "//>>", false, "//>>");
029: testReadToken("[^'a']*'a'", "", false, "");
030: testReadToken("[^'a']*'a'", "ab", true, "b");
031: testReadToken("[^'a']*'a'", "qqab", true, "b");
032: testReadToken("[^'a']*'a'", "qabaw", true, "baw");
033: testReadToken("([^'a']*'a')+", "qabaw", true, "w");
034: testReadToken("([^'a']*'a')+", "aaabw", true, "bw");
035: testReadToken("([^'a']*'a')+", "aabaw", true, "w");
036: testReadToken("([^'a']*'a')+", "bb", false, "bb");
037: testReadToken("([^'a']*'a')*", "qabaw", true, "w");
038: testReadToken("([^'a']*'a')*", "aaabw", true, "bw");
039: testReadToken("([^'a']*'a')*", "aabaw", true, "w");
040: testReadToken("([^'a']*'a')*", "bb", true, "bb");
041: testReadToken("([^'a']*'a')+'b'", "qwabw", true, "w");
042: testReadToken("([^'a']*'a')+'b'", "qaabw", true, "w");
043: testReadToken("([^'a']*'a')+'b'", "qabdfabw", true, "w");
044: testReadToken("('ab')*|('dc')*", "ababdc", true, "dc");
045: testReadToken("('ab')*|('dc')*", "dcdcab", true, "ab");
046: testReadToken("('ab')*|('dc')*", "", true, "");
047: testReadToken("('ab'|'dc')*", "abdcabbb", true, "bb");
048: testReadToken("('ab'|'dc')*", "", true, "");
049: testReadToken("('ab')*('dc')*", "ababdcdcc", true, "c");
050: testReadToken("('ab')*('dc')*", "dcab", true, "ab");
051: testReadToken("('ab')*('dc')*", "aba", true, "a");
052: testReadToken("('ab')*('dc')*", "", true, "");
053: testReadToken("'abc'|'a'.'d'", "abd", true, "");
054: testReadToken("('a'.'c')*'abd'", "abcabdab", true, "ab");
055: testReadToken("('a'.'c')*'abd'", "abdab", true, "ab");
056: testReadToken("('a'.'c')*'abd'", "abcaxcabda", true, "a");
057: testReadToken("('a'.'c')+'abc'", "axcabcabca", true, "a");
058: testReadToken("('a'..)*'abd'", "abdabda", true, "a");
059: testReadToken("('a'..)*'abd'", "abda", true, "a");
060: testReadToken("('a'..)*'abd'", "axxabda", true, "a");
061: testReadToken("('a'.'c'|'asd')|'a'.'d'", "asd", true, "");
062: testReadToken("('a'.'c'|'asd')|'a'.'d'", "axd", true, "");
063: testReadToken("'as'['q''w''e']'as'", "asqass", true, "s");
064: testReadToken("'as'['q''w''e']'as'", "aseass", true, "s");
065: testReadToken("'as'['q''w''e']'as'", "asqwass", false,
066: "asqwass");
067: testReadToken("'a''s'*'d'", "ad", true, "");
068: testReadToken("'a''s'*'d'", "assdw", true, "w");
069: testReadToken("'a'.'d'", "ad", false, "ad");
070: testReadToken("'a'.'dd'", "adddd", true, "d");
071: testReadToken("'as'['q''w']+'zx'", "aszxx", false, "aszxx");
072: testReadToken("'as'['q''w']+'zx'", "asqwzxx", true, "x");
073: testReadToken("'as'['q''w']+'zx'", "asqwqwzxx", true, "x");
074: testReadToken("'as'['q''w']*'zx'", "asqqwzxx", true, "x");
075: testReadToken("'as'['q''w']*'zx'", "aszxx", true, "x");
076: testReadToken("'as'['q''w']*'zx'", "asqwzzx", false, "asqwzzx");
077: testReadToken("'ab'|'cd'", "ab", true, "");
078: testReadToken("('ab'|'cd'|'de')*", "ab", true, "");
079: testReadToken("('ab'|'cd'|'de')*", "ababdeaq", true, "aq");
080: testMatches("('ab'|'cd'|'de')*", "", true);
081: testReadToken("('ab')*|('abc')*", "ab", true, "");
082: testReadToken("('ab')*|('abc')*", "ababcabd", true, "cabd");
083: testReadToken("('ab')*|('abc')*", "abcabcabd", true, "abd");
084: testReadToken("('ab')*|('abc')*", "abcad", true, "ad");
085: testReadToken("('abc')*|('ab')*", "ab", true, "");
086: testReadToken("'a'[^'b']|'acd'", "acdd", true, "d");
087: testReadToken("'a'[^'b']|'acd'", "ab", false, "ab");
088: testReadToken("'a'[^'b''c''d']*", "aswsqqsbx", true, "bx");
089: testMatches("('a')*'a'", "", false);
090: testReadToken("('a')*'a'", "ac", true, "c");
091: testReadToken("('a')*'a'", "aac", true, "c");
092: testMatches("('a''a'*)*", "", true);
093: testReadToken("('a''a'*)*", "a", true, "");
094: testReadToken("('a''a'*)*", "aaaa", true, "");
095: testReadToken("[^'a']*'a'('a'|[^'a''b'][^'a']*'a')*'b'",
096: "sdasdaadsaabfabf", true, "fabf");
097: testReadToken("'/*'-'*/'", "/**//", true, "/");
098: testReadToken("'/*'-'*/'", "/***/*", true, "*");
099: testReadToken("'/*'-'*/'", "/*asdf*sdf*sdf//sdf/sdf*/a", true,
100: "a");
101: testReadToken("'/*'-'*/'", "/*", false, "/*");
102: testReadToken("'/*'-'*/'", "/**qwe", false, "/**qwe");
103: testReadToken("'/*'-'*/'", "/*a*/*/qwe", true, "*/qwe");
104: testReadToken("-'abc'", "abaabbbabcd", true, "d");
105: testReadToken("-'abc'", "abaabcbbabcd", true, "bbabcd");
106: testReadToken("-'abc'", "abaabacbbabacd", false,
107: "abaabacbbabacd");
108: testReadToken("'\\u0041'['\\u0030'-'\\u0039']*", "A12001ax",
109: true, "ax");
110: //testReadToken ("'\"' ( [^ '\"' '\n' '\r'] | ('\\' ['r' 'n' 't' '\\' '\'' '\"']) )* '\"'", "\\\\", true, "");
111: }
112:
113: private static void testReadToken(String expression, String text,
114: boolean result, String ext) throws ParseException {
115: StringInput in = new StringInput(text);
116: Pattern p = Pattern.create(expression);
117: assertEquals(expression + " <" + text + ">", result,
118: p.next(in) != null);
119: assertEquals(expression + " <" + text + ">", ext, in
120: .getAsText());
121: }
122:
123: private static void testMatches(String expression, String text,
124: boolean result) throws ParseException {
125: Pattern p = Pattern.create(expression);
126: assertEquals(expression + " <" + text + ">", result, p
127: .matches(text));
128: }
129: }
|