Package org.junit.tests.running.classes

Source Code of org.junit.tests.running.classes.ParentRunnerTest

package org.junit.tests.running.classes;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;

import java.util.List;

import org.hamcrest.Matcher;
import org.junit.Test;
import org.junit.internal.matchers.TypeSafeMatcher;
import org.junit.runner.Description;
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
import org.junit.runner.Result;
import org.junit.runner.manipulation.Filter;
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.ParentRunner;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerScheduler;
import org.junit.tests.experimental.rules.RuleFieldValidatorTest.TestWithNonStaticClassRule;
import org.junit.tests.experimental.rules.RuleFieldValidatorTest.TestWithProtectedClassRule;

public class ParentRunnerTest {
  public static String log= "";

  public static class FruitTest {
    @Test
    public void apple() {
      log+= "apple ";
    }

    @Test
    public void banana() {
      log+= "banana ";
    }
  }

  @Test
  public void useChildHarvester() throws InitializationError {
    log= "";
    ParentRunner<?> runner= new BlockJUnit4ClassRunner(FruitTest.class);
    runner.setScheduler(new RunnerScheduler() {
      public void schedule(Runnable childStatement) {
        log+= "before ";
        childStatement.run();
        log+= "after ";
      }

      public void finished() {
        log+= "afterAll ";
      }
    });

    runner.run(new RunNotifier());
    assertEquals("before apple after before banana after afterAll ", log);
  }

  @Test
  public void testMultipleFilters() throws Exception {
    JUnitCore junitCore= new JUnitCore();
    Request request= Request.aClass(ExampleTest.class);
    Request requestFiltered= request.filterWith(new Exclude("test1"));
    Request requestFilteredFiltered= requestFiltered
        .filterWith(new Exclude("test2"));
    Result result= junitCore.run(requestFilteredFiltered);
    assertThat(result.getFailures(), isEmpty());
    assertEquals(1, result.getRunCount());
  }

  private Matcher<List<?>> isEmpty() {
    return new TypeSafeMatcher<List<?>>() {
      public void describeTo(org.hamcrest.Description description) {
        description.appendText("is empty");
      }

      @Override
      public boolean matchesSafely(List<?> item) {
        return item.size() == 0;
      }
    };
  }

  private static class Exclude extends Filter {
    private String methodName;

    public Exclude(String methodName) {
      this.methodName= methodName;
    }

    @Override
    public boolean shouldRun(Description description) {
      return !description.getMethodName().equals(methodName);
    }

    @Override
    public String describe() {
      return "filter method name: " + methodName;
    }
  }

  public static class ExampleTest {
    @Test
    public void test1() throws Exception {
    }

    @Test
    public void test2() throws Exception {
    }

    @Test
    public void test3() throws Exception {
    }
  }

  @Test
  public void failWithHelpfulMessageForProtectedClassRule() {
    assertClassHasFailureMessage(TestWithProtectedClassRule.class,
        "The @ClassRule 'temporaryFolder' must be public.");
  }

  @Test
  public void failWithHelpfulMessageForNonStaticClassRule() {
    assertClassHasFailureMessage(TestWithNonStaticClassRule.class,
        "The @ClassRule 'temporaryFolder' must be static.");
  }

  private void assertClassHasFailureMessage(Class<?> klass, String message) {
    JUnitCore junitCore= new JUnitCore();
    Request request= Request.aClass(klass);
    Result result= junitCore.run(request);
    assertThat(result.getFailureCount(), is(2)); //the second failure is no runnable methods
    assertThat(result.getFailures().get(0).getMessage(),
        is(equalTo(message)));

  }
}
TOP

Related Classes of org.junit.tests.running.classes.ParentRunnerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.