diff --git a/plugins/codemodder-plugin-maven/src/test/java/io/codemodder/plugins/maven/MavenProviderTest.java b/plugins/codemodder-plugin-maven/src/test/java/io/codemodder/plugins/maven/MavenProviderTest.java index 1193edbca..8aa63b83d 100644 --- a/plugins/codemodder-plugin-maven/src/test/java/io/codemodder/plugins/maven/MavenProviderTest.java +++ b/plugins/codemodder-plugin-maven/src/test/java/io/codemodder/plugins/maven/MavenProviderTest.java @@ -427,6 +427,42 @@ void it_finds_correct_poms() throws IOException { } } + @Test + void it_doesnt_butcher_roller_pom(@TempDir Path rollerTmpAppDir) throws IOException { + + // copy the test files to temp so we can mess around with them + Path rollerSrcDir = Path.of("src/test/resources/roller"); + Files.createDirectories(rollerTmpAppDir.resolve("app")); + Files.copy(rollerSrcDir.resolve("app/pom.xml"), rollerTmpAppDir.resolve("app/pom.xml")); + Files.copy(rollerSrcDir.resolve("pom.xml"), rollerTmpAppDir.resolve("pom.xml")); + Path rollerJavaFile = rollerTmpAppDir.resolve("app/Foo.java"); + + // confirm we can find deps in the roller project + MavenProvider provider = new MavenProvider(); + Collection dependencies = + provider.getAllDependencies(rollerTmpAppDir, rollerJavaFile); + assertThat(dependencies).isNotEmpty(); + + // confirm it found an existing known dependency in the /app/pom.xml + DependencyGAV mockito = DependencyGAV.createDefault("org.mockito", "mockito-core", "5.12.0"); + assertThat(dependencies).contains(mockito); + + // add a new dependency and confirm it gets added correctly + DependencyGAV newDep = DependencyGAV.createDefault("com.acme", "acme", "1.0.0"); + DependencyUpdateResult dependencyUpdateResult = + provider.updateDependencies(rollerTmpAppDir, rollerJavaFile, List.of(newDep)); + List changes = dependencyUpdateResult.packageChanges(); + assertThat(changes).isNotEmpty(); + assertThat(changes.get(0).getPath()).isEqualTo("app/pom.xml"); + List injectedPackages = dependencyUpdateResult.injectedPackages(); + assertThat(injectedPackages).contains(newDep); + + // confirm the new dep is in the pom + Collection newDependencies = + provider.getAllDependencies(rollerTmpAppDir, rollerJavaFile); + assertThat(newDependencies).contains(newDep).contains(mockito); + } + private static final String simplePomWithExistingSections = """ diff --git a/plugins/codemodder-plugin-maven/src/test/resources/roller/app/pom.xml b/plugins/codemodder-plugin-maven/src/test/resources/roller/app/pom.xml new file mode 100644 index 000000000..c5461e412 --- /dev/null +++ b/plugins/codemodder-plugin-maven/src/test/resources/roller/app/pom.xml @@ -0,0 +1,855 @@ + + + + + 4.0.0 + + + org.apache.roller + roller-project + 6.1.4 + ../pom.xml + + + Roller webapp + roller-webapp + war + + + 4.0.1 + 2.2 + 1.2.0 + 1.2 + 1.7.8 + 1.10.14 + 9.7 + 1.70 + 1.9.0 + 1.9.4 + 1.17.1 + 1.12.0 + 3.16.0 + 4.0.4 + 7.0.0 + 2.23.1 + 9.11.1 + 20100527 + 3.4.0 + 3.5.0 + 1.0b3 + 1.19.0 + 2.0.16 + 5.3.39 + 5.8.14 + 2.5.29 + 2.3 + 1.6 + 1.0.2 + 3.1.3 + + + + + + + + javax.servlet + javax.servlet-api + ${servlet.version} + provided + + + + javax.servlet.jsp + jsp-api + ${jsp-api.version} + provided + + + + javax.servlet + jstl + ${jstl.version} + + + + javax.mail + mail + ${java-mail.version} + provided + + + javax.activation + activation + + + + + + com.sun.activation + javax.activation + ${java-activation.version} + + + + javax.xml.bind + jaxb-api + ${jaxb.version} + + + + javax.activation + javax.activation-api + + + + + + + org.eclipse.persistence + org.eclipse.persistence.jpa + ${eclipse-link.version} + + + + + org.eclipse.persistence + org.eclipse.persistence.extension + ${eclipse-link.version} + + + + + + + + + + + + org.apache.velocity + velocity-engine-core + ${velocity.version} + + + + + + org.ow2.asm + asm + ${asm.version} + + + + org.ow2.asm + asm-commons + ${asm.version} + + + + org.ow2.asm + asm-tree + ${asm.version} + + + + org.apache.struts + struts2-core + ${struts.version} + + + org.apache.logging.log4j + log4j-api + + + + + + org.apache.struts + struts2-spring-plugin + ${struts.version} + + + org.springframework + spring-beans + + + org.springframework + spring-core + + + + + + org.apache.struts + struts2-convention-plugin + ${struts.version} + + + + org.apache.struts + struts2-tiles-plugin + ${struts.version} + + + + + org.webjars + webjars-servlet-2.x + ${webjars.version} + + + + org.webjars + bootstrap + 3.4.1 + + + + org.webjars + clipboard.js + 2.0.11 + + + + org.webjars + jquery + 3.7.1 + + + + org.webjars + jquery-ui + 1.13.3 + + + + org.webjars.bower + summernote + 0.8.12 + + + + org.webjars + jquery-validation + 1.20.0 + + + + org.apache.lucene + lucene-analysis-common + compile + ${lucene.version} + + + + org.apache.lucene + lucene-backward-codecs + compile + ${lucene.version} + + + + org.apache.lucene + lucene-queryparser + compile + ${lucene.version} + + + + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + + + org.slf4j + jul-to-slf4j + ${slf4j.version} + + + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j2.version} + + + + commons-validator + commons-validator + ${commons-validator.version} + jar + + + commons-logging + commons-logging + + + + + + commons-beanutils + commons-beanutils + ${commons-beanutils.version} + + + commons-logging + commons-logging + + + + + + commons-codec + commons-codec + ${commons-codec.version} + + + + org.apache.commons + commons-text + ${commons-text.version} + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + org.apache.xmlrpc + xmlrpc-common + ${xmlrpc-version} + + + + org.apache.xmlrpc + xmlrpc-client + ${xmlrpc-version} + + + + org.apache.xmlrpc + xmlrpc-server + ${xmlrpc-version} + + + commons-logging + commons-logging + + + + + + org.apache.ws.commons.util + ws-commons-util + ${ws-commons-util.version} + + + xml-apis + xml-apis + + + + junit + junit + + + + + + + + + org.springframework + spring-web + ${spring.version} + + + + org.springframework + spring-jcl + + + + + + org.springframework + spring-context + ${spring.version} + + + + org.springframework.security + spring-security-config + ${spring.security.version} + + + + org.springframework.security + spring-security-ldap + ${spring.security.version} + + + + org.springframework.security + spring-security-openid + ${spring.security.version} + + + com.google.inject + guice + + + commons-logging + commons-logging + + + + + + org.springframework.security + spring-security-taglibs + ${spring.security.version} + + + + org.springframework.security + spring-security-acl + ${spring.security.version} + + + org.springframework + spring-jdbc + + + + + + + + com.google.inject + guice + ${guice.version} + + + aopalliance + aopalliance + + + + com.google.guava + listenablefuture + + + + + + com.jgeppert.struts2.bootstrap + struts2-bootstrap-plugin + 4.0.0 + + + + com.rometools + rome + ${rome.version} + compile + + + commons-logging + commons-logging + + + + + + + com.rometools + rome-propono + ${rome.version} + compile + + + commons-logging + commons-logging + + + + + + net.oauth.core + oauth-provider + compile + ${oauth-core.version} + + + + org.bouncycastle + bcpkix-jdk15on + ${bouncycastle.version} + + + + + + org.junit.jupiter + junit-jupiter-engine + test + + + + org.apache.ant + ant + ${ant.version} + test + + + + org.apache.derby + derbynet + ${derby.version} + test + + + + org.apache.derby + derbyclient + ${derby.version} + test + + + + org.mockito + mockito-core + 5.12.0 + test + + + + org.instancio + instancio-junit + 5.0.1 + test + + + + + + + roller + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war.version} + + true + + + + + org.eclipse.jetty + jetty-maven-plugin + + + /roller + + src/test/resources/jetty.xml + + + ${project.build.directory}/test-classes/roller-jettyrun.properties + + + + + + org.apache.roller + db-utils + 6.1.4 + + + commons-dbcp + commons-dbcp + 1.4 + + + org.apache.derby + derby + ${derby.version} + + + org.apache.derby + derbyclient + ${derby.version} + + + javax.mail + mail + ${java-mail.version} + + + + + + maven-resources-plugin + 3.3.1 + + + + + copy-main-resources + validate + + copy-resources + + + ${basedir}/target/classes + + + src/main/resources + false + + + + + + + copy-dbscripts-resources + generate-resources + + copy-resources + + + true + ${basedir}/target/classes/dbscripts + + + ${basedir}/src/main/resources/sql + false + + + + + + + + + + + true + + + + + + maven-surefire-plugin + ${maven-surefire.version} + + + + project.build.directory + ${basedir}/target + + + false + + + + + maven-antrun-plugin + 3.1.0 + + + ant-contrib + ant-contrib + ${maven-antrun.version} + + + ant + ant + + + + + + org.apache.velocity + velocity + 1.7 + + + + + + gen-db-scripts + generate-resources + + run + + + + + + + + + + + + + + + + + + + + + + org.codehaus.mojo + buildnumber-maven-plugin + 3.2.0 + + + validate + + create + + + + + false + UNKNOWN + + + + + + + + ${project.basedir}/../app/src/main/webapp/ + false + + themes/** + + + + ${project.basedir}/src/test/resources + true + + **/** + + + + + + + ${project.basedir}/src/main/resources + false + + org/** + + + **/sql/** + + + + + ${project.basedir}/src/main/resources-filtered + true + + roller-version.properties + + + + + + + diff --git a/plugins/codemodder-plugin-maven/src/test/resources/roller/pom.xml b/plugins/codemodder-plugin-maven/src/test/resources/roller/pom.xml new file mode 100644 index 000000000..4a8f4993a --- /dev/null +++ b/plugins/codemodder-plugin-maven/src/test/resources/roller/pom.xml @@ -0,0 +1,116 @@ + + + + + 4.0.0 + org.apache.roller + roller-project + 6.1.4 + pom + + Roller + + Roller is an open source blog server built with open source Java + libraries including Struts2, Velocity, ROME and Guice. + + http://roller.apache.org + 2002 + + + https://github.com/apache/roller + scm:git:git://github.com/apache/roller.git + scm:git:git@github.com:apache/roller.git + + + + 10.11.1.1 + 1.4.7 + 2.3.1 + 10.0.23 + UTF-8 + UTF-8 + 6.1.4 + 1.7.36 + + + + app + db-utils + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + 11 + true + + -Xlint:all + + + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-idea-plugin + 2.2.1 + + true + + + + org.eclipse.jetty + jetty-maven-plugin + ${jetty.plugin.version} + + + org.codehaus.mojo + versions-maven-plugin + 2.17.1 + + file:version-rules.xml + + + + + + + + + + org.junit.jupiter + junit-jupiter-engine + 5.11.0 + test + + + + +