/******************************************************************************* * Copyright (c) 2015 David Green. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * David Green - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.wikitext.commonmark.internal; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import java.util.Iterator; import java.util.NoSuchElementException; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import com.google.common.base.Predicate; import com.google.common.base.Predicates; public class LinesIterableTest { @Rule public final ExpectedException thrown = ExpectedException.none(); @Test public void requiresLineSequence() { thrown.expect(NullPointerException.class); assertNotNull(new LinesIterable(null, Predicates.<Line> alwaysTrue())); } @Test public void requiresPredicate() { thrown.expect(NullPointerException.class); assertNotNull(new LinesIterable(LineSequence.create(""), null)); } @Test public void iteratorWithNoLines() { LinesIterable iterable = new LinesIterable(LineSequence.create(""), Predicates.<Line> alwaysTrue()); Iterator<Line> iterator = iterable.iterator(); assertNotNull(iterator); assertFalse(iterator.hasNext()); thrown.expect(NoSuchElementException.class); iterator.next(); } @Test public void iteratorAdvances() { LinesIterable iterable = new LinesIterable(LineSequence.create("one\ntwo"), Predicates.<Line> alwaysTrue()); Iterator<Line> iterator = iterable.iterator(); assertNotNull(iterator); assertTrue(iterator.hasNext()); Line next = iterator.next(); assertNotNull(next); assertEquals("one", next.getText()); Line two = iterator.next(); assertNotNull(two); assertEquals("two", two.getText()); } @Test public void iteratorRemove() { LinesIterable iterable = new LinesIterable(LineSequence.create("one"), Predicates.<Line> alwaysTrue()); Iterator<Line> iterator = iterable.iterator(); assertNotNull(iterator); assertTrue(iterator.hasNext()); Line next = iterator.next(); assertNotNull(next); assertEquals("one", next.getText()); thrown.expect(UnsupportedOperationException.class); iterator.remove(); } @Test @SuppressWarnings("unchecked") public void hasNext() { Predicate<Line> predicate = mock(Predicate.class); LineSequence lineSequence = LineSequence.create("one"); Iterator<Line> iterator = new LinesIterable(lineSequence, predicate).iterator(); assertFalse(iterator.hasNext()); doReturn(true).when(predicate).apply(any(Line.class)); assertTrue(iterator.hasNext()); lineSequence.advance(); assertFalse(iterator.hasNext()); } }