001: /*
002: * Copyright (C) 2001-2007 Stephen Ostermiller
003: * http://ostermiller.org/contact.pl?regarding=Java+Utilities
004: *
005: * This program is free software; you can redistribute it and/or modify
006: * it under the terms of the GNU General Public License as published by
007: * the Free Software Foundation; either version 2 of the License, or
008: * (at your option) any later version.
009: *
010: * This program is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013: * GNU General Public License for more details.
014: *
015: * See COPYING.TXT for details.
016: */
017:
018: package com.Ostermiller.util;
019:
020: /**
021: * A regression test for com.Ostermiller.util.StringTokenizer.
022: * More information about this class is available from <a target="_top" href=
023: * "http://ostermiller.org/utils/StringTokenizer.html">ostermiller.org</a>.
024: *
025: * @author Stephen Ostermiller http://ostermiller.org/contact.pl?regarding=Java+Utilities
026: * @since ostermillerutils 1.00.00
027: */
028: class TokenizerTests {
029:
030: /**
031: * Main method for test
032: * @param args command line arguments (ignored)
033: */
034: public static void main(String args[]) {
035: try {
036: java.util.StringTokenizer oldTok;
037: com.Ostermiller.util.StringTokenizer newTok;
038: String token;
039:
040: token = "this is a test";
041: oldTok = new java.util.StringTokenizer(token);
042: newTok = new com.Ostermiller.util.StringTokenizer(token);
043: assertEqual("" + oldTok.countTokens(), ""
044: + newTok.countTokens());
045: compareState("Test 1", oldTok, newTok);
046: while (oldTok.hasMoreTokens()) {
047: assertEqual(oldTok.nextToken(), newTok.nextToken());
048: compareState("Test 1", oldTok, newTok);
049: }
050:
051: token = "";
052: oldTok = new java.util.StringTokenizer(token);
053: newTok = new com.Ostermiller.util.StringTokenizer(token);
054: assertEqual("" + oldTok.countTokens(), ""
055: + newTok.countTokens());
056:
057: token = "no delimiters";
058: oldTok = new java.util.StringTokenizer(token, "");
059: newTok = new com.Ostermiller.util.StringTokenizer(token, "");
060: assertEqual("" + oldTok.countTokens(), ""
061: + newTok.countTokens());
062: while (oldTok.hasMoreTokens()) {
063: assertEqual("" + oldTok.countTokens(), ""
064: + newTok.countTokens());
065: assertEqual(oldTok.nextToken(), newTok.nextToken());
066: }
067:
068: token = "AstringB";
069: oldTok = new java.util.StringTokenizer(token, "AB");
070: newTok = new com.Ostermiller.util.StringTokenizer(token,
071: "AB");
072: assertEqual("" + oldTok.countTokens(), ""
073: + newTok.countTokens());
074: while (oldTok.hasMoreTokens()) {
075: assertEqual(oldTok.nextToken(), newTok.nextToken());
076: }
077:
078: token = "AstringB";
079: oldTok = new java.util.StringTokenizer(token, "AB", true);
080: newTok = new com.Ostermiller.util.StringTokenizer(token,
081: "AB", true);
082: assertEqual("" + oldTok.countTokens(), ""
083: + newTok.countTokens());
084: while (oldTok.hasMoreTokens()) {
085: assertEqual(oldTok.nextToken(), newTok.nextToken());
086: }
087:
088: token = "someURL?name=value&name=value";
089: oldTok = new java.util.StringTokenizer(token);
090: newTok = new com.Ostermiller.util.StringTokenizer(token);
091: assertEqual(oldTok.nextToken("?"), newTok.nextToken("?"));
092: assertEqual(oldTok.nextToken("=&"), newTok.nextToken("=&"));
093: assertEqual(oldTok.nextToken("=&"), newTok.nextToken("=&"));
094: assertEqual(oldTok.nextToken(), newTok.nextToken());
095: assertEqual(oldTok.nextToken(), newTok.nextToken());
096:
097: newTok = new com.Ostermiller.util.StringTokenizer(token);
098: assertEqual("someURL", newTok.nextToken("?"));
099: newTok.skipDelimiters();
100: assertEqual("name", newTok.nextToken("=&"));
101: assertEqual("value", newTok.nextToken("=&"));
102: assertEqual("name", newTok.nextToken());
103: assertEqual("value", newTok.nextToken());
104:
105: token = " ( aaa \t * (b+c1 ))";
106: newTok = new com.Ostermiller.util.StringTokenizer(token,
107: " \t\n\r\f", "()+*");
108: assertEqual("9", "" + newTok.countTokens());
109: assertEqual("(", newTok.nextToken());
110: assertEqual("aaa", newTok.nextToken());
111: assertEqual("*", newTok.nextToken());
112: assertEqual("(", newTok.nextToken());
113: assertEqual("b", newTok.nextToken());
114: assertEqual("+", newTok.nextToken());
115: assertEqual("c1", newTok.nextToken());
116: assertEqual(")", newTok.nextToken());
117: assertEqual(")", newTok.nextToken());
118:
119: token = "one,two,,four,five,,,eight,";
120: oldTok = new java.util.StringTokenizer(token, ",");
121: newTok = new com.Ostermiller.util.StringTokenizer(token,
122: ",");
123: assertEqual("" + oldTok.countTokens(), ""
124: + newTok.countTokens());
125: while (oldTok.hasMoreTokens()) {
126: assertEqual(oldTok.nextToken(), newTok.nextToken());
127: }
128:
129: token = "one,two,,four,five,,,eight";
130: newTok = new com.Ostermiller.util.StringTokenizer(token,
131: ",");
132: newTok.setReturnEmptyTokens(true);
133: assertEqual("8", "" + newTok.countTokens());
134:
135: token = ",two,,four,five,,,eight,";
136: newTok = new com.Ostermiller.util.StringTokenizer(token,
137: ",");
138: newTok.setReturnEmptyTokens(true);
139: assertEqual("9", "" + newTok.countTokens());
140:
141: token = ",";
142: newTok = new com.Ostermiller.util.StringTokenizer(token,
143: ",");
144: newTok.setReturnEmptyTokens(true);
145: assertEqual("2", "" + newTok.countTokens());
146:
147: token = "";
148: newTok = new com.Ostermiller.util.StringTokenizer(token,
149: ",");
150: newTok.setReturnEmptyTokens(true);
151: assertEqual("1", "" + newTok.countTokens());
152:
153: token = ",two,,four,five,,,eight,";
154: newTok = new com.Ostermiller.util.StringTokenizer(token,
155: ",", true);
156: newTok.setReturnEmptyTokens(true);
157: assertEqual("17", "" + newTok.countTokens());
158:
159: token = ",one,,,four,";
160: newTok = new com.Ostermiller.util.StringTokenizer(token,
161: ",", null, false);
162: assertEqual("one", newTok.nextToken());
163: newTok.setReturnEmptyTokens(true);
164: assertEqual("4", "" + newTok.countTokens());
165:
166: token = "list=";
167: newTok = new com.Ostermiller.util.StringTokenizer(token,
168: "=");
169: newTok.setReturnEmptyTokens(true);
170: assertEqual("list", newTok.nextToken());
171: newTok.skipDelimiters();
172: assertEqual("", newTok.nextToken(","));
173: assertEqual("0", "" + newTok.countTokens());
174:
175: token = "list=,";
176: newTok = new com.Ostermiller.util.StringTokenizer(token,
177: "=");
178: newTok.setReturnEmptyTokens(true);
179: assertEqual("list", newTok.nextToken());
180: newTok.skipDelimiters();
181: assertEqual("", newTok.nextToken(","));
182: assertEqual("1", "" + newTok.countTokens());
183:
184: token = "list=,two,";
185: newTok = new com.Ostermiller.util.StringTokenizer(token,
186: "=");
187: newTok.setReturnEmptyTokens(true);
188: assertEqual("list", newTok.nextToken());
189: newTok.skipDelimiters();
190: assertEqual("", newTok.nextToken(","));
191: assertEqual("2", "" + newTok.countTokens());
192:
193: token = "this is a test";
194: newTok = new com.Ostermiller.util.StringTokenizer(token);
195: String[] tokens = newTok.toArray();
196: newTok.setText(token);
197: for (int i = 0; i < tokens.length; i++) {
198: assertEqual(tokens[i], newTok.nextToken());
199: }
200:
201: token = "token rest of string";
202: newTok = new com.Ostermiller.util.StringTokenizer(token);
203: assertEqual("token", newTok.nextToken());
204: newTok.skipDelimiters();
205: assertEqual("rest of string", newTok.restOfText());
206: assertEqual("false", "" + newTok.hasMoreTokens());
207:
208: token = "testing the peek method";
209: newTok = new com.Ostermiller.util.StringTokenizer(token);
210: assertEqual("4", "" + newTok.countTokens());
211: assertEqual("testing", newTok.peek());
212: assertEqual("4", "" + newTok.countTokens());
213: assertEqual("testing", newTok.nextToken());
214: assertEqual("3", "" + newTok.countTokens());
215: assertEqual("the", newTok.peek());
216: assertEqual("the", newTok.peek());
217: assertEqual("the", newTok.nextToken());
218: assertEqual("peek", newTok.peek());
219: assertEqual("peek", newTok.nextToken());
220: assertEqual("true", "" + newTok.hasMoreTokens());
221: assertEqual("method", newTok.peek());
222: assertEqual("true", "" + newTok.hasMoreTokens());
223: assertEqual("method", newTok.nextToken());
224: assertEqual("false", "" + newTok.hasMoreTokens());
225:
226: } catch (Exception x) {
227: x.printStackTrace();
228: System.exit(1);
229: }
230: System.exit(0);
231: }
232:
233: private static void assertEqual(String one, String two)
234: throws Exception {
235: if (one == null || !one.equals(two)) {
236: throw new Exception("Expected equal: " + one + ", " + two);
237: }
238: }
239:
240: private static void compareState(String testName,
241: java.util.StringTokenizer oldTok,
242: com.Ostermiller.util.StringTokenizer newTok)
243: throws Exception {
244: compareState(testName, newTok, oldTok.countTokens());
245: }
246:
247: private static void compareState(String testName,
248: com.Ostermiller.util.StringTokenizer newTok, int tokenCount)
249: throws Exception {
250: // count the number of tokens left first.
251: int newNumTokens = newTok.countTokens();
252: if (tokenCount != newNumTokens) {
253: throw new Exception(testName
254: + ": TokenCount does not match. " + tokenCount
255: + " versus " + newNumTokens);
256: }
257: boolean hasMoreTokens = (tokenCount > 0);
258: boolean newTokHasMoreTokens = newTok.hasMoreTokens();
259: if (hasMoreTokens != newTokHasMoreTokens) {
260: throw new Exception(testName
261: + ": hasMoreTokens does not match. "
262: + hasMoreTokens + " versus " + newTokHasMoreTokens);
263: }
264: }
265: }
|