### Question:
Options { public static <T> Iterable<Option<T>> somes(Iterable<Option<T>> options) { return Lazily.filter(options, Options.<T>isSome()); }  static Iterable<Option<T>> somes(Iterable<Option<T>> options); static Iterable<Option<T>> nones(Iterable<Option<T>> options); static Predicate<Option<T>> isSome(); static Predicate<Option<T>> isNone(); static Predicate<Option<T>> hasValue(); static Predicate<Option<T>> hasNoValue(); static Mapper<Option<T>, T> toValue(); static Mapper<Option<T>, T> toValue(
            @SuppressWarnings("unused") Class<T> valueClass); static Iterable<T> flatten(Iterable<Option<T>> options);  }### Answer:
@Test public void returnsAllSomesFromTheSuppliedIterable() { Iterable<Option<Integer>> options = iterableWith(some(10), none(Integer.class), some(20), some(30), none(Integer.class)); Iterable<Option<Integer>> expected = iterableWith(some(10), some(20), some(30)); Iterable<Option<Integer>> actual = Options.somes(options); assertThat(actual, hasOnlyItemsInOrder(expected)); }
@Test(expected = NullPointerException.class) public void throwsANullPointerExceptionIfIterablePassedToSomesIsNull() { Iterable<Option<Integer>> input = null; Options.somes(input); }