Author: fdesbois
Date: 2009-10-20 17:06:33 +0200 (Tue, 20 Oct 2009)
New Revision: 290
Added:
trunk/nuiton-processor/src/test/java/org/nuiton/processor/CommonTest.java
trunk/nuiton-processor/src/test/java/org/nuiton/processor/filters/
trunk/nuiton-processor/src/test/java/org/nuiton/processor/filters/StringFilterTest.java
trunk/nuiton-processor/src/test/resources/org/nuiton/processor/filters/
trunk/nuiton-processor/src/test/resources/org/nuiton/processor/filters/StringFilterTest.java2
trunk/nuiton-processor/src/test/resources/org/nuiton/processor/filters/StringFilterTest_1.java2
Modified:
trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/GeneratorTemplatesFilter.java
trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/GeneratorTemplatesFilterIn.java
Log:
Temporary update for testing parentheses option on eugene javabuilder branche.
Modified: trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/GeneratorTemplatesFilter.java
===================================================================
--- trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/GeneratorTemplatesFilter.java 2009-10-11 11:27:24 UTC (rev 289)
+++ trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/GeneratorTemplatesFilter.java 2009-10-20 15:06:33 UTC (rev 290)
@@ -38,6 +38,9 @@
package org.nuiton.processor.filters;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
/*
* Classe principale du filtre de génération. Ce filtre recherche tout ce qu'il
* y a entre les tag /*{ et }*/ a l'interieur de ces tags un autre filtre
@@ -58,15 +61,27 @@
* les options existantes sont:
* <li>passEmptyLine: boolean; cette option permet de supprimer la première
* et la dernière ligne si elles sont videx</li>
+ * <li>writeParentheses: boolean, default: true : cette option permet d'ajouter les
+ * parentheses autour du resultat (par defaut ces parentheses correspondent a celles
+ * de l'appel a la methode output.write)</li>
* <li>wtriteString: String, default: output.write</li>
*/
public class GeneratorTemplatesFilter extends DefaultFilter {
- protected boolean passEmptyLine = false;
- protected String writeString = "output.write";
+ private static final Log log = LogFactory.getLog(GeneratorTemplatesFilter.class);
- protected GeneratorTemplatesFilterIn inFilter = new GeneratorTemplatesFilterIn(this);
+ protected boolean passEmptyLine;
+ protected boolean writeParentheses;
+ protected String writeString;
+ protected GeneratorTemplatesFilterIn inFilter;
+ public GeneratorTemplatesFilter() {
+ this.passEmptyLine = false;
+ this.writeParentheses = true;
+ this.writeString = "output.write";
+ this.inFilter = new GeneratorTemplatesFilterIn(this);
+ }
+
public String getWriteString(){
return writeString;
}
@@ -86,6 +101,10 @@
writeString =
ch.replaceAll("generator option: *writeString *= *(.*)", "$1");
return EMPTY_STRING;
+ }else if(ch.matches("generator option: *parentheses *= *(true|false)")){
+ writeParentheses =
+ "true".equalsIgnoreCase(ch.substring(ch.length()-4));
+ return EMPTY_STRING;
}else{
if (passEmptyLine && ch.length() > 0){
// suppression des premieres et dernieres lignes si elles sont vides
@@ -105,8 +124,21 @@
}
}
- String result = inFilter.parse(ch) + inFilter.flush();
- return getWriteString()+ "(\"" + result + "\");";
+ String resultInFilter = inFilter.parse(ch) + inFilter.flush();
+
+ String result = getWriteString();
+ if (writeParentheses) {
+ result += "(";
+ }
+ result += "\"" + resultInFilter + "\"";
+ if (writeParentheses) {
+ result += ");";
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("writeParentheses = " + writeParentheses);
+ }
+ return result;
}
}
Modified: trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/GeneratorTemplatesFilterIn.java
===================================================================
--- trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/GeneratorTemplatesFilterIn.java 2009-10-11 11:27:24 UTC (rev 289)
+++ trunk/nuiton-processor/src/main/java/org/nuiton/processor/filters/GeneratorTemplatesFilterIn.java 2009-10-20 15:06:33 UTC (rev 290)
@@ -34,14 +34,23 @@
package org.nuiton.processor.filters;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
/**
* Le tag *) n'est substitué que s'il est a l'extérieur du tag <%=...%>ou
* <%...%>
*/
public class GeneratorTemplatesFilterIn extends DefaultFilter { // GeneratorTemplatesFilterIn
+ private static final Log log = LogFactory.getLog(GeneratorTemplatesFilterIn.class);
+
GeneratorTemplatesFilter parent = null;
+ protected String beginParenthese = "";
+ protected String endParenthese = "";
+
+
public GeneratorTemplatesFilterIn(GeneratorTemplatesFilter parent) {
this.parent = parent;
}
@@ -56,10 +65,14 @@
*/
@Override
protected String performInFilter(String ch) {
+ if (this.parent.writeParentheses) {
+ this.beginParenthese = "(";
+ this.endParenthese = ");";
+ }
if (ch.startsWith("=")) {
return "\"+" + ch.substring(1) + "+\"";
}
- return "\");" + ch + parent.getWriteString() + "(\"";
+ return "\"" + endParenthese + ch + parent.getWriteString() + beginParenthese + "\"";
}
/**
@@ -82,9 +95,13 @@
*/
@Override
protected String performOutFilter(String ch) {
+ if (this.parent.writeParentheses) {
+ this.beginParenthese = "(";
+ this.endParenthese = ");";
+ }
String result = convertEndComment(ch).replaceAll("\"", "\\\\\"")
.replaceAll("(\r\n|\n|\r)",
- "\\\\n\");\n" + parent.getWriteString() + "(\"");
+ "\\\\n\"" + endParenthese + "\n" + parent.getWriteString() + beginParenthese + "\"");
// it's important that \r\n is first in regexp.
return result;
Added: trunk/nuiton-processor/src/test/java/org/nuiton/processor/CommonTest.java
===================================================================
--- trunk/nuiton-processor/src/test/java/org/nuiton/processor/CommonTest.java (rev 0)
+++ trunk/nuiton-processor/src/test/java/org/nuiton/processor/CommonTest.java 2009-10-20 15:06:33 UTC (rev 290)
@@ -0,0 +1,77 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.nuiton.processor;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codehaus.plexus.util.IOUtil;
+import org.junit.Assert;
+
+/**
+ *
+ * @author fdesbois
+ */
+public abstract class CommonTest {
+
+ protected static File basedir;
+ protected static File testdir;
+
+ static private final Log log = LogFactory.getLog(CommonTest.class);
+
+ //@BeforeClass
+ public static void initClass() throws Exception {
+ basedir = getBasedir();
+ testdir = getFile(basedir, "target", "test-classes", "org", "nuiton", "processor", "result");
+ testdir.mkdirs();
+ }
+
+ protected void checkPattern(String pattern, boolean required, File f) throws IOException {
+
+ if (log.isDebugEnabled()) {
+ log.debug("check generated file " + f);
+ }
+
+ Assert.assertTrue("generated file " + f + " was not found...", f.exists());
+ String content = readAsString(f, "utf-8");
+
+ String errorMessage = required ? "could not find the pattern : " : "should not have found pattern :";
+ Assert.assertEquals(errorMessage + pattern + " in file " + f, required, content.contains(pattern));
+ }
+
+ public static String readAsString(File file, String encoding) throws IOException {
+ FileInputStream inf = new FileInputStream(file);
+ BufferedReader in = new BufferedReader(new InputStreamReader(inf, encoding));
+ try {
+ return IOUtil.toString(in);
+ } finally {
+ in.close();
+ }
+ }
+
+ public static File getFile(File base, String... paths) {
+ StringBuilder buffer = new StringBuilder();
+ for (String path : paths) {
+ buffer.append(File.separator).append(path);
+ }
+ File f = new File(base, buffer.substring(1));
+ return f;
+ }
+
+ public static File getBasedir() {
+ String basedirPath = System.getProperty("basedir");
+
+ if (basedirPath == null) {
+ basedirPath = new File("").getAbsolutePath();
+ }
+
+ return new File(basedirPath);
+ }
+}
Added: trunk/nuiton-processor/src/test/java/org/nuiton/processor/filters/StringFilterTest.java
===================================================================
--- trunk/nuiton-processor/src/test/java/org/nuiton/processor/filters/StringFilterTest.java (rev 0)
+++ trunk/nuiton-processor/src/test/java/org/nuiton/processor/filters/StringFilterTest.java 2009-10-20 15:06:33 UTC (rev 290)
@@ -0,0 +1,56 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.nuiton.processor.filters;
+
+import org.nuiton.processor.*;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ *
+ * @author fdesbois
+ */
+public class StringFilterTest extends CommonTest {
+
+ static private final Log log = LogFactory.getLog(StringFilterTest.class);
+
+ @BeforeClass
+ public static void initClass() throws Exception {
+ CommonTest.initClass();
+ }
+
+ @Test
+ public void testStringFilter() throws IOException {
+ String fileName = "StringFilterTest.java2";
+ String in = StringFilterTest.class.getResource(fileName).getFile();
+ File out = getFile(testdir, fileName);
+ Processor processor = new Processor();
+ processor.setInputFilter(new GeneratorTemplatesFilter());
+ processor.process(new FileReader(in), new FileWriter(out));
+ String content = readAsString(out, "utf-8");
+ if (log.isDebugEnabled()) {
+ log.debug("output : " + out);
+ log.debug(content);
+ }
+
+ fileName = "StringFilterTest_1.java2";
+ in = StringFilterTest.class.getResource(fileName).getFile();
+ out = getFile(testdir, fileName);
+ processor.process(new FileReader(in), new FileWriter(out));
+ content = readAsString(out, "utf-8");
+ if (log.isDebugEnabled()) {
+ log.debug("output : " + out);
+ log.debug(content);
+ }
+ //checkPattern("+\" int i = 0;\n\"", true, out);
+ }
+}
Added: trunk/nuiton-processor/src/test/resources/org/nuiton/processor/filters/StringFilterTest.java2
===================================================================
--- trunk/nuiton-processor/src/test/resources/org/nuiton/processor/filters/StringFilterTest.java2 (rev 0)
+++ trunk/nuiton-processor/src/test/resources/org/nuiton/processor/filters/StringFilterTest.java2 2009-10-20 15:06:33 UTC (rev 290)
@@ -0,0 +1,15 @@
+
+
+public class StringProcessorTest {
+
+ public void testForStringTemplatesFilter() {
+
+ String code = ""
+ /*{ int i = 0;
+ i = 1+2;
+ MonObject result = new MonObject(result);
+ return result;
+ }*/;
+ }
+
+}
\ No newline at end of file
Added: trunk/nuiton-processor/src/test/resources/org/nuiton/processor/filters/StringFilterTest_1.java2
===================================================================
--- trunk/nuiton-processor/src/test/resources/org/nuiton/processor/filters/StringFilterTest_1.java2 (rev 0)
+++ trunk/nuiton-processor/src/test/resources/org/nuiton/processor/filters/StringFilterTest_1.java2 2009-10-20 15:06:33 UTC (rev 290)
@@ -0,0 +1,13 @@
+/*{generator option: parentheses = true}*/
+/*{generator option: writeString = output.write}*/
+public class StringProcessorTest {
+
+ public void testForStringTemplatesFilter() {
+
+ /*{
+ troulala;
+ */}
+
+ }
+
+}
\ No newline at end of file