package cz.cuni.mff.d3s.been.taskapi; import static cz.cuni.mff.d3s.been.core.StatusCode.EX_USAGE; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.contrib.java.lang.system.ExpectedSystemExit; /** * @author Martin Sixta */ public class TaskRunnerTest extends Assert { private static final String ARG0 = "ARG0"; @Rule public final ExpectedSystemExit exit = ExpectedSystemExit.none(); /** Dummy exception to catch */ static class DummyException extends RuntimeException { } /** Dummy task, throws DummyException in doMain to ensure it was called. */ static class DummyTask extends Task { @Override public int doMain(String[] args) { throw new DummyException(); } @Override public void run(String[] args) { } } /** Dummy task class which is private -> cannot be created */ private static class PrivateDummyTask extends Task { @Override public int doMain(String[] args) { return 0; } @Override public void run(String[] args) { } } /** Dummy task which checks that doMain was called with no arguments */ static class DummyTaskArgs0 extends Task { @Override public int doMain(String[] args) { assertEquals(0, args.length); return 0; } @Override public void run(String[] args) { } } /** Dummy task which checks that doMain was called with one arguments */ static class DummyTaskArgs1 extends Task { @Override public int doMain(String[] args) { assertEquals(1, args.length); assertEquals(ARG0, args[0]); return 0; } @Override public void run(String[] args) { } } @Test(expected = DummyException.class) public void testLoadClass() { TaskRunner.main(new String[] { DummyTask.class.getName() }); } @Test public void testLoadClassNoClass() { exit.expectSystemExitWithStatus(EX_USAGE.getCode()); TaskRunner.main(new String[0]); } @Test public void testLoadClassFail() { exit.expectSystemExitWithStatus(EX_USAGE.getCode()); TaskRunner.main(new String[] { "does.not.exists.Class" }); } @Test public void testLoadClassFailOnPrivate() { exit.expectSystemExitWithStatus(EX_USAGE.getCode()); TaskRunner.main(new String[] { PrivateDummyTask.class.getName() }); } @Test public void testLoadClassPassedArgsToDoMain0() { TaskRunner.main(new String[] { DummyTaskArgs0.class.getName() }); } @Test public void testLoadClassPassedArgsToDoMain1() { TaskRunner.main(new String[] { DummyTaskArgs1.class.getName(), ARG0 }); } }