Skip to content

Commit ed5a775

Browse files
committed
tck-build-logic: migrate TestInvocationTask from Groovy to Java; preserve task behavior
1 parent b09f55c commit ed5a775

File tree

2 files changed

+99
-92
lines changed

2 files changed

+99
-92
lines changed

tests/tck-build-logic/src/main/groovy/org/graalvm/internal/tck/harness/tasks/TestInvocationTask.groovy

Lines changed: 0 additions & 92 deletions
This file was deleted.
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*
2+
* Copyright and related rights waived via CC0
3+
*
4+
* You should have received a copy of the CC0 legalcode along with this
5+
* work. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
6+
*/
7+
package org.graalvm.internal.tck.harness.tasks;
8+
9+
import org.gradle.api.provider.ProviderFactory;
10+
11+
import javax.inject.Inject;
12+
import java.nio.file.Path;
13+
import java.util.ArrayList;
14+
import java.util.List;
15+
import java.util.Map;
16+
import java.util.stream.Collectors;
17+
18+
import static org.graalvm.internal.tck.Utils.readIndexFile;
19+
import static org.graalvm.internal.tck.Utils.splitCoordinates;
20+
21+
/**
22+
* Task that is used to start subproject tests for matching coordinates.
23+
* Coordinate resolution is unified and handled by the base class.
24+
*/
25+
@SuppressWarnings("unused")
26+
public abstract class TestInvocationTask extends AllCoordinatesExecTask {
27+
28+
@Inject
29+
public abstract ProviderFactory getProviders();
30+
31+
@Override
32+
public List<String> commandFor(String coordinates) {
33+
List<String> defaultArgs = new ArrayList<>(List.of(
34+
tckExtension.getRepoRoot().get().getAsFile().toPath().resolve("gradlew").toString(),
35+
"nativeTest"
36+
));
37+
var installPathsProperty = getProviders().environmentVariable("TCK_JDK_INSTALLATION_PATHS");
38+
if (installPathsProperty.isPresent()) {
39+
defaultArgs.add("-Porg.gradle.java.installations.auto-detect=false");
40+
defaultArgs.add("-Porg.gradle.java.installations.paths=" + installPathsProperty.get());
41+
}
42+
try {
43+
@SuppressWarnings("unchecked")
44+
Map<String, List<String>> testIndex =
45+
(Map<String, List<String>>) readIndexFile(tckExtension.getTestDir(coordinates));
46+
if (!testIndex.containsKey("test-command")) {
47+
return defaultArgs;
48+
}
49+
50+
Path metadataDir = tckExtension.getMetadataDir(coordinates);
51+
return testIndex.get("test-command").stream()
52+
.map(c -> processCommand(c, metadataDir, coordinates))
53+
.collect(Collectors.toList());
54+
} catch (RuntimeException ignored) {
55+
return defaultArgs;
56+
}
57+
}
58+
59+
/**
60+
* Fills in template parameters in the command invocation.
61+
* Parameters are defined as <param_name> in cmd.
62+
*
63+
* @param cmd command line with parameters
64+
* @param metadataDir metadata directory location
65+
* @param coordinates coordinates in form group:artifact:version
66+
* @return final command
67+
*/
68+
public static String processCommand(String cmd, Path metadataDir, String coordinates) {
69+
List<String> parts = splitCoordinates(coordinates);
70+
String groupId = parts.get(0);
71+
String artifactId = parts.get(1);
72+
String version = parts.get(2);
73+
return cmd.replace("<metadata_dir>", metadataDir.toAbsolutePath().toString())
74+
.replace("<group_id>", groupId)
75+
.replace("<artifact_id>", artifactId)
76+
.replace("<version>", version);
77+
}
78+
79+
@Override
80+
protected String errorMessageFor(String coordinates, int exitCode) {
81+
return "Test for " + coordinates + " failed with exit code " + exitCode + ".";
82+
}
83+
84+
@Override
85+
protected void beforeEach(String coordinates, List<String> command) {
86+
getLogger().lifecycle("====================");
87+
getLogger().lifecycle("Testing library: {}", coordinates);
88+
getLogger().lifecycle("Command: `{}`", String.join(" ", command));
89+
getLogger().lifecycle("Executing test...");
90+
getLogger().lifecycle("-------");
91+
}
92+
93+
@Override
94+
protected void afterEach(String coordinates) {
95+
getLogger().lifecycle("-------");
96+
getLogger().lifecycle("Test for {} passed.", coordinates);
97+
getLogger().lifecycle("====================");
98+
}
99+
}

0 commit comments

Comments
 (0)