You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sk...@apache.org on 2008/06/15 21:03:02 UTC

svn commit: r667995 - in /myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test: java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/ resources/builder/generation/

Author: skitching
Date: Sun Jun 15 12:03:01 2008
New Revision: 667995

URL: http://svn.apache.org/viewvc?rev=667995&view=rev
Log:
Add unit test for ComponentMeta generation when "component code generation" is involved.

Added:
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentBase.java   (with props)
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenSubclass.java   (with props)
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenTemplate.java   (with props)
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentInterface.java   (with props)
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentManual.java   (with props)
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile-flat.xml   (with props)
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile.xml   (with props)
Modified:
    myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilderTest.java

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilderTest.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilderTest.java?rev=667995&r1=667994&r2=667995&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilderTest.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilderTest.java Sun Jun 15 12:03:01 2008
@@ -148,6 +148,42 @@
     }
 
     /**
+     * Scan annotated JSFComponent classes which use code-generation to 
+     * actually create component classes.
+     */
+    public void testGeneration() throws Exception
+    {
+        QdoxModelBuilder builder = new QdoxModelBuilder();
+
+        ClassLoader classLoader = this.getClass().getClassLoader();
+        URL sourceUrl = classLoader
+                .getResource("builder/generation/ComponentBase.java");
+        String parentDirName = new File(sourceUrl.getFile()).getParent();
+        File parentDir = new File(parentDirName);
+        List sourceDirs = new ArrayList();
+        sourceDirs.add(parentDir.getAbsolutePath());
+
+        Model model = new Model();
+        builder.buildModel(model, sourceDirs);
+
+        // basic sanity checks
+        assertTrue(model.getComponents().size() > 0);
+
+        // Now write it. Optionally, we could just write it to an in-memory
+        // buffer.
+        File outfile = new File("target/generation-out.xml");
+        IOUtils.saveModel(model, outfile);
+
+        StringWriter outbuf = new StringWriter();
+        IOUtils.writeModel(model, outbuf);
+        StringReader reader = new StringReader(outbuf.toString());
+
+        InputStream is = classLoader
+                .getResourceAsStream("builder/generation/goodfile.xml");
+        compareData(reader, new InputStreamReader(is));
+    }
+
+    /**
      * Scan a very complex source tree, containing all the different features in
      * various combinations, then dump the result to a file and compare it (line
      * by line) against a "known good" file.

Added: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentBase.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentBase.java?rev=667995&view=auto
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentBase.java (added)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentBase.java Sun Jun 15 12:03:01 2008
@@ -0,0 +1,26 @@
+package generation;
+
+/**
+ * A base component class.
+ * <p>
+ * This is a base component. It has no name, so is not a concrete component.
+ * 
+ * @JSFComponent
+ *   type="base"
+ *   family="base"
+ *   defaultRendererType="BaseRenderer"
+ */
+
+public abstract class ComponentBase
+{
+    /**
+     * The prop1 property.
+     * <p>
+     * Some dummy prop1 documentation.
+     *
+     * @JSFProperty
+     */
+    public abstract String getProp1();
+    
+    public abstract void setProp1(String prop1);
+}

Propchange: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentBase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenSubclass.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenSubclass.java?rev=667995&view=auto
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenSubclass.java (added)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenSubclass.java Sun Jun 15 12:03:01 2008
@@ -0,0 +1,15 @@
+package generation;
+
+/**
+ * A class for which a concrete component will be created using "subclass mode" code-generation.
+ * 
+ * @JSFComponent
+ *   name="fooFromSubclass"
+ *   type="foo"
+ *   family="foo"
+ *   defaultRendererType="FooRenderer"
+ *   class="generation.SubclassComponent"
+ */
+public abstract class ComponentGenSubclass extends ComponentBase implements ComponentInterface
+{
+}

