Skip to content

Instantly share code, notes, and snippets.

@btforsythe
Created September 28, 2017 23:17
Show Gist options
  • Save btforsythe/eb89f81c4aa12f6a5c2c7f31947e3808 to your computer and use it in GitHub Desktop.
Save btforsythe/eb89f81c4aa12f6a5c2c7f31947e3808 to your computer and use it in GitHub Desktop.
Dorothy's Fears
package oz;
import java.util.Iterator;
public class AnimalsIterator implements Iterator<String> {
private String[] animals;
int index; // defaults to zero
public AnimalsIterator(String... animals) {
this.animals = animals;
}
@Override
public String next() {
// you would usually see this as:
// return animals[index++];
String currentAnimal = animals[index];
index++;
return currentAnimal;
}
@Override
public boolean hasNext() {
return index < animals.length;
}
}
package oz;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Iterator;
import org.junit.Assert;
import org.junit.Test;
public class AnimalsIteratorTest {
@Test
public void shouldReturnTheFirstElement() {
// arrange
AnimalsIterator underTest = new AnimalsIterator("Lions");
// act
String result = underTest.next();
// assert
assertEquals("Lions", result);
}
@Test
public void shouldReturnSecondElement() {
String[] animals = { "Lions", "Tigers" };
AnimalsIterator underTest = new AnimalsIterator(animals);
underTest.next(); // Lions
String result = underTest.next();
assertEquals("Tigers", result);
}
@Test
public void shouldHaveNext() { /// start with the positive case
AnimalsIterator underTest = new AnimalsIterator("Ducks");
boolean result = underTest.hasNext();
assertTrue(result);
}
@Test
public void shouldNotHaveNext() {
AnimalsIterator underTest = new AnimalsIterator();
boolean result = underTest.hasNext();
assertFalse(result);
}
@Test
public void shouldBeAnIterator() {
AnimalsIterator underTest = new AnimalsIterator();
boolean isAnIterator = (underTest instanceof Iterator);
assertTrue(isAnIterator);
}
}
package oz;
import java.util.Iterator;
public class DorothysFears implements Iterable<String> {
private String[] fears = { "Lions", "Tigers", "Bears" };
@Override
public Iterator<String> iterator() {
return new AnimalsIterator(fears);
}
}
package oz;
public class OzApp {
public static void main(String[] args) {
DorothysFears fears = new DorothysFears();
System.out.println("Dorothy's fears are");
for(String f: fears) {
System.out.println(f);
}
System.out.println("Oh my.");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment