Skip to content

Commit

Permalink
Add a withToolingApi overload which accepts a gradle wrapper URI, to …
Browse files Browse the repository at this point in the history
…enable testing gradle recipes in environments where services.gradle.org is inaccessible
  • Loading branch information
sambsnyd committed Apr 10, 2024
1 parent f0a6d7b commit 455288d
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 13 deletions.
Expand Up @@ -30,6 +30,7 @@
import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
Expand All @@ -42,7 +43,11 @@

public class Assertions {

public static UncheckedConsumer<List<SourceFile>> withToolingApi(@Nullable String version, @Nullable String distribution) {
public static UncheckedConsumer<List<SourceFile>> withToolingApi(URI distributionUrl) {
return withToolingApi(GradleWrapper.create(distributionUrl, new InMemoryExecutionContext()));
}

public static UncheckedConsumer<List<SourceFile>> withToolingApi(@Nullable GradleWrapper gradleWrapper) {
return sourceFiles -> {
try {
Path tempDirectory = Files.createTempDirectory("project");
Expand Down Expand Up @@ -73,15 +78,15 @@ public static UncheckedConsumer<List<SourceFile>> withToolingApi(@Nullable Strin
}
}

if (version != null) {
GradleWrapper gradleWrapper = GradleWrapper.create(distribution, version, null, new InMemoryExecutionContext());
if(gradleWrapper != null) {
Files.createDirectories(projectDir.resolve("gradle/wrapper/"));
Files.write(projectDir.resolve(GradleWrapper.WRAPPER_PROPERTIES_LOCATION), ("distributionBase=GRADLE_USER_HOME\n" +
"distributionPath=wrapper/dists\n" +
"distributionUrl=" + gradleWrapper.getPropertiesFormattedUrl() + "\n" +
"distributionSha256Sum=" + gradleWrapper.getDistributionChecksum().getHexValue() + "\n" +
"zipStoreBase=GRADLE_USER_HOME\n" +
"zipStorePath=wrapper/dists").getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW);
Files.write(projectDir.resolve(GradleWrapper.WRAPPER_PROPERTIES_LOCATION),
("distributionBase=GRADLE_USER_HOME\n" +
"distributionPath=wrapper/dists\n" +
"distributionUrl=" + gradleWrapper.getPropertiesFormattedUrl() + "\n" +
((gradleWrapper.getDistributionChecksum() == null) ? "" : "distributionSha256Sum=" + gradleWrapper.getDistributionChecksum().getHexValue() + "\n") +
"zipStoreBase=GRADLE_USER_HOME\n" +
"zipStorePath=wrapper/dists").getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW);
Files.write(projectDir.resolve(GradleWrapper.WRAPPER_JAR_LOCATION), gradleWrapper.wrapperJar().printAllAsBytes(), StandardOpenOption.CREATE_NEW);
Path gradleSh = projectDir.resolve(GradleWrapper.WRAPPER_SCRIPT_LOCATION);
Files.copy(requireNonNull(UpdateGradleWrapper.class.getResourceAsStream("/gradlew")), gradleSh);
Expand All @@ -101,7 +106,7 @@ public static UncheckedConsumer<List<SourceFile>> withToolingApi(@Nullable Strin
OpenRewriteModel model = OpenRewriteModelBuilder.forProjectDirectory(tempDirectory.resolve(sourceFile.getSourcePath()).getParent().toFile(), null);
org.openrewrite.gradle.toolingapi.GradleSettings rawSettings = model.gradleSettings();
if (rawSettings != null) {
GradleSettings gradleSettings = org.openrewrite.gradle.toolingapi.GradleSettings.toMarker(rawSettings);
GradleSettings gradleSettings = org.openrewrite.gradle.toolingapi.GradleSettings. toMarker(rawSettings);
sourceFiles.set(i, sourceFile.withMarkers(sourceFile.getMarkers().add(gradleSettings)));
}
} else {
Expand All @@ -120,6 +125,15 @@ public static UncheckedConsumer<List<SourceFile>> withToolingApi(@Nullable Strin
};
}

public static UncheckedConsumer<List<SourceFile>> withToolingApi(@Nullable String version, @Nullable String distribution) {
GradleWrapper gradleWrapper = null;
if (version != null) {
gradleWrapper = GradleWrapper.create(distribution, version, null, new InMemoryExecutionContext());
}
return withToolingApi(gradleWrapper);
}

@SuppressWarnings("unused")
public static UncheckedConsumer<List<SourceFile>> withToolingApi(String version) {
return withToolingApi(version, "bin");
}
Expand Down
Expand Up @@ -19,6 +19,8 @@
import org.openrewrite.gradle.marker.GradleProject;
import org.openrewrite.test.RewriteTest;

import java.net.URI;

import static org.assertj.core.api.Assertions.assertThat;
import static org.openrewrite.gradle.Assertions.buildGradle;

Expand All @@ -35,9 +37,23 @@ void withToolingApi() {
id 'java'
}
""",
spec -> spec.afterRecipe(cu -> {
assertThat(cu.getMarkers().findFirst(GradleProject.class)).isPresent();
})
spec -> spec.afterRecipe(cu -> assertThat(cu.getMarkers().findFirst(GradleProject.class)).isPresent())
)
);
}

@Test
void withCustomDistributionUri() {
rewriteRun(
spec -> spec.beforeRecipe(Assertions.withToolingApi(URI.create("https://artifactory.moderne.ninja/artifactory/gradle-distributions/gradle-8.6-bin.zip"))),
//language=groovy
buildGradle(
"""
plugins {
id 'java'
}
""",
spec -> spec.afterRecipe(cu -> assertThat(cu.getMarkers().findFirst(GradleProject.class)).isPresent())
)
);
}
Expand Down

0 comments on commit 455288d

Please sign in to comment.