You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2022/08/11 06:16:45 UTC

[sling-maven-plugin] branch feature/replace-scannotation created (now 972fef2)

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a change to branch feature/replace-scannotation
in repository https://gitbox.apache.org/repos/asf/sling-maven-plugin.git


      at 972fef2  add test for adapter annotation metadata generator

This branch includes the following new commits:

     new 972fef2  add test for adapter annotation metadata generator

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[sling-maven-plugin] 01/01: add test for adapter annotation metadata generator

Posted by kw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch feature/replace-scannotation
in repository https://gitbox.apache.org/repos/asf/sling-maven-plugin.git

commit 972fef2b1fad5845b068a7ccf56f85c22f345fc3
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Thu Aug 11 08:16:40 2022 +0200

    add test for adapter annotation metadata generator
---
 sling-maven-plugin/pom.xml                         |  6 +++
 .../bundlesupport/GenerateAdapterMetadataMojo.java |  8 +--
 .../GenerateAdapterMetadataMojoTest.java           | 62 ++++++++++++++++++++++
 .../bundlesupport/annotationtest/Adapter1.java     | 13 +++++
 .../bundlesupport/annotationtest/Adapter2.java     |  9 ++++
 5 files changed, 94 insertions(+), 4 deletions(-)

diff --git a/sling-maven-plugin/pom.xml b/sling-maven-plugin/pom.xml
index fe8e523..116f789 100644
--- a/sling-maven-plugin/pom.xml
+++ b/sling-maven-plugin/pom.xml
@@ -265,6 +265,12 @@
             <version>15.0</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.11.0</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     
     <profiles>