Propchange: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenSubclass.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenTemplate.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenTemplate.java?rev=667995&view=auto
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenTemplate.java (added)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenTemplate.java Sun Jun 15 12:03:01 2008
@@ -0,0 +1,63 @@
+package generation;
+
+/**
+ * A class for which a concrete component will be created using "template mode" code-generation.
+ * 
+ * @JSFComponent
+ *   name="fooFromTemplate"
+ *   type="foo"
+ *   family="foo"
+ *   defaultRendererType="FooRenderer"
+ *   class="generation.TemplateComponent"
+ *   template="true"
+ */
+abstract class ComponentGenTemplate extends ComponentBase implements ComponentInterface
+{
+    String prop1;
+    boolean prop2;
+    
+    /**
+     * Implement the abstract property defined on the base class.
+     * Note that because this method is not annotated with the
+     * JSFProperty annotation, this comment does not become the
+     * documentation for the property itself.
+     */
+    public String getProp1()
+    {
+        return prop1;
+    }
+
+    public void setProp1(String prop1)
+    {
+        this.prop1 = prop1;
+    }
+
+    /**
+     * The prop2 property.
+     * <p>
+     * Some dummy prop2 documentation.
+     *
+     * @JSFProperty
+     */
+    public boolean getProp2() {
+        return prop2;
+    }
+    
+    public void setProp2(boolean prop2) {
+        this.prop2 = prop2;
+    }
+
+    /**
+     * Implement the method defined on ComponentInterface. Because this method does
+     * not use the JSFProperty annotation, the property settings are taken from the
+     * parent interface, not here.
+     */
+    public String getIfaceProp()
+    {
+        return null;
+    }
+
+    public void setIfaceProp(String val)
+    {
+    }
+}

Propchange: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentGenTemplate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentInterface.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentInterface.java?rev=667995&view=auto
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentInterface.java (added)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentInterface.java Sun Jun 15 12:03:01 2008
@@ -0,0 +1,26 @@
+package generation;
+
+/**
+ * An interface that defines component properties.
+ * <p>
+ * This is an interface component.
+ * 
+ * @JSFComponent
+ *   type="iface"
+ *   family="iface"
+ *   defaultRendererType="BaseRenderer"
+ */
+
+public interface ComponentInterface
+{
+    /**
+     * The ifaceProp property.
+     * <p>
+     * Some dummy ifaceProp documentation.
+     *
+     * @JSFProperty
+     */
+    String getIfaceProp();
+    
+    void setIfaceProp(String val);
+}

Propchange: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentInterface.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentManual.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentManual.java?rev=667995&view=auto
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentManual.java (added)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentManual.java Sun Jun 15 12:03:01 2008
@@ -0,0 +1,61 @@
+package generation;
+
+/**
+ * A concrete component class that has been written by hand (no code generation).
+ * 
+ * @JSFComponent
+ *   name="foo"
+ *   type="foo"
+ *   family="foo"
+ *   defaultRendererType="FooRenderer"
+ */
+public class ComponentManual extends ComponentBase implements ComponentInterface
+{
+    String prop1;
+    boolean prop2;
+    
+    /**
+     * Implement the abstract property defined on the base class.
+     * Note that because this method is not annotated with the
+     * JSFProperty annotation, this comment does not become the
+     * documentation for the property itself.
+     */
+    public String getProp1()
+    {
+        return prop1;
+    }
+
+    public void setProp1(String prop1)
+    {
+        this.prop1 = prop1;
+    }
+
+    /**
+     * The prop2 property.
+     * <p>
+     * Some dummy prop2 documentation.
+     *
+     * @JSFProperty
+     */
+    public boolean getProp2() {
+        return prop2;
+    }
+    
+    public void setProp2(boolean prop2) {
+        this.prop2 = prop2;
+    }
+
+    /**
+     * Implement the method defined on ComponentInterface. Because this method does
+     * not use the JSFProperty annotation, the property settings are taken from the
+     * parent interface, not here.
+     */
+    public String getIfaceProp()
+    {
+        return null;
+    }
+
+    public void setIfaceProp(String val)
+    {
+    }
+}

