001: package org.tigris.scarab.util;
002:
003: /* ================================================================
004: * Copyright (c) 2000-2002 CollabNet. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions are
008: * met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in the
015: * documentation and/or other materials provided with the distribution.
016: *
017: * 3. The end-user documentation included with the redistribution, if
018: * any, must include the following acknowlegement: "This product includes
019: * software developed by Collab.Net <http://www.Collab.Net/>."
020: * Alternately, this acknowlegement may appear in the software itself, if
021: * and wherever such third-party acknowlegements normally appear.
022: *
023: * 4. The hosted project names must not be used to endorse or promote
024: * products derived from this software without prior written
025: * permission. For written permission, please contact info@collab.net.
026: *
027: * 5. Products derived from this software may not use the "Tigris" or
028: * "Scarab" names nor may "Tigris" or "Scarab" appear in their names without
029: * prior written permission of Collab.Net.
030: *
031: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
032: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
033: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
034: * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
035: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
036: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
037: * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
038: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
039: * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
040: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
041: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
042: *
043: * ====================================================================
044: *
045: * This software consists of voluntary contributions made by many
046: * individuals on behalf of Collab.Net.
047: */
048:
049: import junit.framework.TestCase;
050:
051: import java.util.ArrayList;
052: import java.util.Collection;
053: import java.util.NoSuchElementException;
054:
055: /**
056: * used for testing org.tigris.scarab.util.SubsetIterator
057: *
058: * @author <a href="mailto:sebastian.dietrich@anecon.com">Sebastian Dietrich</a>
059: */
060: public class SubsetIteratorTest extends TestCase {
061: protected SubsetIterator subsetIterator;
062: protected SubsetIterator subsetIteratorUntilLast;
063:
064: protected static final String FIRST = "first element";
065: protected static final String SECOND = "second element";
066: protected static final String THIRD = "third element";
067: protected static final String FOURTH = "fourth element";
068: protected static final String LAST = "last element";
069:
070: public SubsetIteratorTest(String testName) {
071: super (testName);
072: }
073:
074: public void setUp() {
075: Collection coll = new ArrayList();
076:
077: coll.add(FIRST);
078: coll.add(SECOND);
079: coll.add(THIRD);
080: coll.add(FOURTH);
081: coll.add(LAST);
082:
083: // a SubsetIterator from "third element" to "fourth element"
084: subsetIterator = new SubsetIterator(coll.iterator(), 2, 2);
085:
086: // a SubsetIterator from "third element" to the last element
087: subsetIteratorUntilLast = new SubsetIterator(coll.iterator(), 2);
088: }
089:
090: public void tearDown() {
091: subsetIterator = null;
092: }
093:
094: public void testConstructor() {
095: assertEquals("Could not fetch third element", subsetIterator
096: .next(), THIRD);
097:
098: assertTrue("Filled collection should have next element",
099: subsetIterator.hasNext());
100:
101: subsetIterator.remove(); // remove "third element"
102: assertEquals("Could not fetch fourth element", subsetIterator
103: .next(), FOURTH);
104: assertFalse(
105: "SubsetIterator on last position should not have next element",
106: subsetIterator.hasNext());
107: }
108:
109: public void testConstructorWithoutElements() {
110: assertEquals("Could not fetch third element",
111: subsetIteratorUntilLast.next(), THIRD);
112:
113: assertTrue("Filled collection should have next element",
114: subsetIteratorUntilLast.hasNext());
115:
116: subsetIteratorUntilLast.remove(); // remove "third element"
117: assertEquals("Could not fetch fourth element",
118: subsetIteratorUntilLast.next(), FOURTH);
119: assertEquals("Could not fetch last element",
120: subsetIteratorUntilLast.next(), LAST);
121: assertFalse(
122: "SubsetIterator on last position should not have next element",
123: subsetIteratorUntilLast.hasNext());
124: }
125:
126: public void testConstructorWithEmptyCollection() {
127: Collection coll = new ArrayList();
128: SubsetIterator i = new SubsetIterator(coll.iterator(), 0, 0);
129:
130: assertFalse("Empty collection should not have next element", i
131: .hasNext());
132:
133: try {
134: i.next();
135: fail("Empty collection should raise an exception on next()");
136: } catch (NoSuchElementException e) {
137: // that's what we expect
138: } catch (Exception e) {
139: fail("Empty collection should raise NoSuchElementException on next() and not "
140: + e.getClass().getName());
141: }
142:
143: try {
144: i.remove();
145: fail("Empty collection should raise an exception on remove()");
146: } catch (IllegalStateException e) {
147: // that's what we expect
148: } catch (Exception e) {
149: fail("Empty collection should raise IllegalStateException on remove() and not "
150: + e.getClass().getName());
151: }
152: }
153:
154: public void testConstructorWithBiggerSubsetThanTheOriginal() {
155: Collection coll = new ArrayList();
156:
157: coll.add(FIRST);
158: coll.add(SECOND);
159: coll.add(THIRD);
160: coll.add(FOURTH);
161: coll.add(LAST);
162:
163: // a SubsetIterator from "third element" to the end
164: subsetIterator = new SubsetIterator(coll.iterator(), 2, 100);
165:
166: assertEquals("Could not fetch third element", subsetIterator
167: .next(), THIRD);
168:
169: assertTrue("Filled collection should have next element",
170: subsetIterator.hasNext());
171: assertEquals("Could not fetch fourth element", subsetIterator
172: .next(), FOURTH);
173: assertEquals("Could not fetch last element", subsetIterator
174: .next(), LAST);
175: assertFalse(
176: "SubsetIterator on last position should not have next element",
177: subsetIterator.hasNext());
178: }
179:
180: public void testHasNext() {
181: assertTrue("Before first element hasNext() should be true",
182: subsetIterator.hasNext());
183: subsetIterator.next();
184: assertTrue("On first element hasNext() should be true",
185: subsetIterator.hasNext());
186: subsetIterator.next();
187: assertFalse("On last element hasNext() should be false",
188: subsetIterator.hasNext());
189: }
190:
191: public void testNext() {
192: assertEquals("Could not fetch third element", subsetIterator
193: .next(), THIRD);
194: assertEquals("Could not fetch fourth element", subsetIterator
195: .next(), FOURTH);
196: try {
197: subsetIterator.next();
198: fail("next() on last element should raise an exception");
199: } catch (NoSuchElementException e) {
200: // that's what we expect
201: } catch (Exception e) {
202: fail("next() on last element should raise NoSuchElementException and not "
203: + e.getClass().getName());
204: }
205: }
206:
207: public void testRemove() {
208: try {
209: subsetIterator.remove();
210: fail("remove() before first element should raise an exception");
211: } catch (IllegalStateException e) {
212: // that's what we expect
213: } catch (Exception e) {
214: fail("remove() before first element should raise IllegalStateException and not "
215: + e.getClass().getName());
216: }
217:
218: subsetIterator.next();
219: subsetIterator.remove();
220: assertTrue("Before first element hasNext() should be true",
221: subsetIterator.hasNext());
222: subsetIterator.next();
223: assertFalse("On last element hasNext() should be false",
224: subsetIterator.hasNext());
225: subsetIterator.remove();
226: }
227:
228: }
|