package ch.akuhn.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.TreeSet; import org.junit.Test; public class MaybeTest { @Test public void emptyFirst() { assertTrue(Maybe.first(new String[0]).isNone()); assertTrue(Maybe.first(new ArrayList<String>()).isNone()); assertTrue(Maybe.first(new TreeSet<String>()).isNone()); } @Test public void emptyLast() { assertTrue(Maybe.last(new String[0]).isNone()); assertTrue(Maybe.last(new ArrayList<String>()).isNone()); assertTrue(Maybe.last(new TreeSet<String>()).isNone()); } @Test public void firstLastArray() { String[] arr = new String[] { "foo", "bar", "qux" }; assertTrue(Maybe.first(arr).isSome()); assertEquals("foo", Maybe.first(arr).get()); assertTrue(Maybe.last(arr).isSome()); assertEquals("qux", Maybe.last(arr).get()); } @Test public void firstLastIterable() { Iterable<String> arr = List.of("foo", "bar", "qux"); assertTrue(Maybe.first(arr).isSome()); assertEquals("foo", Maybe.first(arr).get()); assertTrue(Maybe.last(arr).isSome()); assertEquals("qux", Maybe.last(arr).get()); } @Test public void firstLastList() { List<String> arr = List.of("foo", "bar", "qux"); assertTrue(Maybe.first(arr).isSome()); assertEquals("foo", Maybe.first(arr).get()); assertTrue(Maybe.last(arr).isSome()); assertEquals("qux", Maybe.last(arr).get()); } @Test public void forNull() { Maybe<String> $ = Maybe.none(); for (String s : $) fail(s); } @Test public void forSome() { Maybe<String> $ = Maybe.some("abc"); int tally = 0; for (String s : $) { tally++; assertEquals("abc", s); } assertEquals(1, tally); } @Test(expected = NoSuchElementException.class) public void getNone() { Maybe.none().get(); } @Test public void getSome() { Maybe<String> $ = Maybe.some("abc"); assertEquals("abc", $.get()); } @Test public void iterableNone() { Maybe<String> $ = Maybe.none(); Iterator<String> it = $.iterator(); assertEquals(false, it.hasNext()); } @Test public void iterableSome() { Maybe<String> $ = Maybe.some("abc"); Iterator<String> it = $.iterator(); assertEquals(true, it.hasNext()); assertEquals("abc", it.next()); assertEquals(false, it.hasNext()); } @Test public void maybeMaybe() { Maybe<String> $ = Maybe.some("abc"); Maybe<String> maybe = Maybe.maybe($); assertSame($, maybe); } @Test public void maybeSomeNull() { assertEquals(true, Maybe.maybe((String) null).isNone()); assertEquals(false, Maybe.some((String) null).isNone()); } @Test(expected = NoSuchElementException.class) public void noSuchElementIterableNone() { Maybe<String> $ = Maybe.none(); Iterator<String> it = $.iterator(); it.next(); } @Test(expected = NoSuchElementException.class) public void noSuchElementIterableSome() { Maybe<String> $ = Maybe.some("abc"); Iterator<String> it = $.iterator(); it.next(); it.next(); } @Test(expected = UnsupportedOperationException.class) public void removeIterableNone() { Maybe<String> $ = Maybe.none(); Iterator<String> it = $.iterator(); it.remove(); } @Test(expected = UnsupportedOperationException.class) public void removeIterableSome() { Maybe<String> $ = Maybe.some("abc"); Iterator<String> it = $.iterator(); it.next(); it.remove(); } @Test public void testIsNone() { assertEquals(true, Maybe.none().isNone()); assertEquals(false, Maybe.some("abc").isNone()); } @Test public void testIsSome() { assertEquals(false, Maybe.none().isSome()); assertEquals(true, Maybe.some("abc").isSome()); } }