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