blob: bfefeb35022b67aa8371479c9bd55dd8aa3c889d [file] [log] [blame]
package org.junit.tests.manipulation;
import static org.junit.Assert.assertEquals;
import junit.framework.JUnit4TestAdapter;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.Description;
import org.junit.runner.JUnitCore;
import org.junit.runner.OrderWith;
import org.junit.runner.Request;
import org.junit.runner.RunWith;
import org.junit.runner.Runner;
import org.junit.runner.manipulation.Alphanumeric;
import org.junit.runner.notification.RunNotifier;
@RunWith(Enclosed.class)
public class OrderWithTest {
public static class TestClassRunnerIsOrderableViaOrderWith {
private static String log = "";
public static class Unordered {
@Test
public void a() {
log += "a";
}
@Test
public void b() {
log += "b";
}
@Test
public void c() {
log += "c";
}
}
@OrderWith(AlphanumericOrdering.class)
public static class OrderedAlphanumerically extends Unordered {
}
@OrderWith(ReverseAlphanumericOrdering.class)
public static class OrderedReverseAlphanumerically extends Unordered {
}
@Before
public void resetLog() {
log = "";
}
@Test
public void orderingForwardWorksOnTestClassRunner() {
Request forward = Request.aClass(OrderedAlphanumerically.class);
new JUnitCore().run(forward);
assertEquals("abc", log);
}
@Test
public void orderingBackwardWorksOnTestClassRunner() {
Request backward = Request.aClass(OrderedReverseAlphanumerically.class);
new JUnitCore().run(backward);
assertEquals("cba", log);
}
@RunWith(Enclosed.class)
public static class UnorderedSuite {
public static class A {
@Test
public void a() {
log += "Aa";
}
@Test
public void b() {
log += "Ab";
}
@Test
public void c() {
log += "Ac";
}
}
public static class B {
@Test
public void a() {
log += "Ba";
}
@Test
public void b() {
log += "Bb";
}
@Test
public void c() {
log += "Bc";
}
}
}
@OrderWith(AlphanumericOrdering.class)
public static class SuiteOrderedAlphanumerically extends UnorderedSuite {
}
@OrderWith(ReverseAlphanumericOrdering.class)
public static class SuiteOrderedReverseAlphanumerically extends UnorderedSuite {
}
@Test
public void orderingForwardWorksOnSuite() {
Request forward = Request.aClass(SuiteOrderedAlphanumerically.class);
new JUnitCore().run(forward);
assertEquals("AaAbAcBaBbBc", log);
}
@Test
public void orderingBackwardWorksOnSuite() {
Request backward = Request.aClass(SuiteOrderedReverseAlphanumerically.class);
new JUnitCore().run(backward);
assertEquals("BcBbBaAcAbAa", log);
}
}
public static class TestClassRunnerIsSortableViaOrderWith {
private static String log = "";
public static class Unordered {
@Test
public void a() {
log += "a";
}
@Test
public void b() {
log += "b";
}
@Test
public void c() {
log += "c";
}
}
@Before
public void resetLog() {
log = "";
}
@OrderWith(Alphanumeric.class)
public static class SortedAlphanumerically extends Unordered {
}
@OrderWith(ReverseAlphanumericSorter.class)
public static class SortedReverseAlphanumerically extends Unordered {
}
@Test
public void sortingForwardWorksOnTestClassRunner() {
Request forward = Request.aClass(SortedAlphanumerically.class);
new JUnitCore().run(forward);
assertEquals("abc", log);
}
@Test
public void sortingBackwardWorksOnTestClassRunner() {
Request backward = Request.aClass(SortedReverseAlphanumerically.class);
new JUnitCore().run(backward);
assertEquals("cba", log);
}
}
public static class TestClassRunnerIsOrderableWithSuiteMethod {
private static String log = "";
public static class Unordered {
@Test
public void a() {
log += "a";
}
@Test
public void b() {
log += "b";
}
@Test
public void c() {
log += "c";
}
}
@OrderWith(AlphanumericOrdering.class)
public static class OrderedAlphanumerically extends Unordered {
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(OrderedAlphanumerically.class);
}
}
@OrderWith(ReverseAlphanumericOrdering.class)
public static class OrderedReverseAlphanumerically extends Unordered {
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(OrderedReverseAlphanumerically.class);
}
}
@Before
public void resetLog() {
log = "";
}
@Test
public void orderingForwardWorksOnTestClassRunner() {
Request forward = Request.aClass(OrderedAlphanumerically.class);
new JUnitCore().run(forward);
assertEquals("abc", log);
}
@Test
public void orderingBackwardWorksOnTestClassRunner() {
Request backward = Request.aClass(OrderedReverseAlphanumerically.class);
new JUnitCore().run(backward);
assertEquals("cba", log);
}
}
public static class UnOrderableRunnersAreHandledWithoutCrashing {
public static class UnOrderableRunner extends Runner {
public UnOrderableRunner(Class<?> klass) {
}
@Override
public Description getDescription() {
return Description.EMPTY;
}
@Override
public void run(RunNotifier notifier) {
}
}
@RunWith(UnOrderableRunner.class)
public static class UnOrderable {
@Test
public void a() {
}
}
@Test
public void unOrderablesAreHandledWithoutCrashing() {
Request unordered = Request.aClass(UnOrderable.class).orderWith(
AlphanumericOrdering.INSTANCE);
new JUnitCore().run(unordered);
}
}
}