package com.insightfullogic.java8.examples.chapter9; import com.insightfullogic.java8.examples.chapter1.Album; import com.insightfullogic.java8.examples.chapter1.Artist; import com.insightfullogic.java8.examples.chapter1.SampleData; import com.insightfullogic.java8.examples.chapter1.Track; import org.junit.Test; import java.util.List; import java.util.function.BiFunction; import java.util.stream.Stream; import static org.junit.Assert.assertEquals; public class AlbumLookupTest { interface AlbumLookupFactory extends BiFunction<List<Track>, List<Artist>, AlbumLookup> { } @Test public void albumLookedUp() { Album album = SampleData.aLoveSupreme; List<Track> trackList = album.getTrackList(); List<Artist> musicianList = album.getMusicianList(); AlbumLookupFactory completable = CompletableAlbumLookup::new; AlbumLookupFactory future = FutureAlbumLookup::new; Stream.of(completable, future) .forEach(factory -> { AlbumLookup lookup = factory.apply(trackList, musicianList); System.out.println("Testing: " + lookup.getClass().getSimpleName()); Album result = lookup.lookupByName(album.getName()); assertEquals(trackList, result.getTrackList()); assertEquals(musicianList, result.getMusicianList()); }); } }