Skip to content

Commit 792cd7c

Browse files
committed
Add fallback to name comparison if two test cases have the same time
1 parent 08085ca commit 792cd7c

File tree

4 files changed

+134
-41
lines changed

4 files changed

+134
-41
lines changed

src/main/java/de/donnerbart/split/TestCase.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ record TestCase(@NotNull String name, double time) implements Comparable<TestCas
99

1010
@Override
1111
public int compareTo(final @NotNull TestCase o) {
12-
return Double.compare(time, o.time);
12+
final var compareTime = Double.compare(time, o.time);
13+
if (compareTime != 0) {
14+
return compareTime;
15+
}
16+
return o.name.compareTo(name);
1317
}
1418

1519
@Override

src/test/java/de/donnerbart/split/TestSplitTest.java

Lines changed: 118 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ void setUp() throws Exception {
4444
.resolve("example");
4545
Files.createDirectories(projectFolder);
4646
copyResourceToTarget(projectFolder, "tests/FastTest.java", "FastTest.java", PERMISSIONS);
47-
copyResourceToTarget(projectFolder, "tests/NoTimingTest.java", "NoTimingTest.java", PERMISSIONS);
47+
copyResourceToTarget(projectFolder, "tests/NoTimingOneTest.java", "NoTimingOneTest.java", PERMISSIONS);
48+
copyResourceToTarget(projectFolder, "tests/NoTimingTwoTest.java", "NoTimingTwoTest.java", PERMISSIONS);
4849
copyResourceToTarget(projectFolder, "tests/SlowTest.java", "SlowTest.java", PERMISSIONS);
4950
copyResourceToTarget(projectFolder, "tests/SlowestTest.java", "SlowestTest.java", PERMISSIONS);
5051

@@ -64,72 +65,150 @@ void setUp() throws Exception {
6465
}
6566

6667
@Test
67-
void run_withoutJUnit_firstSplit() throws Exception {
68-
final var testSplit = new TestSplit(0,
69-
2,
68+
void run_withoutJUnit_withOneSplit() throws Exception {
69+
final var split = new TestSplit(0,
70+
1,
7071
"**/example-project/**/*Test.java",
7172
"**/example-project/**/*Abstract*.java",
7273
null,
7374
tmp,
7475
true,
7576
exitCode::set);
76-
testSplit.run();
77+
split.run();
7778

78-
assertThat(systemOut.getLines()).hasSize(1);
79-
assertThat(systemOut.getText()).isEqualTo(
80-
"de.donnerbart.example.SlowestTest de.donnerbart.example.NoTimingTest");
79+
assertThat(systemOut.getLines()).singleElement().isEqualTo( //
80+
"de.donnerbart.example.FastTest de.donnerbart.example.NoTimingOneTest de.donnerbart.example.NoTimingTwoTest de.donnerbart.example.SlowTest de.donnerbart.example.SlowestTest");
8181
assertThat(exitCode).hasNullValue();
8282
}
8383

8484
@Test
85-
void run_withoutJUnit_secondSplit() throws Exception {
86-
final var testSplit = new TestSplit(1,
87-
2,
88-
"**/example-project/**/*Test.java",
89-
"**/example-project/**/*Abstract*.java",
90-
null,
91-
tmp,
92-
true,
93-
exitCode::set);
94-
testSplit.run();
85+
void run_withoutJUnit_withTwoSplits() throws Exception {
86+
for (int index = 0; index <= 1; index++) {
87+
final var split = new TestSplit(index,
88+
2,
89+
"**/example-project/**/*Test.java",
90+
"**/example-project/**/*Abstract*.java",
91+
null,
92+
tmp,
93+
true,
94+
exitCode::set);
95+
split.run();
96+
// add a new line to separate the captured output
97+
System.out.println();
98+
}
9599

96-
assertThat(systemOut.getLines()).hasSize(1);
97-
assertThat(systemOut.getText()).isEqualTo("de.donnerbart.example.SlowTest de.donnerbart.example.FastTest");
100+
assertThat(systemOut.getLines()).hasSize(2).containsSequence( //
101+
"de.donnerbart.example.FastTest de.donnerbart.example.NoTimingTwoTest de.donnerbart.example.SlowestTest",
102+
"de.donnerbart.example.NoTimingOneTest de.donnerbart.example.SlowTest");
98103
assertThat(exitCode).hasNullValue();
99104
}
100105

101106
@Test
102-
void run_withJUnit_firstSplit() throws Exception {
103-
final var testSplit = new TestSplit(0,
104-
2,
105-
"**/example-project/**/*Test.java",
106-
"**/example-project/**/*Abstract*.java",
107-
"**/junit-reports/*.xml",
108-
tmp,
109-
true,
110-
exitCode::set);
111-
testSplit.run();
107+
void run_withoutJUnit_withThreeSplits() throws Exception {
108+
for (int index = 0; index <= 2; index++) {
109+
final var split = new TestSplit(index,
110+
3,
111+
"**/example-project/**/*Test.java",
112+
"**/example-project/**/*Abstract*.java",
113+
null,
114+
tmp,
115+
true,
116+
exitCode::set);
117+
split.run();
118+
// add a new line to separate the captured output
119+
System.out.println();
120+
}
112121

113-
assertThat(systemOut.getLines()).hasSize(1);
114-
assertThat(systemOut.getText()).isEqualTo("de.donnerbart.example.SlowestTest");
122+
assertThat(systemOut.getLines()).hasSize(3).containsSequence( //
123+
"de.donnerbart.example.FastTest de.donnerbart.example.SlowTest",
124+
"de.donnerbart.example.NoTimingOneTest de.donnerbart.example.SlowestTest",
125+
"de.donnerbart.example.NoTimingTwoTest");
115126
assertThat(exitCode).hasNullValue();
116127
}
117128

118129
@Test
119-
void run_withJUnit_secondSplit() throws Exception {
120-
final var testSplit = new TestSplit(1,
121-
2,
130+
void run_withJUnit_withOneSplit() throws Exception {
131+
final var split = new TestSplit(0,
132+
1,
122133
"**/example-project/**/*Test.java",
123134
"**/example-project/**/*Abstract*.java",
124135
"**/junit-reports/*.xml",
125136
tmp,
126137
true,
127138
exitCode::set);
128-
testSplit.run();
139+
split.run();
140+
141+
assertThat(systemOut.getLines()).singleElement().isEqualTo( //
142+
"de.donnerbart.example.SlowestTest de.donnerbart.example.SlowTest de.donnerbart.example.FastTest de.donnerbart.example.NoTimingOneTest de.donnerbart.example.NoTimingTwoTest");
143+
assertThat(exitCode).hasNullValue();
144+
}
145+
146+
@Test
147+
void run_withJUnit_withTwoSplits() throws Exception {
148+
for (int index = 0; index <= 1; index++) {
149+
final var split = new TestSplit(index,
150+
2,
151+
"**/example-project/**/*Test.java",
152+
"**/example-project/**/*Abstract*.java",
153+
"**/junit-reports/*.xml",
154+
tmp,
155+
true,
156+
exitCode::set);
157+
split.run();
158+
// add a new line to separate the captured output
159+
System.out.println();
160+
}
161+
162+
assertThat(systemOut.getLines()).hasSize(2).containsSequence( //
163+
"de.donnerbart.example.SlowestTest",
164+
"de.donnerbart.example.SlowTest de.donnerbart.example.FastTest de.donnerbart.example.NoTimingOneTest de.donnerbart.example.NoTimingTwoTest");
165+
assertThat(exitCode).hasNullValue();
166+
}
167+
168+
@Test
169+
void run_withJUnit_withThreeSplits() throws Exception {
170+
for (int index = 0; index <= 2; index++) {
171+
final var split = new TestSplit(index,
172+
3,
173+
"**/example-project/**/*Test.java",
174+
"**/example-project/**/*Abstract*.java",
175+
"**/junit-reports/*.xml",
176+
tmp,
177+
true,
178+
exitCode::set);
179+
split.run();
180+
// add a new line to separate the captured output
181+
System.out.println();
182+
}
183+
184+
assertThat(systemOut.getLines()).hasSize(3).containsSequence( //
185+
"de.donnerbart.example.SlowestTest",
186+
"de.donnerbart.example.SlowTest",
187+
"de.donnerbart.example.FastTest de.donnerbart.example.NoTimingOneTest de.donnerbart.example.NoTimingTwoTest");
188+
assertThat(exitCode).hasNullValue();
189+
}
190+
191+
@Test
192+
void run_withJUnit_withFourSplits() throws Exception {
193+
for (int index = 0; index <= 3; index++) {
194+
final var split = new TestSplit(index,
195+
4,
196+
"**/example-project/**/*Test.java",
197+
"**/example-project/**/*Abstract*.java",
198+
"**/junit-reports/*.xml",
199+
tmp,
200+
true,
201+
exitCode::set);
202+
split.run();
203+
// add a new line to separate the captured output
204+
System.out.println();
205+
}
129206

130-
assertThat(systemOut.getLines()).hasSize(1);
131-
assertThat(systemOut.getText()).isEqualTo(
132-
"de.donnerbart.example.SlowTest de.donnerbart.example.FastTest de.donnerbart.example.NoTimingTest");
207+
assertThat(systemOut.getLines()).hasSize(4).containsSequence( //
208+
"de.donnerbart.example.SlowestTest",
209+
"de.donnerbart.example.SlowTest",
210+
"de.donnerbart.example.FastTest",
211+
"de.donnerbart.example.NoTimingOneTest de.donnerbart.example.NoTimingTwoTest");
133212
assertThat(exitCode).hasNullValue();
134213
}
135214

src/test/resources/tests/NoTimingTest.java renamed to src/test/resources/tests/NoTimingOneTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import org.junit.jupiter.api.Test;
44

5-
class NoTimingTest {
5+
class NoTimingOneTest {
66

77
@Test
88
void testNoTimingMethod() {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package de.donnerbart.example;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
class NoTimingTwoTest {
6+
7+
@Test
8+
void testNoTimingMethod() {
9+
}
10+
}

0 commit comments

Comments
 (0)