From f0b25f881b79c87f02f9d668f63f8de7efec6562 Mon Sep 17 00:00:00 2001 From: aboyko Date: Fri, 22 Dec 2023 10:47:18 -0500 Subject: [PATCH] Gradle project parser multi-module project tests --- spring-rewrite-commons-gradle/pom.xml | 1 + .../rewrite-gradle-model/pom.xml | 1 + .../rewrite-gradle-parser/pom.xml | 1 + .../rewrite/gradle/ProjectParserTest.java | 123 ++++++++++++------ .../springframework/rewrite/gradle/Utils.java | 69 ++++++++++ .../gradle/model/GradleProjectDataTest.java | 3 + .../rewrite-gradle-plugin/pom.xml | 1 + 7 files changed, 156 insertions(+), 43 deletions(-) create mode 100644 spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/Utils.java diff --git a/spring-rewrite-commons-gradle/pom.xml b/spring-rewrite-commons-gradle/pom.xml index 426c903..61c8d0a 100644 --- a/spring-rewrite-commons-gradle/pom.xml +++ b/spring-rewrite-commons-gradle/pom.xml @@ -10,6 +10,7 @@ spring-rewrite-commons-gradle + Spring Rewrite Gradle Aggregate Project pom diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-model/pom.xml b/spring-rewrite-commons-gradle/rewrite-gradle-model/pom.xml index 13d912a..217aee1 100644 --- a/spring-rewrite-commons-gradle/rewrite-gradle-model/pom.xml +++ b/spring-rewrite-commons-gradle/rewrite-gradle-model/pom.xml @@ -10,6 +10,7 @@ rewrite-gradle-model + Spring Rewrite Gradle Tooling Model 17 diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-parser/pom.xml b/spring-rewrite-commons-gradle/rewrite-gradle-parser/pom.xml index 936cd34..d952160 100644 --- a/spring-rewrite-commons-gradle/rewrite-gradle-parser/pom.xml +++ b/spring-rewrite-commons-gradle/rewrite-gradle-parser/pom.xml @@ -10,6 +10,7 @@ rewrite-gradle-parser + Spring Rewrite Gradle Project Parser 17 diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/ProjectParserTest.java b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/ProjectParserTest.java index ecbb1f3..dcd3ef3 100644 --- a/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/ProjectParserTest.java +++ b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/ProjectParserTest.java @@ -16,6 +16,7 @@ package org.springframework.rewrite.gradle; import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.openrewrite.InMemoryExecutionContext; @@ -34,6 +35,7 @@ import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -47,8 +49,18 @@ public class ProjectParserTest { private static final Options OPTIONS = new Options(Collections.emptyList(), false, Collections.emptyList(), Integer.MAX_VALUE, Collections.emptyList()); - private Path downloadPetclinic(Path dir) throws Exception { - unzip(new URL( + private static Path petclincPath; + + private static Path rewriteGradleModelPath; + + @BeforeAll + static void setupAll(@TempDir Path dir) throws Exception { + petclincPath = downloadPetclinic(dir.resolve("petclinic")); + rewriteGradleModelPath = downloadRewriteGradleToolingModel(dir.resolve("rewrite-gradle-tooling-model")); + } + + private static Path downloadPetclinic(Path dir) throws Exception { + Utils.unzip(new URL( "https://github.com/spring-projects/spring-petclinic/archive/0aa3adb56f500c41564411c32cd301affe284ecc.zip"), dir); return Files.list(dir) @@ -58,55 +70,80 @@ public class ProjectParserTest { .orElseThrow(); } - private static void unzip(URL url, Path destDir) throws IOException { - File dir = destDir.toFile(); - // create output directory if it doesn't exist - if (!dir.exists()) - dir.mkdirs(); - InputStream is; - // buffer for read and write data to file - byte[] buffer = new byte[1024]; - try { - is = url.openStream(); - ZipInputStream zis = new ZipInputStream(is); - ZipEntry ze = zis.getNextEntry(); - while (ze != null) { - if (!ze.isDirectory()) { - String fileName = ze.getName(); - File newFile = new File(destDir + File.separator + fileName); - System.out.println("Unzipping to " + newFile.getAbsolutePath()); - // create directories for sub directories in zip - new File(newFile.getParent()).mkdirs(); - FileOutputStream fos = new FileOutputStream(newFile); - int len; - while ((len = zis.read(buffer)) > 0) { - fos.write(buffer, 0, len); - } - fos.close(); - } - // close this ZipEntry - zis.closeEntry(); - ze = zis.getNextEntry(); - } - // close last ZipEntry - zis.closeEntry(); - zis.close(); - is.close(); - } - catch (IOException e) { - throw e; - } + private static Path downloadRewriteGradleToolingModel(Path dir) throws Exception { + Utils.unzip(new URL( + "https://github.com/openrewrite/rewrite-gradle-tooling-model/archive/5907af9f3861a16361a7fc7d91b2ab57dcfea697.zip"), + dir); + return Files.list(dir) + .filter(Files::isDirectory) + .filter(p -> p.getFileName().toString().startsWith("rewrite-gradle-tooling-model-")) + .findFirst() + .orElseThrow(); } @Test - void sanity(@TempDir Path dir) throws Exception { - Path petClinic = downloadPetclinic(dir.resolve("petclinic")); + void sanity() throws Exception { GradleProjectData gp = SpringRewriteModelBuilder.forProjectDirectory(GradleProjectData.class, - petClinic.toFile(), petClinic.resolve("build.gradle").toFile()); + petclincPath.toFile(), petclincPath.resolve("build.gradle").toFile()); List sources = new ProjectParser(gp, OPTIONS, log) .parse(new InMemoryExecutionContext(t -> Assertions.fail("Parser Error", t))) .toList(); assertThat(sources.size()).isEqualTo(114); } + @Test + void multiProjectRootModel() { + GradleProjectData gp = SpringRewriteModelBuilder.forProjectDirectory(GradleProjectData.class, + rewriteGradleModelPath.toFile(), rewriteGradleModelPath.resolve("build.gradle.kts").toFile()); + + assertThat(gp.isRootProject()).isTrue(); + assertThat(gp.getGroup()).isEqualTo("org.openrewrite.gradle.tooling"); + assertThat(gp.getName()).isEqualTo("rewrite-gradle-tooling-model"); + assertThat(gp.getVersion()).isEqualTo("0.1.0-dev.0.uncommitted"); + assertThat(gp.getPlugins().size()).isEqualTo(9); + assertThat(gp.getMavenRepositories().isEmpty()).isTrue(); + + assertThat(gp.getSubprojects().size()).isEqualTo(2); + + Iterator itr = gp.getSubprojects().iterator(); + + GradleProjectData modelProject = itr.next(); + assertThat(modelProject.isRootProject()).isFalse(); + assertThat(modelProject.getGroup()).isEqualTo("org.openrewrite.gradle.tooling"); + assertThat(modelProject.getName()).isEqualTo("model"); + assertThat(modelProject.getVersion()).isEqualTo("unspecified"); + assertThat(modelProject.getMavenRepositories().size()).isEqualTo(3); + + GradleProjectData pluginProject = itr.next(); + assertThat(pluginProject.isRootProject()).isFalse(); + assertThat(pluginProject.getGroup()).isEqualTo("org.openrewrite.gradle.tooling"); + assertThat(pluginProject.getName()).isEqualTo("plugin"); + assertThat(pluginProject.getVersion()).isEqualTo("unspecified"); + assertThat(pluginProject.getMavenRepositories().size()).isEqualTo(3); + } + + @Test + void multiProjectSubProjectModel() { + GradleProjectData gp = SpringRewriteModelBuilder.forProjectDirectory(GradleProjectData.class, + rewriteGradleModelPath.toFile(), rewriteGradleModelPath.resolve("model/build.gradle.kts").toFile()); + + assertThat(gp.isRootProject()).isFalse(); + assertThat(gp.getGroup()).isEqualTo("org.openrewrite.gradle.tooling"); + assertThat(gp.getName()).isEqualTo("model"); + assertThat(gp.getVersion()).isEqualTo("unspecified"); + assertThat(gp.getMavenRepositories().size()).isEqualTo(3); + assertThat(gp.getSubprojects().isEmpty()).isTrue(); + assertThat(gp.getRootProjectDir().toPath().toString().endsWith(rewriteGradleModelPath.toString())).isTrue(); + } + + @Test + void parseMultiProject() throws Exception { + GradleProjectData gp = SpringRewriteModelBuilder.forProjectDirectory(GradleProjectData.class, + rewriteGradleModelPath.toFile(), rewriteGradleModelPath.resolve("build.gradle").toFile()); + List sources = new ProjectParser(gp, OPTIONS, log) + .parse(new InMemoryExecutionContext(t -> Assertions.fail("Parser Error", t))) + .toList(); + assertThat(sources.size()).isEqualTo(48); + } + } diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/Utils.java b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/Utils.java new file mode 100644 index 0000000..550004d --- /dev/null +++ b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/Utils.java @@ -0,0 +1,69 @@ +/* + * Copyright 2021 - 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.rewrite.gradle; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.nio.file.Path; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +public class Utils { + + public static void unzip(URL url, Path destDir) throws IOException { + File dir = destDir.toFile(); + // create output directory if it doesn't exist + if (!dir.exists()) + dir.mkdirs(); + InputStream is; + // buffer for read and write data to file + byte[] buffer = new byte[1024]; + try { + is = url.openStream(); + ZipInputStream zis = new ZipInputStream(is); + ZipEntry ze = zis.getNextEntry(); + while (ze != null) { + if (!ze.isDirectory()) { + String fileName = ze.getName(); + File newFile = new File(destDir + File.separator + fileName); + System.out.println("Unzipping to " + newFile.getAbsolutePath()); + // create directories for sub directories in zip + new File(newFile.getParent()).mkdirs(); + FileOutputStream fos = new FileOutputStream(newFile); + int len; + while ((len = zis.read(buffer)) > 0) { + fos.write(buffer, 0, len); + } + fos.close(); + } + // close this ZipEntry + zis.closeEntry(); + ze = zis.getNextEntry(); + } + // close last ZipEntry + zis.closeEntry(); + zis.close(); + is.close(); + } + catch (IOException e) { + throw e; + } + } + +} diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/model/GradleProjectDataTest.java b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/model/GradleProjectDataTest.java index 3778f97..df4942a 100644 --- a/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/model/GradleProjectDataTest.java +++ b/spring-rewrite-commons-gradle/rewrite-gradle-parser/src/test/java/org/springframework/rewrite/gradle/model/GradleProjectDataTest.java @@ -17,10 +17,13 @@ package org.springframework.rewrite.gradle.model; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.springframework.rewrite.gradle.Utils; import java.io.InputStream; +import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Iterator; import java.util.Objects; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-rewrite-commons-gradle/rewrite-gradle-plugin/pom.xml b/spring-rewrite-commons-gradle/rewrite-gradle-plugin/pom.xml index ba91fdd..8849466 100644 --- a/spring-rewrite-commons-gradle/rewrite-gradle-plugin/pom.xml +++ b/spring-rewrite-commons-gradle/rewrite-gradle-plugin/pom.xml @@ -10,6 +10,7 @@ rewrite-gradle-plugin + Spring Rewrite Gradle Plugin 17