-package net.pterodactylus.sone.text;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.junit.Test;
-
-/**
- * Unit test for {@link PartContainer}.
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public class PartContainerTest {
-
- private final PartContainer container = new PartContainer();
-
- @Test
- public void emptyContainerHasSizeZero() {
- assertThat(container.size(), is(0));
- }
-
- @Test(expected = NullPointerException.class)
- public void canNotAddNullPart() {
- container.add(null);
- }
-
- @Test
- public void containerWithSinglePartHasSizeOne() {
- container.add(mock(Part.class));
- assertThat(container.size(), is(1));
- }
-
- @Test
- public void containerWithSinglePartCanReturnPart() {
- Part part = mock(Part.class);
- container.add(part);
- assertThat(container.getPart(0), is(part));
- }
-
- @Test
- public void containerIsEmptyAfterPartIsAddedAndRemoved() {
- container.add(mock(Part.class));
- container.removePart(0);
- assertThat(container.size(), is(0));
- }
-
- @Test
- public void containerContainsSecondPartIfFirstPartIsRemoved() {
- container.add(mock(Part.class));
- Part part = mock(Part.class);
- container.add(part);
- container.removePart(0);
- assertThat(container.getPart(0), is(part));
- }
-
- @Test
- public void textOfContainerPartIsTextOfPartsConcatenated() {
- container.add(createPartWithText("first"));
- container.add(createPartWithText("second"));
- assertThat(container.getText(), is("firstsecond"));
- }
-
- private Part createPartWithText(String text) {
- Part part = mock(Part.class);
- when(part.getText()).thenReturn(text);
- return part;
- }
-
- @Test(expected = NoSuchElementException.class)
- public void emptyContainerIteratorThrowsOnNext() {
- container.iterator().next();
- }
-
- @Test
- public void iteratorIteratesPartsRecursivelyInCorrectOrder() {
- Part firstPart = mock(Part.class);
- PartContainer secondPart = new PartContainer();
- Part thirdPart = mock(Part.class);
- Part nestedFirstPart = mock(Part.class);
- Part nestedSecondPart = mock(Part.class);
- secondPart.add(nestedFirstPart);
- secondPart.add(nestedSecondPart);
- container.add(firstPart);
- container.add(secondPart);
- container.add(thirdPart);
- Iterator<Part> parts = container.iterator();
- assertThat(parts.next(), is(firstPart));
- assertThat(parts.next(), is(nestedFirstPart));
- assertThat(parts.next(), is(nestedSecondPart));
- assertThat(parts.next(), is(thirdPart));
- assertThat(parts.hasNext(), is(false));
- }
-
-}