package com.nurkiewicz.lazyseq; import org.mockito.Mock; import org.testng.annotations.Test; import java.util.function.Supplier; import static com.nurkiewicz.lazyseq.LazySeq.*; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; /** * @author Tomasz Nurkiewicz * @since 5/13/13, 6:26 PM */ public class LazySeqForceTest extends AbstractBaseTestCase { @Mock private Supplier<LazySeq<Integer>> supplierMock; @Test public void shouldDoNothingWhenForcingEmpty() throws Exception { assertThat(empty().force()).isEqualTo(empty()); } @Test public void shouldForceWholeFiniteSeq() throws Exception { //given final LazySeq<Double> nums = LazySeq.numbers(1.0, 0.5).take(5); assertThat(nums.toString()).isEqualTo("[1.0, ?]"); //when nums.force(); //then assertThat(nums.toString()).isEqualTo("[1.0, 1.5, 2.0, 2.5, 3.0]"); } @Test public void shouldForceOnlyPartOfTheSeq() throws Exception { //given final LazySeq<Double> nums = LazySeq.numbers(1.0, 0.5); assertThat(nums.toString()).isEqualTo("[1.0, ?]"); //when nums.take(5).force(); //then assertThat(nums.toString()).isEqualTo("[1.0, 1.5, 2.0, 2.5, 3.0, ?]"); } @Test public void shouldDoNothingWhenForcingTwice() throws Exception { //given final LazySeq<Integer> lazy = cons(1, supplierMock); given(supplierMock.get()).willReturn(of(1)); //when lazy.force().force(); //then verify(supplierMock).get(); } }