1 package net.pterodactylus.sone.text;
3 import static org.hamcrest.MatcherAssert.assertThat;
4 import static org.hamcrest.Matchers.is;
5 import static org.mockito.Mockito.mock;
6 import static org.mockito.Mockito.when;
8 import java.util.Iterator;
9 import java.util.NoSuchElementException;
11 import org.junit.Test;
14 * Unit test for {@link PartContainer}.
16 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
18 public class PartContainerTest {
20 private final PartContainer container = new PartContainer();
23 public void emptyContainerHasSizeZero() {
24 assertThat(container.size(), is(0));
28 public void containerWithSinglePartHasSizeOne() {
29 container.add(mock(Part.class));
30 assertThat(container.size(), is(1));
34 public void containerWithSinglePartCanReturnPart() {
35 Part part = mock(Part.class);
37 assertThat(container.getPart(0), is(part));
41 public void containerIsEmptyAfterPartIsAddedAndRemoved() {
42 container.add(mock(Part.class));
43 container.removePart(0);
44 assertThat(container.size(), is(0));
48 public void containerContainsSecondPartIfFirstPartIsRemoved() {
49 container.add(mock(Part.class));
50 Part part = mock(Part.class);
52 container.removePart(0);
53 assertThat(container.getPart(0), is(part));
57 public void textOfContainerPartIsTextOfPartsConcatenated() {
58 container.add(createPartWithText("first"));
59 container.add(createPartWithText("second"));
60 assertThat(container.getText(), is("firstsecond"));
63 private Part createPartWithText(String text) {
64 Part part = mock(Part.class);
65 when(part.getText()).thenReturn(text);
69 @Test(expected = NoSuchElementException.class)
70 public void emptyContainerIteratorThrowsOnNext() {
71 container.iterator().next();
75 public void iteratorIteratesPartsRecursivelyInCorrectOrder() {
76 Part firstPart = mock(Part.class);
77 PartContainer secondPart = new PartContainer();
78 Part thirdPart = mock(Part.class);
79 Part nestedFirstPart = mock(Part.class);
80 Part nestedSecondPart = mock(Part.class);
81 secondPart.add(nestedFirstPart);
82 secondPart.add(nestedSecondPart);
83 container.add(firstPart);
84 container.add(secondPart);
85 container.add(thirdPart);
86 Iterator<Part> parts = container.iterator();
87 assertThat(parts.next(), is(firstPart));
88 assertThat(parts.next(), is(nestedFirstPart));
89 assertThat(parts.next(), is(nestedSecondPart));
90 assertThat(parts.next(), is(thirdPart));
91 assertThat(parts.hasNext(), is(false));