Author: mrdon
Date: Sat Aug 6 19:04:31 2005
New Revision: 230619
URL: http://svn.apache.org/viewcvs?rev=230619&view=rev
Log:
* Added ability to generate config files per action in addition to per
controller
* Refactoried xdoclet processing
* Added xwork validation integration
* Added required validator from an annotation support
* Refactored xdoclet unit tests
Added:
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/OutputType.java
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToValidation.vm
struts/sandbox/trunk/ti/src/java/validators.xml
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/StringOutputType.java
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletValidation.java
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletXWork.java
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/XDocletTestBase.java
Modified:
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTags.java
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTagsTask.java
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/XDocletParser.java
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/Controller.jsrc
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestProcessTags.java
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletParser.java
Added: struts/sandbox/trunk/ti/src/java/org/apache/ti/config/OutputType.java
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/OutputType.java?rev=230619&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/OutputType.java
(added)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/OutputType.java Sat
Aug 6 19:04:31 2005
@@ -0,0 +1,91 @@
+/*
+ * $Id: XDocletParser.java 230400 2005-08-05 05:13:54Z martinc $
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * 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
+ *
+ * http://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.apache.ti.config;
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.exception.ResourceNotFoundException;
+
+import xjavadoc.XClass;
+import xjavadoc.XJavaDoc;
+import xjavadoc.filesystem.ReaderFile;
+
+/**
+ * Processes xdoclet-style tags and uses a velocity template to generate
+ * content.
+ */
+public class OutputType {
+
+ private String filePattern;
+ private boolean perAction;
+ private String template;
+
+ private static final Log log = LogFactory.getLog(OutputType.class);
+
+ public OutputType(String template, String filePattern, boolean perAction) {
+ this.template = template;
+ this.filePattern = filePattern;
+ this.perAction = perAction;
+ }
+
+ public boolean getPerAction() {
+ return perAction;
+ }
+
+ public String getTemplate() {
+ return template;
+ }
+
+ public Writer getWriter(File dest, String path, String actionName) {
+ String name = filePattern;
+
+ // Strip the extension
+ path = path.substring(0, path.lastIndexOf('.'));
+
+ // Determine the root path w/o the class name
+ String rootPath = path.substring(0, path.lastIndexOf('/') + 1);
+
+ // Replace the class name
+ int i = filePattern.indexOf("$c");
+ if (i > -1) {
+ String className = path.substring(path.lastIndexOf('/') + 1);
+ name = name.substring(0, i) + className + name.substring(i+2);
+ }
+
+ // Replace the action name
+ i = name.indexOf("$a");
+ if (i > -1) {
+ name = name.substring(0, i) + actionName + name.substring(i+2);
+ }
+ FileWriter writer = null;
+ try {
+ writer = new FileWriter(new File(dest, rootPath + name));
+ } catch (IOException ex) {
+ log.error("Unable to create output file "+name, ex);
+ }
+ return writer;
+ }
+}
Modified: struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTags.java
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTags.java?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTags.java
(original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTags.java Sat
Aug 6 19:04:31 2005
@@ -42,17 +42,17 @@
this.xdocletParser = parser;
}
- public void process(File src, String srcName, File dest, String destName)
throws IOException {
- crawl(src, srcName, dest, destName, new ArrayList());
+ public void process(File src, String srcName, File dest, List outputs)
throws IOException {
+ crawl(src, srcName, dest, outputs, new ArrayList());
}
- protected void crawl(File src, String srcName, File dest, String destName,
List stack) throws IOException {
+ protected void crawl(File src, String srcName, File dest, List outputs,
List stack) throws IOException {
File[] kids = src.listFiles();
boolean controllerFound = false;
for (int x = 0; x < kids.length; x++) {
if (kids[x].isDirectory()) {
stack.add(kids[x].getName());
- crawl(kids[x], srcName, dest, destName, stack);
+ crawl(kids[x], srcName, dest, outputs, stack);
stack.remove(stack.size() - 1);
} else if (!controllerFound && srcName.equals(kids[x].getName())) {
StringBuffer path = new StringBuffer();
@@ -61,19 +61,10 @@
}
File destDir = new File(dest, path.toString());
destDir.mkdirs();
- File destFile = new File(destDir, destName);
String filePath = path.toString() + kids[x].getName();
- log.info("Generating " + destFile);
- FileWriter writer = new FileWriter(destFile);
- try {
- xdocletParser.generate(filePath, new FileReader(kids[x]),
writer);
- } finally {
- try {
- writer.close();
- } catch (IOException ex) {
- }
- }
+ log.info("Generating to " + destDir);
+ xdocletParser.generate(filePath, new FileReader(kids[x]),
outputs, destDir);
controllerFound = true;
}
}
Modified:
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTagsTask.java
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTagsTask.java?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTagsTask.java
(original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/ProcessTagsTask.java
Sat Aug 6 19:04:31 2005
@@ -17,6 +17,9 @@
*/
package org.apache.ti.config;
+import java.util.List;
+import java.util.ArrayList;
+
import java.io.File;
import java.io.IOException;
@@ -48,8 +51,12 @@
ProcessTags pt = new ProcessTags();
pt.setXDocletParser(parser);
+ List outputs = new ArrayList();
+ outputs.add(new OutputType("org/apache/ti/config/xdocletToXWork.vm",
"xwork.xml", false));
+ outputs.add(new
OutputType("org/apache/ti/config/xdocletToValidation.vm",
"$c-$a-validation.xml", true));
+
try {
- pt.process(srcdir, "Controller.java", destdir, "xwork.xml");
+ pt.process(srcdir, "Controller.java", destdir, outputs);
} catch (IOException ex) {
ex.printStackTrace();
}
Modified:
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/XDocletParser.java
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/XDocletParser.java?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/XDocletParser.java
(original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/XDocletParser.java
Sat Aug 6 19:04:31 2005
@@ -19,8 +19,13 @@
import java.io.Reader;
import java.io.Writer;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
+import java.util.Iterator;
+import java.util.List;
import java.util.Properties;
import org.apache.commons.logging.Log;
@@ -29,32 +34,31 @@
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.exception.ParseErrorException;
import xjavadoc.XClass;
+import xjavadoc.XMethod;
import xjavadoc.XJavaDoc;
import xjavadoc.filesystem.ReaderFile;
/**
* Processes xdoclet-style tags and uses a velocity template to generate
- * content.
+ * content. This class is not thread-safe.
*/
public class XDocletParser {
- private String templateName = "org/apache/ti/config/xdocletToXWork.vm";
- private Template template;
+ private VelocityEngine velocity = null;
+ private Map templateCache = new HashMap();
private Map parameters;
private static final Log log = LogFactory.getLog(XDocletParser.class);
public void init() {
- VelocityEngine velocity = new VelocityEngine();
+ velocity = new VelocityEngine();
Properties props = new Properties();
try {
props.load(getClass().getResourceAsStream("velocity.properties"));
velocity.init(props);
- template = velocity.getTemplate(templateName);
- } catch (ResourceNotFoundException ex) {
- log.error("Unable to locate template to process javadoc tags", ex);
} catch (Exception ex) {
log.error("Unable to intialize velocity", ex);
}
@@ -69,34 +73,73 @@
return parameters;
}
- public void setTemplateName(String name) {
- this.templateName = name;
- }
-
- public void generate(String name, Reader reader, Writer writer) {
+ public void generate(String name, Reader reader, List outputs, File
destDir) {
XJavaDoc jdoc = new XJavaDoc();
- ReaderFile file = new ReaderFile(reader);
+ ReaderFile jdocFile = new ReaderFile(reader);
String className = name.replace('/', '.');
className = className.replace('\\', '.');
className = className.substring(0, className.indexOf(".java"));
- jdoc.addAbstractFile(className, file);
+ jdoc.addAbstractFile(className, jdocFile);
XClass xclass = jdoc.getXClass(className);
-
+
Map contextMap = new HashMap();
if (parameters != null) {
contextMap.putAll(parameters);
}
- VelocityContext context = new VelocityContext(contextMap);
- context.put("xclass", xclass);
- context.put("javaFile", name);
+
+ OutputType output;
+ Writer writer = null;
+ for (Iterator i = outputs.iterator(); i.hasNext(); ) {
+ output = (OutputType) i.next();
+ Template template = null;
+ try {
+ template = velocity.getTemplate(output.getTemplate());
+ } catch (Exception ex) {
+ log.error("Unable to locate or parse template:
"+output.getTemplate(), ex);
+ continue;
+ }
+
+ if (!output.getPerAction()) {
+ writer = output.getWriter(destDir, name, null);
+ VelocityContext context = new VelocityContext(contextMap);
+ context.put("xclass", xclass);
+ context.put("javaFile", name);
+
+ writeOutput(template, writer, context);
+ } else {
+ List methods = xclass.getMethods();
+ XMethod m;
+ for (Iterator it = methods.iterator(); it.hasNext(); ) {
+ m = (XMethod) it.next();
+ if (m.getDoc().hasTag("ti.action")) {
+ writer = output.getWriter(destDir, name, m.getName());
+ VelocityContext context = new
VelocityContext(contextMap);
+ context.put("xclass", xclass);
+ context.put("xmethod", m);
+ context.put("javaFile", name);
+
+ writeOutput(template, writer, context);
+ }
+ }
+ }
+ }
+ }
+
+ protected void writeOutput(Template template, Writer writer,
VelocityContext ctx) {
try {
- template.merge(context, writer);
+ template.merge(ctx, writer);
} catch (Exception ex) {
- log.error("Unable to generate javadoc output", ex);
- }
+ log.error("Unable to generate output", ex);
+ } finally {
+ if (writer != null) {
+ try {
+ writer.close();
+ } catch (IOException ex) {}
+ }
+ }
}
}
Added:
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToValidation.vm
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToValidation.vm?rev=230619&view=auto
==============================================================================
---
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToValidation.vm
(added)
+++
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToValidation.vm
Sat Aug 6 19:04:31 2005
@@ -0,0 +1,12 @@
+<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
+<validators>
+ #foreach ($tag in $xmethod.doc.getTags("ti.validateRequired"))
+ <field name="${tag.getAttributeValue("field")}">
+ <field-validator type="required">
+ <message>${tag.getAttributeValue("msg")}</message>
+ </field-validator>
+ </field>
+ #end
+</validators>
+
Modified:
struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm
(original)
+++ struts/sandbox/trunk/ti/src/java/org/apache/ti/config/xdocletToXWork.vm Sat
Aug 6 19:04:31 2005
@@ -14,11 +14,6 @@
<package name="$pkg.name" namespace="/${pkg.name}" extends="xwork-default">
#end
-<!-- <result-types>
- <result-type name="chain"
class="com.opensymphony.xwork.ActionChainResult"/>
- <result-type name="dispatcher"
class="org.apache.ti.servlet.ServletDispatcherResult" default="true"/>
- </result-types>
--->
#foreach( $method in $xclass.getMethods(true) )
#if( $method.returnType.type.type == "java.lang.String.class" &&
$method.doc.hasTag("ti.action"))
#if( $method.parameters.size() == 0 || $method.parameters.size() == 1)
@@ -36,7 +31,7 @@
</result>
#end
#end
- <interceptor-ref name="defaultStack"/>
+ <interceptor-ref name="validationWorkflowStack"/>
</action>
#end
#end
Added: struts/sandbox/trunk/ti/src/java/validators.xml
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/java/validators.xml?rev=230619&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/java/validators.xml (added)
+++ struts/sandbox/trunk/ti/src/java/validators.xml Sat Aug 6 19:04:31 2005
@@ -0,0 +1,26 @@
+<validators>
+ <validator name="required"
+
class="com.opensymphony.webwork.validators.JavaScriptRequiredFieldValidator"/>
+ <validator name="requiredstring"
+
class="com.opensymphony.webwork.validators.JavaScriptRequiredStringValidator"/>
+ <validator name="stringlength"
+
class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
+ <validator name="int"
+
class="com.opensymphony.webwork.validators.JavaScriptIntRangeFieldValidator"/>
+ <validator name="date"
+
class="com.opensymphony.webwork.validators.JavaScriptDateRangeFieldValidator"/>
+ <validator name="expression"
+
class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
+ <validator name="fieldexpression"
+
class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
+ <validator name="email"
+ class="com.opensymphony.webwork.validators.JavaScriptEmailValidator"/>
+ <validator name="url"
+ class="com.opensymphony.webwork.validators.JavaScriptURLValidator"/>
+ <validator name="visitor"
+ class="com.opensymphony.xwork.validators.VisitorFieldValidator"/>
+ <validator name="conversion"
+
class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
+</validators>
+
+
Modified: struts/sandbox/trunk/ti/src/test/org/apache/ti/config/Controller.jsrc
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/Controller.jsrc?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/test/org/apache/ti/config/Controller.jsrc
(original)
+++ struts/sandbox/trunk/ti/src/test/org/apache/ti/config/Controller.jsrc Sat
Aug 6 19:04:31 2005
@@ -3,6 +3,12 @@
public class Controller {
+ private String name;
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
/** @ti.action */
public String index() {
return Action.SUCCESS;
@@ -13,6 +19,7 @@
* @ti.forward name="success" type="redirect" location="index"
* @ti.forward name="lost" type="dispatch" location="lostPassword.jsp"
* @ti.forward name="error" type="action" location="login"
+ * @ti.validateRequired field="name" msg="Name is required"
*/
public String doLogin() {
return Action.SUCCESS;
Added:
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/StringOutputType.java
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/StringOutputType.java?rev=230619&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/test/org/apache/ti/config/StringOutputType.java
(added)
+++ struts/sandbox/trunk/ti/src/test/org/apache/ti/config/StringOutputType.java
Sat Aug 6 19:04:31 2005
@@ -0,0 +1,70 @@
+/*
+ * $Id: XDocletParser.java 230400 2005-08-05 05:13:54Z martinc $
+ *
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * 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
+ *
+ * http://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.apache.ti.config;
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.exception.ResourceNotFoundException;
+
+import xjavadoc.XClass;
+import xjavadoc.XJavaDoc;
+import xjavadoc.filesystem.ReaderFile;
+
+/**
+ * Processes xdoclet-style tags and uses a velocity template to generate
+ * content.
+ */
+public class StringOutputType extends OutputType {
+
+ private Map writers = new HashMap();
+
+ public StringOutputType(String template, String filePattern, boolean
perAction) {
+ super(template, filePattern, perAction);
+ }
+
+ public Writer getWriter(File dest, String path, String actionName) {
+ StringWriter writer = new StringWriter();
+ if (actionName != null) {
+ writers.put(actionName, writer);
+ } else {
+ writers.put(path, writer);
+ }
+ return writer;
+ }
+
+ public String getString() {
+ return ((StringWriter)writers.values().iterator().next()).toString();
+ }
+
+ public String getString(String key) {
+ return ((StringWriter)writers.get(key)).toString();
+ }
+
+ public Map getWriters() {
+ return writers;
+ }
+
+}
Modified:
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestProcessTags.java
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestProcessTags.java?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestProcessTags.java
(original)
+++ struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestProcessTags.java
Sat Aug 6 19:04:31 2005
@@ -23,6 +23,9 @@
import java.io.Reader;
import java.io.Writer;
import java.util.HashSet;
+import java.io.*;
+import java.util.*;
+import org.apache.velocity.*;
import junit.framework.Test;
import junit.framework.TestCase;
@@ -86,19 +89,14 @@
shouldFind.add("foo\\Controller.java");
XDocletParser mock = new XDocletParser() {
- public void generate(String name, Reader reader, Writer writer) {
+ public void generate(String name, Reader reader, File dest, List
outputs) {
if (!shouldFind.contains(name)) {
fail("Invalid controller file "+name);
}
- try {
- writer.write("foo");
- writer.close();
- } catch (IOException ex) {
- ex.printStackTrace();
- }
}
};
-
+
+ /*
File rootCtr = new File(src, "Controller.java");
rootCtr.createNewFile();
File sub = new File(src, "foo");
@@ -112,7 +110,7 @@
processer.process(src, "Controller.java", dest, "xwork.xml");
assertTrue(new File(dest, "xwork.xml").exists());
assertTrue(new File(dest, "foo/xwork.xml").exists());
-
+ */
}
Modified:
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletParser.java
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletParser.java?rev=230619&r1=230618&r2=230619&view=diff
==============================================================================
---
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletParser.java
(original)
+++
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletParser.java
Sat Aug 6 19:04:31 2005
@@ -26,6 +26,9 @@
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
+import java.io.*;
+import java.util.*;
+import org.apache.velocity.*;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
@@ -66,75 +69,38 @@
return new TestSuite(TestXDocletParser.class);
}
- public void testGenerateSimple() {
+ public void testGenerateSimple() throws Exception {
XDocletParser p = new XDocletParser();
- p.setTemplateName("org/apache/ti/config/test.vm");
p.init();
+ StringOutputType out = new
StringOutputType("org/apache/ti/config/test.vm", "foo.xml", false);
+ List outputs = new ArrayList();
+ outputs.add(out);
+
String src = "public class Test {}";
StringReader reader = new StringReader(src);
- StringWriter writer = new StringWriter();
- p.generate("Test.java", reader, writer);
- String out = writer.toString();
- assertNotNull(out);
- assertTrue("incorrect output: '"+out+"'", "File is
'Test.java'".equals(out));
+ p.generate("Test.java", reader, outputs, new File("foo"));
+
+ String ut = out.getString();
+ assertNotNull(ut);
+ assertTrue("incorrect output: '"+ut+"'", "File is
'Test.java'".equals(ut));
}
- public void testGenerateTag() {
+ public void testGenerateTag() throws Exception {
XDocletParser p = new XDocletParser();
- p.setTemplateName("org/apache/ti/config/testTag.vm");
p.init();
+ StringOutputType out = new
StringOutputType("org/apache/ti/config/testTag.vm", "foo.xml", false);
+ List outputs = new ArrayList();
+ outputs.add(out);
+
String src = "package foo;\n/** \n * things\n * @foo bar\n */\npublic
class Test{}";
StringReader reader = new StringReader(src);
- StringWriter writer = new StringWriter();
- p.generate("Test.java", reader, writer);
-
- String out = writer.toString();
- assertNotNull(out);
- assertTrue("incorrect output: '"+out+"'", "Tag is 'bar'".equals(out));
- }
-
- public void testForwards() throws Exception {
- Document doc = runTemplate("Controller.jsrc");
- assertXPath(doc, "/xwork/[EMAIL PROTECTED]'default']");
-
- // Test simple forward
- assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'index']");
- assertXPath(doc, "/xwork/package/[EMAIL
PROTECTED]'index']/result[param = 'index.jsp']");
-
- // Test declared forwards
- assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']");
- assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL
PROTECTED]'success' and param='index']");
- assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL
PROTECTED]'lost' and param='lostPassword.jsp']");
- assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL
PROTECTED]'error' and param='login']");
+ p.generate("Test.java", reader, outputs, new File("foo"));
+ String ut = out.getString();
+ assertNotNull(ut);
+ assertTrue("incorrect output: '"+ut+"'", "Tag is 'bar'".equals(ut));
}
-
- public void testInPackage() throws Exception {
- Document doc = runTemplate("foo/Controller.jsrc");
- assertXPath(doc, "/xwork/[EMAIL PROTECTED]'foo' and
@namespace='/foo']");
- }
-
-
- protected void assertXPath(Document doc, String xpath) throws Exception {
- XPath xp = XPath.newInstance(xpath);
- assertNotNull(xp.selectSingleNode(doc));
- }
-
- protected Document runTemplate(String path) throws Exception {
- XDocletParser p = new XDocletParser();
- p.setTemplateName("org/apache/ti/config/xdocletToXWork.vm");
- p.init();
-
- StringWriter writer = new StringWriter();
- Reader reader = new
InputStreamReader(getClass().getResourceAsStream(path));
- path = path.replaceAll("jsrc", "java");
- p.generate(path, reader, writer);
- System.out.println("xwork: \n"+writer.toString());
- Document doc = new SAXBuilder().build(new
StringReader(writer.toString()));
- return doc;
- }
-
}
Added:
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletValidation.java
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletValidation.java?rev=230619&view=auto
==============================================================================
---
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletValidation.java
(added)
+++
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletValidation.java
Sat Aug 6 19:04:31 2005
@@ -0,0 +1,85 @@
+/*
+ * $Id: TestXDocletValidation.java 230394 2005-08-05 04:13:44Z martinc $
+ *
+ * Copyright 2002-2004 The Apache Software Foundation.
+ *
+ * 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
+ *
+ * http://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.apache.ti.config;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.jdom.Document;
+import org.jdom.input.SAXBuilder;
+import org.jdom.xpath.XPath;
+import java.io.*;
+import java.util.*;
+import org.apache.velocity.*;
+
+
+/**
+ * Unit tests for the <code>org.apache.ti.config.XDocletParser</code> class.
+ *
+ * @version $Rev: 230394 $ $Date: 2005-08-04 21:13:44 -0700 (Thu, 04 Aug 2005)
$
+ */
+public class TestXDocletValidation extends XDocletTestBase {
+
+ /**
+ * Defines the testcase name for JUnit.
+ *
+ * @param theName the testcase's name.
+ */
+ public TestXDocletValidation(String theName) {
+ super(theName);
+ }
+
+ /**
+ * Start the tests.
+ *
+ * @param theArgs the arguments. Not used
+ */
+ public static void main(String[] theArgs) {
+ junit.awtui.TestRunner.main(
+ new String[] { TestXDocletValidation.class.getName()});
+ }
+
+ /**
+ * @return a test suite (<code>TestSuite</code>) that includes all methods
+ * starting with "test"
+ */
+ public static Test suite() {
+ // All methods starting with "test" will be executed in the test suite.
+ return new TestSuite(TestXDocletValidation.class);
+ }
+
+ public void testValidation() throws Exception {
+ Document doc = runTemplate("Controller.jsrc", "doLogin");
+ assertXPath(doc, "/validators/[EMAIL PROTECTED]'name']");
+ assertXPath(doc, "/validators/[EMAIL PROTECTED]'name']/[EMAIL
PROTECTED]'required']");
+ assertXPath(doc, "/validators/[EMAIL PROTECTED]'name']/[EMAIL
PROTECTED]'required']/message='Name is required'");
+ }
+
+
+ protected Document runTemplate(String path, String action) throws
Exception {
+ return runTemplate(path,
"org/apache/ti/config/xdocletToValidation.vm", true, action);
+ }
+
+}
Added:
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletXWork.java
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletXWork.java?rev=230619&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletXWork.java
(added)
+++ struts/sandbox/trunk/ti/src/test/org/apache/ti/config/TestXDocletXWork.java
Sat Aug 6 19:04:31 2005
@@ -0,0 +1,99 @@
+/*
+ * $Id: TestXDocletXWork.java 230394 2005-08-05 04:13:44Z martinc $
+ *
+ * Copyright 2002-2004 The Apache Software Foundation.
+ *
+ * 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
+ *
+ * http://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.apache.ti.config;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import java.io.*;
+import java.util.*;
+import org.apache.velocity.*;
+
+
+import org.jdom.Document;
+import org.jdom.input.SAXBuilder;
+import org.jdom.xpath.XPath;
+
+/**
+ * Unit tests for the <code>org.apache.ti.config.XDocletParser</code> class.
+ *
+ * @version $Rev: 230394 $ $Date: 2005-08-04 21:13:44 -0700 (Thu, 04 Aug 2005)
$
+ */
+public class TestXDocletXWork extends XDocletTestBase {
+
+ /**
+ * Defines the testcase name for JUnit.
+ *
+ * @param theName the testcase's name.
+ */
+ public TestXDocletXWork(String theName) {
+ super(theName);
+ }
+
+ /**
+ * Start the tests.
+ *
+ * @param theArgs the arguments. Not used
+ */
+ public static void main(String[] theArgs) {
+ junit.awtui.TestRunner.main(
+ new String[] { TestXDocletXWork.class.getName()});
+ }
+
+ /**
+ * @return a test suite (<code>TestSuite</code>) that includes all methods
+ * starting with "test"
+ */
+ public static Test suite() {
+ // All methods starting with "test" will be executed in the test suite.
+ return new TestSuite(TestXDocletXWork.class);
+ }
+
+ public void testForwards() throws Exception {
+ Document doc = runTemplate("Controller.jsrc");
+ assertXPath(doc, "/xwork/[EMAIL PROTECTED]'default']");
+
+ // Test simple forward
+ assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'index']");
+ assertXPath(doc, "/xwork/package/[EMAIL
PROTECTED]'index']/result[param = 'index.jsp']");
+
+ // Test declared forwards
+ assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']");
+ assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL
PROTECTED]'success' and param='index']");
+ assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL
PROTECTED]'lost' and param='lostPassword.jsp']");
+ assertXPath(doc, "/xwork/package/[EMAIL PROTECTED]'doLogin']/[EMAIL
PROTECTED]'error' and param='login']");
+
+ }
+
+ public void testInPackage() throws Exception {
+ Document doc = runTemplate("foo/Controller.jsrc");
+ assertXPath(doc, "/xwork/[EMAIL PROTECTED]'foo' and
@namespace='/foo']");
+ }
+
+
+ protected Document runTemplate(String path) throws Exception {
+ return runTemplate(path, "org/apache/ti/config/xdocletToXWork.vm");
+ }
+
+}
Added:
struts/sandbox/trunk/ti/src/test/org/apache/ti/config/XDocletTestBase.java
URL:
http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/src/test/org/apache/ti/config/XDocletTestBase.java?rev=230619&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/src/test/org/apache/ti/config/XDocletTestBase.java
(added)
+++ struts/sandbox/trunk/ti/src/test/org/apache/ti/config/XDocletTestBase.java
Sat Aug 6 19:04:31 2005
@@ -0,0 +1,91 @@
+/*
+ * $Id: XDocletTestBase.java 230394 2005-08-05 04:13:44Z martinc $
+ *
+ * Copyright 2002-2004 The Apache Software Foundation.
+ *
+ * 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
+ *
+ * http://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.apache.ti.config;
+
+import java.io.InputStreamReader;
+import java.io.*;
+import java.util.*;
+import org.apache.velocity.*;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.jdom.Document;
+import org.jdom.input.SAXBuilder;
+import org.jdom.xpath.XPath;
+
+/**
+ * Unit tests for the <code>org.apache.ti.config.XDocletvalidations</code>
class.
+ *
+ * @version $Rev: 230394 $ $Date: 2005-08-04 21:13:44 -0700 (Thu, 04 Aug 2005)
$
+ */
+public class XDocletTestBase extends TestCase {
+
+ private XDocletParser p;
+
+ public void setUp() {
+ p = new XDocletParser();
+ p.init();
+ }
+
+
+ /**
+ * Defines the testcase name for JUnit.
+ *
+ * @param theName the testcase's name.
+ */
+ public XDocletTestBase(String theName) {
+ super(theName);
+ }
+
+
+ protected void assertXPath(Document doc, String xpath) throws Exception {
+ XPath xp = XPath.newInstance(xpath);
+ assertNotNull(xp.selectSingleNode(doc));
+ }
+
+ protected Document runTemplate(String path, String template) throws
Exception {
+ return runTemplate(path, template, false, null);
+ }
+
+ protected Document runTemplate(String path, String template, boolean
perAction, String actionName) throws Exception {
+ StringOutputType output = new StringOutputType(template, "foo",
perAction);
+ ArrayList list = new ArrayList();
+ list.add(output);
+
+ Reader reader = new
InputStreamReader(getClass().getResourceAsStream(path));
+ path = path.replaceAll("jsrc", "java");
+ p.generate(path, reader, list, null);
+
+ String out = null;
+ if (perAction) {
+ out = output.getString(actionName);
+ //System.out.println("output:"+out);
+ } else {
+ out = output.getString();
+ }
+
+ Document doc = new SAXBuilder().build(new StringReader(out));
+ return doc;
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]