package com.jcwhatever.nucleus.utils.observer.result;
import static org.junit.Assert.assertEquals;
import com.jcwhatever.nucleus.utils.observer.future.FutureResultAgent;
import com.jcwhatever.nucleus.utils.observer.future.FutureResultSubscriber;
import com.jcwhatever.nucleus.utils.observer.future.IFutureResult;
import com.jcwhatever.nucleus.utils.observer.future.Result;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class FutureResultAgentTest {
@Test
public void basicTest() {
FutureResultAgent<String> agent = new FutureResultAgent<>();
final List<String> updates = new ArrayList<>(10);
IFutureResult<String> future = agent.getFuture();
future.onResult(new FutureResultSubscriber<String>() {
@Override
public void on(Result<String> argument) {
updates.add("RESULT");
}
})
.onSuccess(new FutureResultSubscriber<String>() {
@Override
public void on(Result<String> argument) {
updates.add("SUCCESS");
}
})
.onCancel(new FutureResultSubscriber<String>() {
@Override
public void on(Result<String> argument) {
updates.add("CANCEL");
}
})
.onError(new FutureResultSubscriber<String>() {
@Override
public void on(Result<String> argument) {
updates.add("ERROR");
}
})
;
agent.sendResult(new Result<String>(1.0D, 1.0D, "test"));
assertEquals(2, updates.size());
assertEquals("SUCCESS", updates.get(0));
assertEquals("RESULT", updates.get(1));
updates.clear();
agent.sendResult(new Result<String>(1.0D, -1.0D, "test"));
assertEquals(2, updates.size());
assertEquals("ERROR", updates.get(0));
assertEquals("RESULT", updates.get(1));
updates.clear();
agent.sendResult(new Result<String>(1.0D, 0.0D, "test"));
assertEquals(2, updates.size());
assertEquals("CANCEL", updates.get(0));
assertEquals("RESULT", updates.get(1));
updates.clear();
agent.sendResult(new Result<String>(0.0D, 0.0D, "test"));
assertEquals(1, updates.size());
assertEquals("RESULT", updates.get(0));
}
}