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}