package akka.dispatch; import org.junit.Test; import static org.junit.Assert.*; import java.util.concurrent.Callable; import java.util.LinkedList; import java.lang.Iterable; import akka.japi.Function; import akka.japi.Function2; import akka.japi.Procedure; import scala.Some; import scala.Right; import static akka.dispatch.Futures.*; public class JavaFutureTests { @Test public void mustBeAbleToMapAFuture() { Future f1 = future(new Callable() { public String call() { return "Hello"; } }); Future f2 = f1.map(new Function() { public String apply(String s) { return s + " World"; } }); assertEquals("Hello World", f2.get()); } // TODO: Improve this test, perhaps with an Actor @Test public void mustSequenceAFutureList() { LinkedList> listFutures = new LinkedList>(); LinkedList listExpected = new LinkedList(); for (int i = 0; i < 10; i++) { listExpected.add("test"); listFutures.add(future(new Callable() { public String call() { return "test"; } })); } Future> futureList = sequence(listFutures); assertEquals(futureList.get(), listExpected); } // TODO: Improve this test, perhaps with an Actor @Test public void foldForJavaApiMustWork() { LinkedList> listFutures = new LinkedList>(); StringBuilder expected = new StringBuilder(); for (int i = 0; i < 10; i++) { expected.append("test"); listFutures.add(future(new Callable() { public String call() { return "test"; } })); } Future result = fold("", 15000,listFutures, new Function2(){ public String apply(String r, String t) { return r + t; } }); assertEquals(result.get(), expected.toString()); } @Test public void reduceForJavaApiMustWork() { LinkedList> listFutures = new LinkedList>(); StringBuilder expected = new StringBuilder(); for (int i = 0; i < 10; i++) { expected.append("test"); listFutures.add(future(new Callable() { public String call() { return "test"; } })); } Future result = reduce(listFutures, 15000, new Function2(){ public String apply(String r, String t) { return r + t; } }); assertEquals(result.get(), expected.toString()); } @Test public void traverseForJavaApiMustWork() { LinkedList listStrings = new LinkedList(); LinkedList expectedStrings = new LinkedList(); for (int i = 0; i < 10; i++) { expectedStrings.add("TEST"); listStrings.add("test"); } Future> result = traverse(listStrings, new Function>(){ public Future apply(final String r) { return future(new Callable() { public String call() { return r.toUpperCase(); } }); } }); assertEquals(result.get(), expectedStrings); } }