package com.metservice.kanban.model;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import org.junit.Test;
public class TreeIteratorTest {
@Test
public void visitsParentThenChildren() {
TreeNode<Integer> child1 = TreeNode.create(Integer.class, 42);
TreeNode<Integer> child2 = TreeNode.create(Integer.class, 33);
TreeNode<Integer> parent = TreeNode.create(Integer.class, 17, child1, child2);
TreeIterator<Integer> iterator = new TreeIterator<Integer>(parent);
assertThat(iterator.hasNext(), is(true));
assertThat(iterator.next(), is(17));
assertThat(iterator.hasNext(), is(true));
assertThat(iterator.next(), is(42));
assertThat(iterator.hasNext(), is(true));
assertThat(iterator.next(), is(33));
assertThat(iterator.hasNext(), is(false));
}
@Test
public void visitsGrandchildren() {
TreeNode<Integer> grandchild1 = TreeNode.create(Integer.class, 23);
TreeNode<Integer> grandchild2 = TreeNode.create(Integer.class, 27);
TreeNode<Integer> child = TreeNode.create(Integer.class, 84, grandchild1, grandchild2);
TreeNode<Integer> root = TreeNode.create(Integer.class, 9, child);
TreeIterator<Integer> iterator = new TreeIterator<Integer>(root);
iterator.next();
iterator.next();
assertThat(iterator.hasNext(), is(true));
assertThat(iterator.next(), is(23));
assertThat(iterator.hasNext(), is(true));
assertThat(iterator.next(), is(27));
assertThat(iterator.hasNext(), is(false));
}
@Test(expected=UnsupportedOperationException.class)
public void removeShouldNotBeImplemented() {
TreeNode<Integer> root = TreeNode.create(Integer.class, 9);
TreeIterator<Integer> iterator = new TreeIterator<Integer>(root);
iterator.remove();
}
}