blob: ca5c8d6e02b8b22c51b84080cde651224b42327d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 SpringSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Andrew Eisenberg - initial API and implementation
* Andrew Eisenberg <andrew@eisenberg.as> - [JUnit] Rerun failed first does not work with JUnit4 - https://bugs.eclipse.org/bugs/show_bug.cgi?id=140392
*******************************************************************************/
package org.eclipse.jdt.junit.tests;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.Description;
import org.junit.runner.RunWith;
import org.junit.runner.Runner;
import org.junit.runner.manipulation.Sorter;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.Suite;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
import org.eclipse.jdt.internal.junit4.runner.FailuresFirstSorter;
/**
* Tests for FailuresFirstSorter in org.eclipse.jdt.junit4.runtime.
*
* @since 3.6
*/
@SuppressWarnings("nls")
public class RerunFailFirstTests {
static class Data {
public static class T1 {
public T1() { }
@Test
public void m1() { }
@Test
public void m2() { }
@Test
public void m3() { }
}
public static class T2 {
public T2() { }
@Test
public void m1() { }
@Test
public void m2() { }
@Test
public void m3() { }
}
public static class T3 {
public T3() { }
@Test
public void m1() { }
@Test
public void m2() { }
@Test
public void m3() { }
}
@RunWith(Suite.class)
@Suite.SuiteClasses({
T1.class,
T2.class,
T3.class
})
static class M0 {
public M0() { }
}
}
private Suite runner;
@Before
public void setUp() throws InitializationError {
runner= new Suite(Data.M0.class, new RunnerBuilder() {
@Override
public Runner runnerForClass(Class<?> testClass) throws Throwable {
return new BlockJUnit4ClassRunner(testClass);
}
});
}
@Test
public void noFailures() throws Exception {
Assert.assertEquals("M0 T1 m2 m3 m1 T2 m2 m3 m1 T3 m2 m3 m1 ", buildDescriptionOrder(runner.getDescription()));
}
@Test
public void noFailuresWithSorter() throws Exception {
runner.sort(new Sorter(new FailuresFirstSorter(new String[0])));
Assert.assertEquals("M0 T1 m2 m3 m1 T2 m2 m3 m1 T3 m2 m3 m1 ", buildDescriptionOrder(runner.getDescription()));
}
@Test
public void failuresWithSorter1() throws Exception {
runner.sort(new Sorter(new FailuresFirstSorter(new String[] { "m2(" + Data.T1.class.getName() + ")" })));
Assert.assertEquals("M0 T1 m2 m3 m1 T2 m2 m3 m1 T3 m2 m3 m1 ", buildDescriptionOrder(runner.getDescription()));
}
@Test
public void failuresWithSorter2() throws Exception {
runner.sort(new Sorter(new FailuresFirstSorter(new String[] { "m1(" + Data.T1.class.getName() + ")" })));
Assert.assertEquals("M0 T1 m1 m2 m3 T2 m2 m3 m1 T3 m2 m3 m1 ", buildDescriptionOrder(runner.getDescription()));
}
@Test
public void failuresWithSorter3() throws Exception {
runner.sort(new Sorter(new FailuresFirstSorter(new String[] { "m1(" + Data.T2.class.getName() + ")" })));
Assert.assertEquals("M0 T2 m1 m2 m3 T1 m2 m3 m1 T3 m2 m3 m1 ", buildDescriptionOrder(runner.getDescription()));
}
@Test
public void failuresWithSorter4() throws Exception {
runner.sort(new Sorter(new FailuresFirstSorter(
new String[] { "m1(" + Data.T2.class.getName() + ")",
"m1(" + Data.T3.class.getName() + ")",
"m3(" + Data.T2.class.getName() + ")" })));
Assert.assertEquals("M0 T2 m3 m1 m2 T3 m1 m2 m3 T1 m2 m3 m1 ", buildDescriptionOrder(runner.getDescription()));
}
private String buildDescriptionOrder(Description description) {
StringBuilder sb= new StringBuilder();
String displayName= description.getDisplayName();
if (description.isSuite()) {
int dollarIndex= displayName.lastIndexOf('$');
sb.append(displayName.substring(dollarIndex + 1, dollarIndex + 3));
} else {
int parenIndex= displayName.indexOf('(');
sb.append(displayName.substring(parenIndex - 2, parenIndex));
}
sb.append(" ");
for (Description child : description.getChildren()) {
sb.append(buildDescriptionOrder(child));
}
return sb.toString();
}
}