001/*
002 * gnu/regexp/util/Tests.java -- Simple testsuite for gnu.regexp package
003 * Copyright (C) 1998-2001 Wes Biggs
004 *
005 * This file is in the public domain.  However, the gnu.regexp library
006 * proper is licensed under the terms of the GNU Lesser General Public
007 * License (see the file COPYING.LIB for details).
008 */
009
010package gnu.regexp.util;
011import gnu.regexp.*;
012import java.io.StringBufferInputStream;
013import java.io.StringReader;
014
015/**
016 * This is a very basic testsuite application for gnu.regexp.
017 *
018 * @author <A HREF="mailto:wes@cacas.org">Wes Biggs</A>
019 * @version 1.1.1
020 */
021public class Tests {
022  private Tests() { }
023
024    private static void check(RE expr, String input, String expect, int id) {
025        // Test it using all possible input types
026        check(expr.getMatch(input),expect,id, "String");
027        check(expr.getMatch(new StringBuffer(input)),expect,id, "StringBuffer");
028        check(expr.getMatch(input.toCharArray()),expect,id, "char[]");
029        check(expr.getMatch(new StringReader(input)),expect,id, "Reader");
030        check(expr.getMatch(new StringBufferInputStream(input)),expect,id, "InputStream");
031    }
032  private static void check(REMatch m, String expect, int x, String type) {
033    if ((m == null) || !m.toString().equals(expect)) System.out.print("*** Failed");
034    else System.out.print("Passed");
035    System.out.println(" test #"+x + " (" + type + ")");
036  }
037
038  /**
039   * Runs the testsuite.  No command line arguments are necessary. 
040   *
041   * @exception REException An error occurred compiling a regular expression.
042   */
043  public static void main(String[] argv) throws REException {
044    RE e;
045
046    
047    e = new RE("(.*)z");
048    check(e,("xxz"),"xxz",1);
049
050    e = new RE(".*z");
051    check(e,("xxz"),"xxz",2);
052    
053    e = new RE("(x|xy)z");
054    check(e,("xz"),"xz",3);
055    check(e,("xyz"),"xyz",4);
056
057    e = new RE("(x)+z");
058    check(e,("xxz"),"xxz",5);
059
060    e = new RE("abc");
061    check(e,("xyzabcdef"),"abc",6);
062
063    e = new RE("^start.*end$");
064    check(e,("start here and go to the end"),"start here and go to the end",7);
065
066    e = new RE("(x|xy)+z");
067    check(e,("xxyz"),"xxyz",8);
068
069    e = new RE("type=([^ \t]+)[ \t]+exts=([^ \t\n\r]+)");
070    check(e,("type=text/html    exts=htm,html"),"type=text/html exts=htm,html",9);
071
072    e = new RE("(x)\\1");
073    check(e,("zxxz"),"xx", 10);
074
075    e = new RE("(x*)(y)\\2\\1");
076    check(e,("xxxyyxx"),"xxyyxx",11);
077
078    e = new RE("[-go]+");
079    check(e,("go-go"),"go-go",12);
080
081    e = new RE("[\\w-]+");
082    check(e,("go-go"),"go-go",13);
083
084    e = new RE("^start.*?end");
085    check(e,("start here and end in the middle, not the very end"),"start here and end",14);
086    
087    e = new RE("\\d\\s\\w\\n\\r");
088    check(e,("  9\tX\n\r  "),"9\tX\n\r",15);
089
090    e = new RE("zow",RE.REG_ICASE);
091    check(e,("ZoW"),"ZoW",16);
092
093    e = new RE("(\\d+)\\D*(\\d+)\\D*(\\d)+");
094    check(e,("size--10 by 20 by 30 feet"),"10 by 20 by 30",17);
095
096    e = new RE("(ab)(.*?)(d)");
097    REMatch m = e.getMatch("abcd");
098    check(m,"abcd",18, "String");
099    System.out.println(((m.toString(2).equals("c")) ? "Pass" : "*** Fail") 
100                       + "ed test #19");
101
102    e = new RE("^$");
103    check(e,(""),"",20);
104
105    e = new RE("a*");
106    check(e,(""),"",21);
107    check(e,("a"),"a",22);
108    check(e,("aa"),"aa",23);
109
110    e = new RE("(([12]))?");
111    check(e,("12"),"1",24);
112
113    e = new RE("(.*)?b");
114    check(e,("ab"),"ab",25);
115
116    e = new RE("(.*)?-(.*)"); 
117    check(e,("a-b"), "a-b", 26);
118
119    e = new RE("(a)b");
120    check(e,("aab"), "ab", 27);
121
122    e = new RE("[M]iss");
123    check(e,("one Mississippi"), "Miss", 28);
124
125    e = new RE("\\S Miss");
126    check(e,("one Mississippi"), "e Miss", 29);
127
128    e = new RE("a*");
129    check(e,("b"),"",30);
130    check(e,("ab"),"a",31);
131    check(e,("aab"),"aa",32);
132
133    // Single character should match anywhere in String
134    e = new RE("a");
135    check(e,("a"),"a", 33);
136    check(e,("ab"),"a", 34);
137    check(e,("ba"),"a", 35);
138    check(e,("bab"),"a", 36);
139    
140  }
141}