001: /*
002: Copyright 2004-2007 Paul R. Holser, Jr. All rights reserved.
003: Licensed under the Academic Free License version 3.0
004: */
005:
006: package joptsimple;
007:
008: import junit.framework.TestCase;
009:
010: /**
011: * @author <a href="mailto:pholser@alumni.rice.edu">Paul Holser</a>
012: * @version $Id: AbbreviationMapTest.java,v 1.17 2007/04/21 22:30:07 pholser Exp $
013: */
014: public class AbbreviationMapTest extends TestCase {
015: private AbbreviationMap abbreviations;
016:
017: protected void setUp() throws Exception {
018: super .setUp();
019: abbreviations = new AbbreviationMap();
020: }
021:
022: public void testNullValuesAreIllegal() {
023: try {
024: abbreviations.put("cannotAddNullValue", null);
025: fail();
026: } catch (NullPointerException expected) {
027: assertTrue(expected.getMessage(), true);
028: }
029: }
030:
031: public void testNullKeysAreIllegalToAdd() {
032: try {
033: abbreviations.put(null, "-1");
034: fail();
035: } catch (NullPointerException expected) {
036: assertTrue(expected.getMessage(), true);
037: }
038: }
039:
040: public void testNullKeysAreIllegalToCheckForContains() {
041: try {
042: abbreviations.contains(null);
043: fail();
044: } catch (NullPointerException expected) {
045: assertTrue(expected.getMessage(), true);
046: }
047: }
048:
049: public void testZeroLengthKeysAreIllegalToAdd() {
050: try {
051: abbreviations.put("", "1");
052: fail();
053: } catch (IllegalArgumentException expected) {
054: assertTrue(expected.getMessage(), true);
055: }
056: }
057:
058: public void testNullKeysAreIllegalToRemove() {
059: try {
060: abbreviations.remove(null);
061: fail();
062: } catch (NullPointerException expected) {
063: assertTrue(expected.getMessage(), true);
064: }
065: }
066:
067: public void testZeroLengthKeysAreIllegalToRemove() {
068: try {
069: abbreviations.remove("");
070: fail();
071: } catch (IllegalArgumentException expected) {
072: assertTrue(expected.getMessage(), true);
073: }
074: }
075:
076: public void testEmpty() {
077: assertFalse(abbreviations.contains("boo"));
078: assertNull(abbreviations.get("boo"));
079: }
080:
081: public void testAddingOne() {
082: abbreviations.put("box", "2");
083: assertTrue(abbreviations.contains("box"));
084: assertEquals("2", abbreviations.get("box"));
085: assertTrue(abbreviations.contains("bo"));
086: assertEquals("2", abbreviations.get("bo"));
087: assertTrue(abbreviations.contains("b"));
088: assertEquals("2", abbreviations.get("b"));
089: }
090:
091: public void testAddingManyWithNoCommonPrefix() {
092: abbreviations.put("box", "1");
093: abbreviations.put("cat", "2");
094: abbreviations.put("dog", "3");
095:
096: assertTrue(abbreviations.contains("box"));
097: assertEquals("1", abbreviations.get("box"));
098: assertTrue(abbreviations.contains("bo"));
099: assertEquals("1", abbreviations.get("bo"));
100: assertTrue(abbreviations.contains("b"));
101: assertEquals("1", abbreviations.get("b"));
102: assertTrue(abbreviations.contains("cat"));
103: assertEquals("2", abbreviations.get("cat"));
104: assertTrue(abbreviations.contains("ca"));
105: assertEquals("2", abbreviations.get("ca"));
106: assertTrue(abbreviations.contains("c"));
107: assertEquals("2", abbreviations.get("c"));
108: assertTrue(abbreviations.contains("dog"));
109: assertEquals("3", abbreviations.get("dog"));
110: assertTrue(abbreviations.contains("do"));
111: assertEquals("3", abbreviations.get("do"));
112: assertTrue(abbreviations.contains("d"));
113: assertEquals("3", abbreviations.get("d"));
114: }
115:
116: public void testAddingTwoWithCommonPrefix() {
117: abbreviations.put("box", "3");
118: abbreviations.put("boy", "4");
119:
120: assertTrue(abbreviations.contains("box"));
121: assertEquals("3", abbreviations.get("box"));
122: assertTrue(abbreviations.contains("boy"));
123: assertEquals("4", abbreviations.get("boy"));
124: assertFalse(abbreviations.contains("bo"));
125: assertNull(abbreviations.get("bo"));
126: assertFalse(abbreviations.contains("b"));
127: assertNull(abbreviations.get("b"));
128: }
129:
130: public void testAddingThreeWithSuccessivelySmallerPrefixes() {
131: abbreviations.put("boy", "3");
132: abbreviations.put("bo", "2");
133: abbreviations.put("b", "1");
134:
135: assertTrue(abbreviations.contains("boy"));
136: assertEquals("3", abbreviations.get("boy"));
137: assertTrue(abbreviations.contains("bo"));
138: assertEquals("2", abbreviations.get("bo"));
139: assertTrue(abbreviations.contains("b"));
140: assertEquals("1", abbreviations.get("b"));
141: }
142:
143: public void testAddingThreeWithSuccessivelyLargerPrefixes() {
144: abbreviations.put("b", "1");
145: abbreviations.put("bo", "2");
146: abbreviations.put("boy", "3");
147:
148: assertTrue(abbreviations.contains("boy"));
149: assertEquals("3", abbreviations.get("boy"));
150: assertTrue(abbreviations.contains("bo"));
151: assertEquals("2", abbreviations.get("bo"));
152: assertTrue(abbreviations.contains("b"));
153: assertEquals("1", abbreviations.get("b"));
154: }
155:
156: public void testAddingThreeWithMixOfPrefixSize() {
157: abbreviations.put("boy", "3");
158: abbreviations.put("b", "1");
159: abbreviations.put("bo", "2");
160:
161: assertTrue(abbreviations.contains("boy"));
162: assertEquals("3", abbreviations.get("boy"));
163: assertTrue(abbreviations.contains("bo"));
164: assertEquals("2", abbreviations.get("bo"));
165: assertTrue(abbreviations.contains("b"));
166: assertEquals("1", abbreviations.get("b"));
167: }
168:
169: public void testAddingOneThenReplacing() {
170: abbreviations.put("box", "2");
171: assertTrue(abbreviations.contains("box"));
172: assertEquals("2", abbreviations.get("box"));
173: assertTrue(abbreviations.contains("bo"));
174: assertEquals("2", abbreviations.get("bo"));
175: assertTrue(abbreviations.contains("b"));
176: assertEquals("2", abbreviations.get("b"));
177:
178: abbreviations.put("box", "3");
179: assertTrue(abbreviations.contains("box"));
180: assertEquals("3", abbreviations.get("box"));
181: assertTrue(abbreviations.contains("bo"));
182: assertEquals("3", abbreviations.get("bo"));
183: assertTrue(abbreviations.contains("b"));
184: assertEquals("3", abbreviations.get("b"));
185: }
186:
187: public void testRemovingNonExistentKeyHasNoEffect() {
188: abbreviations.put("box", "2");
189:
190: abbreviations.remove("cat");
191:
192: assertTrue(abbreviations.contains("box"));
193: assertEquals("2", abbreviations.get("box"));
194: assertTrue(abbreviations.contains("bo"));
195: assertEquals("2", abbreviations.get("bo"));
196: assertTrue(abbreviations.contains("b"));
197: assertEquals("2", abbreviations.get("b"));
198: }
199:
200: public void testRemovingSingleKey() {
201: abbreviations.put("box", "3");
202:
203: abbreviations.remove("box");
204:
205: assertFalse(abbreviations.contains("box"));
206: assertNull(abbreviations.get("box"));
207: assertFalse(abbreviations.contains("bo"));
208: assertNull(abbreviations.get("bo"));
209: assertFalse(abbreviations.contains("b"));
210: assertNull(abbreviations.get("b"));
211: }
212:
213: public void testCannotRemoveByUniqueAbbreviation() {
214: abbreviations.put("box", "4");
215:
216: abbreviations.remove("bo");
217: abbreviations.remove("b");
218:
219: assertTrue(abbreviations.contains("box"));
220: assertEquals("4", abbreviations.get("box"));
221: assertTrue(abbreviations.contains("bo"));
222: assertEquals("4", abbreviations.get("bo"));
223: assertTrue(abbreviations.contains("b"));
224: assertEquals("4", abbreviations.get("b"));
225: }
226:
227: public void testRemoveKeyWithCommonPrefix() {
228: abbreviations.put("box", "-1");
229: abbreviations.put("boy", "-2");
230:
231: abbreviations.remove("box");
232:
233: assertFalse(abbreviations.contains("box"));
234: assertNull(abbreviations.get("box"));
235: assertTrue(abbreviations.contains("boy"));
236: assertEquals("-2", abbreviations.get("boy"));
237: assertTrue(abbreviations.contains("bo"));
238: assertEquals("-2", abbreviations.get("bo"));
239: assertTrue(abbreviations.contains("b"));
240: assertEquals("-2", abbreviations.get("b"));
241: }
242:
243: public void testAddKeysWithCommonPrefixThenRemoveNonExistentKeyWithCommonPrefix() {
244: abbreviations.put("box", "-1");
245: abbreviations.put("boy", "-2");
246:
247: abbreviations.remove("bop");
248:
249: assertTrue(abbreviations.contains("box"));
250: assertEquals("-1", abbreviations.get("box"));
251: assertTrue(abbreviations.contains("boy"));
252: assertEquals("-2", abbreviations.get("boy"));
253: assertFalse(abbreviations.contains("bo"));
254: assertNull(abbreviations.get("bo"));
255: assertFalse(abbreviations.contains("b"));
256: assertNull(abbreviations.get("b"));
257: }
258:
259: public void testAddKeysWithCommonPrefixesStairstepStyle() {
260: abbreviations.put("a", "1");
261: abbreviations.put("abc", "2");
262:
263: assertTrue(abbreviations.contains("a"));
264: assertEquals("1", abbreviations.get("a"));
265: assertTrue(abbreviations.contains("ab"));
266: assertEquals("2", abbreviations.get("ab"));
267: assertTrue(abbreviations.contains("abc"));
268: assertEquals("2", abbreviations.get("abc"));
269:
270: abbreviations.put("abcde", "3");
271:
272: assertTrue(abbreviations.contains("a"));
273: assertEquals("1", abbreviations.get("a"));
274: assertFalse(abbreviations.contains("ab"));
275: assertNull(abbreviations.get("ab"));
276: assertTrue(abbreviations.contains("abc"));
277: assertEquals("2", abbreviations.get("abc"));
278: assertTrue(abbreviations.contains("abcd"));
279: assertEquals("3", abbreviations.get("abcd"));
280: assertTrue(abbreviations.contains("abcde"));
281: assertEquals("3", abbreviations.get("abcde"));
282: }
283:
284: public void testAddKeysWithCommonPrefixesStairstepStyleJumbled() {
285: abbreviations.put("a", "1");
286: abbreviations.put("abcde", "3");
287: abbreviations.put("abc", "2");
288:
289: assertTrue(abbreviations.contains("a"));
290: assertEquals("1", abbreviations.get("a"));
291: assertFalse(abbreviations.contains("ab"));
292: assertNull(abbreviations.get("ab"));
293: assertTrue(abbreviations.contains("abc"));
294: assertEquals("2", abbreviations.get("abc"));
295: assertTrue(abbreviations.contains("abcd"));
296: assertEquals("3", abbreviations.get("abcd"));
297: assertTrue(abbreviations.contains("abcde"));
298: assertEquals("3", abbreviations.get("abcde"));
299: }
300:
301: public void testMultipleKeysWithCommonPrefix() {
302: abbreviations.put("good", "4");
303: abbreviations.put("goodyear", "8");
304: abbreviations.put("go", "2");
305: abbreviations.put("goodyea", "7");
306: abbreviations.put("goodye", "6");
307:
308: assertFalse(abbreviations.contains("g"));
309: assertNull(abbreviations.get("g"));
310: assertTrue(abbreviations.contains("go"));
311: assertEquals("2", abbreviations.get("go"));
312: assertFalse(abbreviations.contains("goo"));
313: assertNull(abbreviations.get("goo"));
314: assertTrue(abbreviations.contains("good"));
315: assertEquals("4", abbreviations.get("good"));
316: assertFalse(abbreviations.contains("goody"));
317: assertNull(abbreviations.get("goody"));
318: assertTrue(abbreviations.contains("goodye"));
319: assertEquals("6", abbreviations.get("goodye"));
320: assertTrue(abbreviations.contains("goodyea"));
321: assertEquals("7", abbreviations.get("goodyea"));
322: assertTrue(abbreviations.contains("goodyea"));
323: assertEquals("8", abbreviations.get("goodyear"));
324:
325: abbreviations.remove("goodyea");
326:
327: assertFalse(abbreviations.contains("g"));
328: assertNull(abbreviations.get("g"));
329: assertTrue(abbreviations.contains("go"));
330: assertEquals("2", abbreviations.get("go"));
331: assertFalse(abbreviations.contains("goo"));
332: assertNull(abbreviations.get("goo"));
333: assertTrue(abbreviations.contains("good"));
334: assertEquals("4", abbreviations.get("good"));
335: assertFalse(abbreviations.contains("goody"));
336: assertNull(abbreviations.get("goody"));
337: assertTrue(abbreviations.contains("goodye"));
338: assertEquals("6", abbreviations.get("goodye"));
339: assertTrue(abbreviations.contains("goodyea"));
340: assertEquals("8", abbreviations.get("goodyea"));
341: assertTrue(abbreviations.contains("goodyea"));
342: assertEquals("8", abbreviations.get("goodyear"));
343: }
344: }
|