diff --git a/sling-maven-plugin/src/main/java/org/apache/sling/maven/bundlesupport/GenerateAdapterMetadataMojo.java b/sling-maven-plugin/src/main/java/org/apache/sling/maven/bundlesupport/GenerateAdapterMetadataMojo.java
index fabf269..ecdb065 100644
--- a/sling-maven-plugin/src/main/java/org/apache/sling/maven/bundlesupport/GenerateAdapterMetadataMojo.java
+++ b/sling-maven-plugin/src/main/java/org/apache/sling/maven/bundlesupport/GenerateAdapterMetadataMojo.java
@@ -81,19 +81,19 @@ public class GenerateAdapterMetadataMojo extends AbstractMojo {
 
     /** The directory which to check for classes with adapter metadata annotations. */
     @Parameter(defaultValue = "${project.build.outputDirectory}")
-    private File buildOutputDirectory;
+    File buildOutputDirectory;
 
     /**
      * Name of the generated descriptor file.
      */
     @Parameter(property = "adapter.descriptor.name", defaultValue = "SLING-INF/adapters.json")
-    private String fileName;
+    String fileName;
 
     /**
      * The output directory in which to emit the descriptor file with name {@link GenerateAdapterMetadataMojo#fileName}.
      */
     @Parameter(defaultValue = "${project.build.outputDirectory}", required = true)
-    private File outputDirectory;
+    File outputDirectory;
 
     /**
      * The Maven project.
@@ -143,7 +143,7 @@ public class GenerateAdapterMetadataMojo extends AbstractMojo {
                     JsonWriter jsonWriter = Json.createWriter(writer)) {
                 jsonWriter.writeObject(JsonSupport.toJson(descriptor));
             }
-            addResource();
+            //addResource();
 
         } catch (IOException e) {
             throw new MojoExecutionException("Unable to generate metadata", e);
diff --git a/sling-maven-plugin/src/test/java/org/apache/sling/maven/bundlesupport/GenerateAdapterMetadataMojoTest.java b/sling-maven-plugin/src/test/java/org/apache/sling/maven/bundlesupport/GenerateAdapterMetadataMojoTest.java
new file mode 100644
index 0000000..bce04a9
--- /dev/null
+++ b/sling-maven-plugin/src/test/java/org/apache/sling/maven/bundlesupport/GenerateAdapterMetadataMojoTest.java
@@ -0,0 +1,62 @@
+package org.apache.sling.maven.bundlesupport;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import javax.json.Json;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonReader;
+
+import org.apache.commons.io.file.PathUtils;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.sling.maven.bundlesupport.annotationtest.Adapter1;
+import org.apache.sling.maven.bundlesupport.annotationtest.Adapter2;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+
+public class GenerateAdapterMetadataMojoTest {
+
+    @Rule
+    public TemporaryFolder tmpDirectory = new TemporaryFolder();
+
+    @Test
+    public void testExecute() throws MojoExecutionException, MojoFailureException, IOException {
+        GenerateAdapterMetadataMojo mojo = new GenerateAdapterMetadataMojo();
+        // copy classes in package "annotationtest" to classpath?
+        File classpathFolder = tmpDirectory.newFolder("test-classpath");
+        Path testClasspath = Paths.get(GenerateAdapterMetadataMojoTest.class.getProtectionDomain().getCodeSource().getLocation().getPath());
+        // only support directory right now
+        if (!Files.isDirectory(testClasspath)) {
+            throw new IllegalStateException("Only supposed to be called from a directory, not a jar file");
+        }
+        testClasspath.resolve("org/apache/sling/bundlesupport/annotationtest");
+        PathUtils.copyDirectory(testClasspath, classpathFolder.toPath());
+        mojo.buildOutputDirectory = classpathFolder;
+        mojo.outputDirectory = tmpDirectory.getRoot();
+        mojo.fileName = "output.json";
+        mojo.execute();
+
+        // check output file
+        Path outputFile = new File(tmpDirectory.getRoot(), "output.json").toPath();
+        assertTrue(Files.exists(outputFile));
+        JsonObjectBuilder expectedJsonObjectBuilder = Json.createObjectBuilder();
+        expectedJsonObjectBuilder.add("java.lang.Long", Json.createObjectBuilder().add("first condition", Adapter2.class.getName()));
+        expectedJsonObjectBuilder.add("java.lang.String", Json.createObjectBuilder().add("If the adaptable is a Adapter1.", Json.createArrayBuilder().add(Adapter1.class.getName()).add(Adapter2.class.getName())));
+        expectedJsonObjectBuilder.add("java.lang.Integer", Json.createObjectBuilder().add("If the adaptable is a Adapter1.", Adapter1.class.getName()));
+        
+        try (InputStream input = Files.newInputStream(outputFile);
+             JsonReader jsonReader = Json.createReader(input)) {
+            assertEquals(expectedJsonObjectBuilder.build(), jsonReader.readObject());
+        }
+    }
+}
diff --git a/sling-maven-plugin/src/test/java/org/apache/sling/maven/bundlesupport/annotationtest/Adapter1.java b/sling-maven-plugin/src/test/java/org/apache/sling/maven/bundlesupport/annotationtest/Adapter1.java
new file mode 100644
index 0000000..e0b3a5f
--- /dev/null
+++ b/sling-maven-plugin/src/test/java/org/apache/sling/maven/bundlesupport/annotationtest/Adapter1.java
@@ -0,0 +1,13 @@
+package org.apache.sling.maven.bundlesupport.annotationtest;
+
+import org.apache.sling.adapter.annotations.Adaptable;
+import org.apache.sling.adapter.annotations.Adaptables;
+import org.apache.sling.adapter.annotations.Adapter;
+
+@Adaptables({
+    @Adaptable( adaptableClass = String.class, adapters = { @Adapter(value = {Adapter1.class, Adapter2.class}) }),
+    @Adaptable( adaptableClass = Integer.class, adapters = { @Adapter(Adapter1.class) })
+})
+public class Adapter1 {
+
+}
diff --git a/sling-maven-plugin/src/test/java/org/apache/sling/maven/bundlesupport/annotationtest/Adapter2.java b/sling-maven-plugin/src/test/java/org/apache/sling/maven/bundlesupport/annotationtest/Adapter2.java
new file mode 100644
index 0000000..00505d3
--- /dev/null
+++ b/sling-maven-plugin/src/test/java/org/apache/sling/maven/bundlesupport/annotationtest/Adapter2.java
@@ -0,0 +1,9 @@
+package org.apache.sling.maven.bundlesupport.annotationtest;
+
+import org.apache.sling.adapter.annotations.Adaptable;
+import org.apache.sling.adapter.annotations.Adapter;
+
+@Adaptable(adaptableClass = Long.class, adapters = { @Adapter(condition = "first condition", value = Adapter2.class) })
+public class Adapter2 {
+
+}