Skip to content

Commit 49d9b2e

Browse files
committed
refactor: allow tests to have multiple tags
1 parent 14cbfd4 commit 49d9b2e

18 files changed

+69
-114
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ tasks.withType(Test).configureEach {
4040
if (project.hasProperty('agent')) {
4141
it.inputs.property('agent', project.property('agent')) // make sure to re-run tests if agent changes
4242
}
43+
it.systemProperty 'spotless.cli.inSameThread', 'true' //mark tests
4344
}
4445
if (it.name == 'testCliProcess' || it.name == 'testCliProcessNpm') {
4546
it.dependsOn('shadowJar')

app/src/test/java/com/diffplug/spotless/cli/CLIIntegrationHarness.java

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,25 @@
1616
package com.diffplug.spotless.cli;
1717

1818
import java.io.IOException;
19+
import java.util.Set;
20+
import java.util.stream.Stream;
1921

2022
import org.junit.jupiter.api.BeforeEach;
23+
import org.junit.jupiter.api.condition.EnabledIf;
2124

2225
import com.diffplug.spotless.ResourceHarness;
23-
import com.diffplug.spotless.tag.CliNativeNpmTest;
24-
import com.diffplug.spotless.tag.CliNativeTest;
25-
import com.diffplug.spotless.tag.CliProcessNpmTest;
26-
import com.diffplug.spotless.tag.CliProcessTest;
2726

27+
@EnabledIf("testEnvIsMatching")
2828
public abstract class CLIIntegrationHarness extends ResourceHarness {
29+
protected static final String SYSPROP_CLI_NATIVE =
30+
SpotlessCLIRunnerInNativeExternalProcess.SPOTLESS_CLI_NATIVE_IMAGE_SYSPROP;
31+
protected static final String SYSPROP_CLI_SHADOW_JAR =
32+
SpotlessCLIRunnerInExternalJavaProcess.SPOTLESS_CLI_SHADOW_JAR_SYSPROP;
33+
protected static final String SYSPROP_CLI_IN_SAME_THREAD =
34+
SpotlessCLIRunnerInSameThread.SPOTLESS_CLI_IN_SAME_THREAD;
35+
36+
protected static final Set<String> SYS_PROPS =
37+
Set.of(SYSPROP_CLI_NATIVE, SYSPROP_CLI_SHADOW_JAR, SYSPROP_CLI_IN_SAME_THREAD);
2938

3039
/**
3140
* Each test gets its own temp folder, and we create a gradle
@@ -47,20 +56,32 @@ void gitAttributes() throws IOException {
4756
}
4857

4958
protected SpotlessCLIRunner cliRunner() {
50-
return createRunnerForTag().withWorkingDir(rootFolder());
59+
return createRunnerBasedOnSysprop().withWorkingDir(rootFolder());
5160
}
5261

53-
protected SpotlessCLIRunner createRunnerForTag() {
54-
CliProcessTest cliProcessTest = getClass().getAnnotation(CliProcessTest.class);
55-
CliProcessNpmTest cliProcessNpmTest = getClass().getAnnotation(CliProcessNpmTest.class);
56-
if (cliProcessTest != null || cliProcessNpmTest != null) {
62+
protected SpotlessCLIRunner createRunnerBasedOnSysprop() {
63+
if (System.getProperties().containsKey(SYSPROP_CLI_NATIVE)) {
64+
return SpotlessCLIRunner.createNative();
65+
}
66+
if (System.getProperties().containsKey(SYSPROP_CLI_SHADOW_JAR)) {
5767
return SpotlessCLIRunner.createExternalProcess();
5868
}
59-
CliNativeTest cliNativeTest = getClass().getAnnotation(CliNativeTest.class);
60-
CliNativeNpmTest cliNativeNpmTest = getClass().getAnnotation(CliNativeNpmTest.class);
61-
if (cliNativeTest != null || cliNativeNpmTest != null) {
62-
return SpotlessCLIRunner.createNative();
69+
if (System.getProperties().containsKey(SYSPROP_CLI_IN_SAME_THREAD)) {
70+
return SpotlessCLIRunner.create();
6371
}
64-
return SpotlessCLIRunner.create();
72+
throw new IllegalStateException("Runner created without specifying mode, this is a setup issue.");
73+
}
74+
75+
static boolean testEnvIsMatching() {
76+
return SYS_PROPS.stream().anyMatch(p -> System.getProperties().containsKey(p));
77+
}
78+
79+
protected static boolean isInExternalProcess() {
80+
return Stream.of(SYSPROP_CLI_NATIVE, SYSPROP_CLI_SHADOW_JAR)
81+
.anyMatch(p -> System.getProperties().containsKey(p));
82+
}
83+
84+
protected static boolean isInSameThread() {
85+
return System.getProperties().containsKey(SYSPROP_CLI_IN_SAME_THREAD);
6586
}
6687
}

app/src/test/java/com/diffplug/spotless/cli/SpotlessCLIHelpAndVersionTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,13 @@
1717

1818
import org.junit.jupiter.api.Test;
1919

20+
import com.diffplug.spotless.tag.CliNativeTest;
21+
import com.diffplug.spotless.tag.CliProcessTest;
22+
2023
import static org.assertj.core.api.Assertions.assertThat;
2124

25+
@CliProcessTest
26+
@CliNativeTest
2227
public class SpotlessCLIHelpAndVersionTest extends CLIIntegrationHarness {
2328

2429
@Test

app/src/test/java/com/diffplug/spotless/cli/SpotlessCLILoggingJavaProcessTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,15 @@
2020

2121
import org.assertj.core.api.SoftAssertions;
2222
import org.junit.jupiter.api.Test;
23+
import org.junit.jupiter.api.condition.DisabledIf;
2324

2425
import com.diffplug.spotless.cli.steps.GoogleJavaFormat;
26+
import com.diffplug.spotless.tag.CliNativeTest;
2527
import com.diffplug.spotless.tag.CliProcessTest;
2628

2729
@CliProcessTest
30+
@CliNativeTest
31+
@DisabledIf(value = "isInSameThread", disabledReason = "Only run as external process")
2832
public class SpotlessCLILoggingJavaProcessTest extends CLIIntegrationHarness {
2933

3034
public static final String NEEDS_REFORMATTING_STATEMENT = "needs reformatting";

app/src/test/java/com/diffplug/spotless/cli/SpotlessCLIModeTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,13 @@
2020
import org.junit.jupiter.api.Test;
2121

2222
import com.diffplug.spotless.cli.steps.GoogleJavaFormat;
23+
import com.diffplug.spotless.tag.CliNativeTest;
24+
import com.diffplug.spotless.tag.CliProcessTest;
2325

2426
import static org.assertj.core.api.Assertions.assertThat;
2527

28+
@CliNativeTest
29+
@CliProcessTest
2630
public class SpotlessCLIModeTest extends CLIIntegrationHarness {
2731

2832
@Test

app/src/test/java/com/diffplug/spotless/cli/SpotlessCLIRunnerInExternalJavaProcess.java

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

2424
public class SpotlessCLIRunnerInExternalJavaProcess extends SpotlessCLIRunner {
2525

26-
private static final String SPOTLESS_CLI_SHADOW_JAR_SYSPROP = "spotless.cli.shadowJar";
26+
static final String SPOTLESS_CLI_SHADOW_JAR_SYSPROP = "spotless.cli.shadowJar";
2727

2828
public SpotlessCLIRunnerInExternalJavaProcess() {
2929
super();

app/src/test/java/com/diffplug/spotless/cli/SpotlessCLIRunnerInNativeExternalProcess.java

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

2424
public class SpotlessCLIRunnerInNativeExternalProcess extends SpotlessCLIRunner {
2525

26-
private static final String SPOTLESS_CLI_NATIVE_IMAGE_SYSPROP = "spotless.cli.nativeImage";
26+
static final String SPOTLESS_CLI_NATIVE_IMAGE_SYSPROP = "spotless.cli.nativeImage";
2727

2828
public SpotlessCLIRunnerInNativeExternalProcess() {
2929
super();

app/src/test/java/com/diffplug/spotless/cli/SpotlessCLIRunnerInSameThread.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
public class SpotlessCLIRunnerInSameThread extends SpotlessCLIRunner {
2525

26+
static final String SPOTLESS_CLI_IN_SAME_THREAD = "spotless.cli.inSameThread";
27+
2628
protected Result executeCommand(List<String> args) {
2729
SpotlessCLI cli = SpotlessCLI.createInstance();
2830
CommandLine commandLine = SpotlessCLI.createCommandLine(cli);

app/src/test/java/com/diffplug/spotless/cli/steps/GoogleJavaFormatJavaProcessTest.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

app/src/test/java/com/diffplug/spotless/cli/steps/GoogleJavaFormatNativeProcessTest.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)