Propchange: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/ComponentManual.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile-flat.xml
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile-flat.xml?rev=667995&view=auto
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile-flat.xml (added)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile-flat.xml Sun Jun 15 12:03:01 2008
@@ -0,0 +1,144 @@
+<?xml version='1.0' ?>
+
+<model>
+  <component>
+    <className>ComponentBase</className>
+    <classSource>ComponentBase</classSource>
+    <type>base</type>
+    <family>base</family>
+    <rendererType>BaseRenderer</rendererType>
+    <desc>A base component class</desc>
+    <longDesc>
+<![CDATA[
+A base component class.
+<p>
+This is a base component. It has no name, so is not a concrete component.
+]]>
+    </longDesc>
+    <property>
+      <name>prop1</name>
+      <className>java.lang.String</className>
+      <desc>The prop1 property</desc>
+      <longDesc>
+<![CDATA[
+The prop1 property.
+<p>
+Some dummy prop1 documentation.
+]]>
+      </longDesc>
+      <generated>true</generated>
+    </property>
+  </component>
+  <component>
+    <className>ComponentInterface</className>
+    <classSource>ComponentInterface</classSource>
+    <type>iface</type>
+    <family>iface</family>
+    <rendererType>BaseRenderer</rendererType>
+    <desc>An interface that defines component properties</desc>
+    <longDesc>
+<![CDATA[
+An interface that defines component properties.
+<p>
+This is an interface component.
+]]>
+    </longDesc>
+    <property>
+      <name>ifaceProp</name>
+      <className>java.lang.String</className>
+      <desc>The ifaceProp property</desc>
+      <longDesc>
+<![CDATA[
+The ifaceProp property.
+<p>
+Some dummy ifaceProp documentation.
+]]>
+      </longDesc>
+    </property>
+  </component>
+  <component>
+    <className>ComponentChild</className>
+    <parentClassName>ComponentBase</parentClassName>
+    <classSource>ComponentChild</classSource>
+    <interfaces>
+      <interface name="ComponentInterface"/>
+    </interfaces>
+    <name>foo</name>
+    <type>foo</type>
+    <family>foo</family>
+    <rendererType>FooRenderer</rendererType>
+    <desc>The ComponentChild component</desc>
+    <longDesc>
+<![CDATA[
+The ComponentChild component.
+<p>
+This is a child component. It does nothing useful.
+]]>
+    </longDesc>
+    <property>
+      <name>prop2</name>
+      <className>boolean</className>
+      <desc>The prop2 property</desc>
+      <longDesc>
+<![CDATA[
+The prop2 property.
+<p>
+Some dummy prop2 documentation.
+]]>
+      </longDesc>
+    </property>
+    <property>
+      <name>prop1</name>
+      <className>java.lang.String</className>
+      <desc>The prop1 property</desc>
+      <longDesc>
+<![CDATA[
+The prop1 property.
+<p>
+Some dummy prop1 documentation.
+]]>
+      </longDesc>
+      <inherited>true</inherited>
+      <generated>true</generated>
+    </property>
+    <property>
+      <name>ifaceProp</name>
+      <className>java.lang.String</className>
+      <desc>The ifaceProp property</desc>
+      <longDesc>
+<![CDATA[
+The ifaceProp property.
+<p>
+Some dummy ifaceProp documentation.
+]]>
+      </longDesc>
+      <inherited>true</inherited>
+    </property>
+  </component>
+  <converter>
+    <className>Converter1</className>
+    <classSource>Converter1</classSource>
+    <converterId>conv1</converterId>
+    <desc>The Converter1 converter</desc>
+    <longDesc>
+<![CDATA[
+The Converter1 converter.
+<p>
+This is a silly converter. It does nothing useful.
+]]>
+    </longDesc>
+  </converter>
+  <validator>
+    <className>Validator1</className>
+    <classSource>Validator1</classSource>
+    <validatorId>val1</validatorId>
+    <desc>The Validator1 validator</desc>
+    <longDesc>
+<![CDATA[
+The Validator1 validator.
+<p>
+This is a silly validator. It does nothing useful.
+]]>
+    </longDesc>
+  </validator>
+</model>

