package erjang;
import java.util.Iterator;
import java.util.NoSuchElementException;
import junit.framework.TestCase;
public class EObjectIteratorTest extends TestCase {
public void testNil() throws Exception {
Iterator<EObject> it = new EObjectIterator(ERT.NIL);
assertNotNull(it);
assertFalse(it.hasNext());
}
public void testNull() throws Exception {
Iterator<EObject> it = new EObjectIterator(null);
assertNotNull(it);
assertFalse(it.hasNext());
}
public void testEString() throws Exception {
EString message = EString.fromString("Hello, World!");
Iterator<EObject> it = new EObjectIterator(message);
assertNotNull(it);
assertTrue(it.hasNext());
EObject o = it.next();
assertNotNull(o);
assertEquals(message, o);
assertFalse(it.hasNext());
try {
it.next();
fail("no more elements, iterator should throw exception");
}
catch (NoSuchElementException t) {
// expected
}
}
public void testEInt() throws Exception {
EInteger num = ESmall.make(42);
Iterator<EObject> it = new EObjectIterator(num);
assertNotNull(it);
assertTrue(it.hasNext());
EObject o = it.next();
assertNotNull(o);
assertEquals(num, o);
assertFalse(it.hasNext());
try {
it.next();
fail("no more elements, iterator should throw exception");
}
catch (NoSuchElementException t) {
// expected
}
}
public void testSeqWithSingleNil() throws Exception {
ESeq seq = ESeq.fromArray(new EObject[] {
ERT.NIL
});
assertEquals(1, seq.length());
Iterator<EObject> it = seq.iterator();
assertNotNull(it);
assertTrue(it.hasNext());
EObject o = it.next();
assertNotNull(o);
assertTrue(o.isNil());
assertEquals(ERT.NIL, o);
assertFalse(it.hasNext());
try {
it.next();
fail("no more elements, iterator should throw exception");
}
catch (NoSuchElementException t) {
// expected
}
}
public void testSeqWithTwoNils() throws Exception {
ESeq seq = ESeq.fromArray(new EObject[] {
ERT.NIL,
ERT.NIL
});
assertEquals(2, seq.length());
Iterator<EObject> it = seq.iterator();
assertNotNull(it);
assertTrue(it.hasNext());
EObject o = it.next();
assertNotNull(o);
assertTrue(o.isNil());
assertEquals(ERT.NIL, o);
assertTrue(it.hasNext());
o = it.next();
assertNotNull(o);
assertTrue(o.isNil());
assertEquals(ERT.NIL, o);
assertFalse(it.hasNext());
try {
it.next();
fail("no more elements, iterator should throw exception");
}
catch (NoSuchElementException t) {
// expected
}
}
public void testSeqWithSingleObject() throws Exception {
EObject first = EString.fromString("Hello");
ESeq seq = ESeq.fromArray(new EObject[] {
first
});
assertEquals(1, seq.length());
Iterator<EObject> it = seq.iterator();
assertNotNull(it);
assertTrue(it.hasNext());
EObject o = it.next();
assertNotNull(o);
assertEquals(first, o);
assertFalse(it.hasNext());
try {
it.next();
fail("no more elements, iterator should throw exception");
}
catch (NoSuchElementException t) {
// expected
}
}
public void testSeqWithTwoObjects() throws Exception {
EObject first = EString.fromString("Hello");
EObject second = EString.fromString("World");
ESeq seq = ESeq.fromArray(new EObject[] {
first,
second
});
assertEquals(2, seq.length());
Iterator<EObject> it = seq.iterator();
assertNotNull(it);
assertTrue(it.hasNext());
EObject o = it.next();
assertNotNull(o);
assertEquals(first, o);
assertTrue(it.hasNext());
o = it.next();
assertNotNull(o);
assertEquals(second, o);
assertFalse(it.hasNext());
try {
it.next();
fail("no more elements, iterator should throw exception");
}
catch (NoSuchElementException t) {
// expected
}
}
public void testSeqWithThreeObjects() throws Exception {
EObject first = EString.fromString("Hello");
EObject second = EString.fromString("World");
EObject third = ESmall.make(42);
ESeq seq = ESeq.fromArray(new EObject[] {
first,
second,
third
});
assertEquals(3, seq.length());
Iterator<EObject> it = seq.iterator();
assertNotNull(it);
assertTrue(it.hasNext());
EObject o = it.next();
assertNotNull(o);
assertEquals(first, o);
assertTrue(it.hasNext());
o = it.next();
assertNotNull(o);
assertEquals(second, o);
assertTrue(it.hasNext());
o = it.next();
assertNotNull(o);
assertEquals(third, o);
assertFalse(it.hasNext());
try {
it.next();
fail("no more elements, iterator should throw exception");
}
catch (NoSuchElementException t) {
// expected
}
}
}