blob: f17283aa07f65b88595fe7bfd1394915b3feb407 [file] [log] [blame]
package org.eclipse.ease;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
@Timeout(value = 5, unit = TimeUnit.SECONDS)
public class ScriptResultTest {
private static final Object RESULT = "done";
private static final ScriptExecutionException EXCEPTION = new ScriptExecutionException("some error");
@Test
@DisplayName("isDone() == false on new ScriptResult()")
public void isDone_false_on_new_ScriptResult() {
assertFalse(new ScriptResult().isDone());
}
@Test
@DisplayName("isDone() == true when result is ready")
public void isDone_true_when_result_is_ready() {
final ScriptResult result = new ScriptResult();
result.setResult(RESULT);
assertTrue(result.isDone());
}
@Test
@DisplayName("isDone() == true when result is null")
public void isDone_true_when_result_is_null() {
final ScriptResult result = new ScriptResult();
result.setResult(null);
assertTrue(result.isDone());
}
@Test
@DisplayName("isDone() == true when exception was thrown")
public void isDone_true_when_exception_was_thrown() {
final ScriptResult result = new ScriptResult();
result.setException(EXCEPTION);
assertTrue(result.isDone());
}
@Test
@DisplayName("get() returns ready execution result")
public void get_returns_ready_execution_result() throws InterruptedException, ExecutionException {
final ScriptResult result = new ScriptResult();
result.setResult(RESULT);
assertEquals(RESULT, result.get());
}
@Test
@DisplayName("get() throws execution exception")
public void get_throws_execution_exception() {
final ScriptResult result = new ScriptResult();
result.setException(EXCEPTION);
assertThrows(ScriptExecutionException.class, () -> result.get());
}
@Test
@DisplayName("get() waits for execution result")
public void get_waits_for_execution_result() throws InterruptedException, ExecutionException {
final ScriptResult result = new ScriptResult();
new Job("SetResult") {
@Override
protected IStatus run(IProgressMonitor monitor) {
result.setResult(RESULT);
return Status.OK_STATUS;
}
}.schedule(500);
assertEquals(RESULT, result.get());
}
@Test
@DisplayName("get() waits for execution exception")
public void get_waits_for_execution_exception() {
final ScriptResult result = new ScriptResult();
new Job("SetResult") {
@Override
protected IStatus run(IProgressMonitor monitor) {
result.setException(EXCEPTION);
return Status.OK_STATUS;
}
}.schedule(500);
assertThrows(ScriptExecutionException.class, () -> result.get());
}
@Test
@DisplayName("get(timeout) waits for execution result")
public void get_with_timeout_waits_for_execution_result() throws InterruptedException, ExecutionException, TimeoutException {
final ScriptResult result = new ScriptResult();
new Job("SetResult") {
@Override
protected IStatus run(IProgressMonitor monitor) {
result.setResult(RESULT);
return Status.OK_STATUS;
}
}.schedule(500);
assertEquals(RESULT, result.get(5, TimeUnit.SECONDS));
}
@Test
@DisplayName("get(timeout) waits for execution exception")
public void get_with_timeout_waits_for_execution_exception() {
final ScriptResult result = new ScriptResult();
new Job("SetResult") {
@Override
protected IStatus run(IProgressMonitor monitor) {
result.setException(EXCEPTION);
return Status.OK_STATUS;
}
}.schedule(500);
assertThrows(ScriptExecutionException.class, () -> result.get(5, TimeUnit.SECONDS));
}
@Test
@DisplayName("get(timeout) times out")
public void get_times_out() {
final ScriptResult result = new ScriptResult();
assertThrows(TimeoutException.class, () -> result.get(500, TimeUnit.MILLISECONDS));
}
@Test
@DisplayName("get(milliseconds) waits for execution exception")
public void get_with_milliseconds_timeout_waits_for_execution_result() throws InterruptedException, ExecutionException, TimeoutException {
final ScriptResult result = new ScriptResult();
new Job("SetResult") {
@Override
protected IStatus run(IProgressMonitor monitor) {
result.setResult(RESULT);
return Status.OK_STATUS;
}
}.schedule(500);
assertEquals(RESULT, result.get(5000));
}
@Test
@DisplayName("get(milliseconds) times out")
public void get_milliseconds_times_out() {
final ScriptResult result = new ScriptResult();
assertThrows(TimeoutException.class, () -> result.get(500));
}
@Test
@DisplayName("setResult() after setException() throws")
public void setResult_after_setException_throws() {
final ScriptResult result = new ScriptResult();
result.setException(EXCEPTION);
assertThrows(IllegalArgumentException.class, () -> result.setResult(RESULT));
}
@Test
@DisplayName("setResult() after setResult() throws")
public void setResult_after_setResult_throws() {
final ScriptResult result = new ScriptResult();
result.setResult(RESULT);
assertThrows(IllegalArgumentException.class, () -> result.setResult(RESULT));
}
@Test
@DisplayName("setException() after setResult() throws")
public void setException_after_setResult_throws() {
final ScriptResult result = new ScriptResult();
result.setResult(RESULT);
assertThrows(IllegalArgumentException.class, () -> result.setException(EXCEPTION));
}
@Test
@DisplayName("setException() after setException() throws")
public void setException_after_setException_throws() {
final ScriptResult result = new ScriptResult();
result.setException(EXCEPTION);
assertThrows(IllegalArgumentException.class, () -> result.setException(EXCEPTION));
}
}