Propchange: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile-flat.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile.xml
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile.xml?rev=667995&view=auto
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile.xml (added)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile.xml Sun Jun 15 12:03:01 2008
@@ -0,0 +1,123 @@
+<?xml version='1.0' ?>
+
+<model>
+  <component>
+    <className>generation.ComponentBase</className>
+    <classSource>generation.ComponentBase</classSource>
+    <type>base</type>
+    <family>base</family>
+    <rendererType>BaseRenderer</rendererType>
+    <desc>A base component class</desc>
+    <longDesc>
+<![CDATA[
+A base component class.
+<p>
+This is a base component. It has no name, so is not a concrete component.
+]]>
+    </longDesc>
+    <generatedComponentClass>true</generatedComponentClass>
+    <property>
+      <name>prop1</name>
+      <className>java.lang.String</className>
+      <desc>The prop1 property</desc>
+      <longDesc>
+<![CDATA[
+The prop1 property.
+<p>
+Some dummy prop1 documentation.
+]]>
+      </longDesc>
+      <generated>true</generated>
+    </property>
+  </component>
+  <component>
+    <className>generation.SubclassComponent</className>
+    <parentClassName>generation.ComponentBase</parentClassName>
+    <superClassName>generation.ComponentGenSubclass</superClassName>
+    <classSource>generation.ComponentGenSubclass</classSource>
+    <name>fooFromSubclass</name>
+    <type>foo</type>
+    <family>foo</family>
+    <rendererType>FooRenderer</rendererType>
+    <desc>A class for which a concrete component will be created using "subclass mode" code-generation</desc>
+    <longDesc>A class for which a concrete component will be created using "subclass mode" code-generation.</longDesc>
+    <generatedComponentClass>true</generatedComponentClass>
+  </component>
+  <component>
+    <className>generation.TemplateComponent</className>
+    <parentClassName>generation.ComponentBase</parentClassName>
+    <classSource>generation.ComponentGenTemplate</classSource>
+    <name>fooFromTemplate</name>
+    <type>foo</type>
+    <family>foo</family>
+    <rendererType>FooRenderer</rendererType>
+    <desc>A class for which a concrete component will be created using "template mode" code-generation</desc>
+    <longDesc>A class for which a concrete component will be created using "template mode" code-generation.</longDesc>
+    <generatedComponentClass>true</generatedComponentClass>
+    <template>true</template>
+    <property>
+      <name>prop2</name>
+      <className>boolean</className>
+      <desc>The prop2 property</desc>
+      <longDesc>
+<![CDATA[
+The prop2 property.
+<p>
+Some dummy prop2 documentation.
+]]>
+      </longDesc>
+    </property>
+  </component>
+  <component>
+    <className>generation.ComponentInterface</className>
+    <classSource>generation.ComponentInterface</classSource>
+    <type>iface</type>
+    <family>iface</family>
+    <rendererType>BaseRenderer</rendererType>
+    <desc>An interface that defines component properties</desc>
+    <longDesc>
+<![CDATA[
+An interface that defines component properties.
+<p>
+This is an interface component.
+]]>
+    </longDesc>
+    <generatedComponentClass>true</generatedComponentClass>
+    <property>
+      <name>ifaceProp</name>
+      <className>java.lang.String</className>
+      <desc>The ifaceProp property</desc>
+      <longDesc>
+<![CDATA[
+The ifaceProp property.
+<p>
+Some dummy ifaceProp documentation.
+]]>
+      </longDesc>
+    </property>
+  </component>
+  <component>
+    <className>generation.ComponentManual</className>
+    <parentClassName>generation.ComponentBase</parentClassName>
+    <classSource>generation.ComponentManual</classSource>
+    <name>foo</name>
+    <type>foo</type>
+    <family>foo</family>
+    <rendererType>FooRenderer</rendererType>
+    <desc>A concrete component class that has been written by hand (no code generation)</desc>
+    <longDesc>A concrete component class that has been written by hand (no code generation).</longDesc>
+    <generatedComponentClass>true</generatedComponentClass>
+    <property>
+      <name>prop2</name>
+      <className>boolean</className>
+      <desc>The prop2 property</desc>
+      <longDesc>
+<![CDATA[
+The prop2 property.
+<p>
+Some dummy prop2 documentation.
+]]>
+      </longDesc>
+    </property>
+  </component>
+</model>
\ No newline at end of file

Propchange: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/test/resources/builder/generation/goodfile.xml
------------------------------------------------------------------------------
    svn:eol-style = native