package com.insightfullogic.java8.examples.chapter4; import com.insightfullogic.java8.examples.chapter1.Album; import com.insightfullogic.java8.examples.chapter1.SampleData; import com.insightfullogic.java8.examples.chapter1.Track; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import java.util.Collection; import java.util.List; import java.util.function.Function; import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; import static org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class TestOrder { private final OrderFactory factory; private Order order; @Parameters public static Collection<Object[]> data() { Object[][] data = new Object[][] { of(OrderImperative::new), of(OrderStreams::new), of(OrderDomain::new) }; return asList(data); } private static interface OrderFactory extends Function<List<Album>, Order> {} private static Object[] of(OrderFactory factory) { return new Object[] { factory }; } public TestOrder(OrderFactory factory) { this.factory = factory; } @Before public void initOrder() { List<Track> tracks = asList(new Track("Acknowledgement", 467), new Track("Resolution", 442)); Album aLoveSupreme = new Album("A Love Supreme", tracks, asList(SampleData.johnColtrane)); order = factory.apply(asList(aLoveSupreme)); } @Test public void countsRunningTime() { assertEquals(909, order.countRunningTime()); } @Test public void countsArtists() { assertEquals(1, order.countMusicians()); } @Test public void countsTracks() { assertEquals(2, order.countTracks()); } }