package com.googlecode.zohhak.ide; import static com.googlecode.zohhak.testutils.JUnitLauncher.runJUnitRequest; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Test; import org.junit.runner.Description; import org.junit.runner.Request; import org.junit.runner.Result; import org.junit.runner.Runner; import org.junit.runners.model.InitializationError; import com.googlecode.zohhak.api.runners.ZohhakRunner; import com.googlecode.zohhak.programmatic.BasicAnnotationsUsage; import com.googlecode.zohhak.programmatic.StandardTest; public class EclipseIntegration { @Test public void classRequestFromSourceAndRerunFromTestResultWindow() { Result result = executeEclipseRequest(BasicAnnotationsUsage.class); assertThat(result.getFailureCount()).isEqualTo(1); assertThat(result.getIgnoreCount()).isEqualTo(3); assertThat(result.getRunCount()).isEqualTo(4); } @Test public void methodRequestFromSource() { Result result = executeEclipseRequest(BasicAnnotationsUsage.class, "methodWithParam"); assertThat(result.getFailures()).isEmpty(); assertThat(result.getRunCount()).isEqualTo(2); } @Test public void methodRerunFromTestResultWindow() { Result result = executeEclipseRequest(BasicAnnotationsUsage.class, "methodWithParam [2]"); assertThat(result.getFailures()).isEmpty(); assertThat(result.getRunCount()).isEqualTo(1); } @Test public void should_fail_when_nonexisting_parameter_requested() { Result result = executeEclipseRequest(BasicAnnotationsUsage.class, "methodWithParam [nonexisting]"); assertThatOnlyMethodNotFound(result); } @Test public void should_fail_when_nonexisting_method_requested() { Result result = executeEclipseRequest(BasicAnnotationsUsage.class, "nonExistingMethod [2]"); assertThatOnlyMethodNotFound(result); } @Test public void checkDescription() throws InitializationError { Runner runner = new ZohhakRunner(BasicAnnotationsUsage.class); Description description = runner.getDescription(); assertThat(description.getChildren()).hasSize(5); } @Test public void learningBlockRunnerWithMethod() { Result result = executeEclipseRequest(StandardTest.class, "method1"); assertThat(result.getFailures()).isEmpty(); assertThat(result.getRunCount()).isEqualTo(1); } @Test public void learningBlockRunnerWithClass() { Result result = executeEclipseRequest(StandardTest.class); assertThat(result.getFailures()).isEmpty(); assertThat(result.getRunCount()).isEqualTo(2); } private static Result executeEclipseRequest(Class<?> clazz) { Request request = eclipseClassRequest(clazz); return runJUnitRequest(request); } private static Result executeEclipseRequest(Class<?> clazz, String methodName) { Request request = eclipseMethodRequest(clazz, methodName); return runJUnitRequest(request); } /** * the way eclipse creates request */ private static Request eclipseClassRequest(Class<?> clazz) { return Request.classes(clazz); } /** * the way eclipse creates request */ private static Request eclipseMethodRequest(Class<?> clazz, String methodName) { Description method = Description.createTestDescription(clazz, methodName); return Request.classWithoutSuiteMethod(clazz).filterWith(method); } private void assertThatOnlyMethodNotFound(Result result) { assertThat(result.getRunCount()).isEqualTo(1); assertThat(result.getFailureCount()).isEqualTo(1); assertThat(result.getFailures().get(0).getTestHeader()) .containsIgnoringCase("initializationError"); assertThat(result.getFailures().get(0).getMessage()).containsIgnoringCase("no tests found"); } }