You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by tc...@apache.org on 2005/10/21 02:56:43 UTC

svn commit: r327059 - in /jakarta/commons/sandbox/javaflow/trunk: ./ src/java/org/apache/commons/javaflow/ant/ src/java/org/apache/commons/javaflow/utils/ src/test/org/apache/commons/javaflow/ src/test/org/apache/commons/javaflow/flow/ src/test/org/apa...

Author: tcurdt
Date: Thu Oct 20 17:56:25 2005
New Revision: 327059

URL: http://svn.apache.org/viewcvs?rev=327059&view=rev
Log:
consolidated the ant rewrite task with the utils,
support for n transformers,
use the task from maven to rewrite the test flows (for some reason the classname matching is not working),


Added:
    jakarta/commons/sandbox/javaflow/trunk/maven.xml   (with props)
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/BlackRedFlow.java   (with props)
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/CounterFlow.java   (with props)
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/Invoker.java   (with props)
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/NewObjectFlow.java   (with props)
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleFlow.java   (with props)
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleSerializableFlow.java   (with props)
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/StackBugFlow.java   (with props)
Removed:
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/runnables/
Modified:
    jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/ant/AntRewriteTask.java
    jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/utils/RewritingUtils.java
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/AbstractTestCase.java
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/RewritingTestCase.java
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/SerializationTestCase.java
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/SuspendResumeTestCase.java
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/UsageTestCase.java

Added: jakarta/commons/sandbox/javaflow/trunk/maven.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/maven.xml?rev=327059&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/maven.xml (added)
+++ jakarta/commons/sandbox/javaflow/trunk/maven.xml Thu Oct 20 17:56:25 2005
@@ -0,0 +1,29 @@
+<project
+  xmlns:j="jelly:core"
+  xmlns:util="jelly:util"
+  xmlns:ant="jelly:ant"
+  >
+
+  <postGoal name="test:compile">
+
+    <ant:path id="rewrite.classpath">
+      <ant:path refid="maven.dependency.classpath"/>
+      <ant:pathelement path="${maven.build.dest}"/>
+    </ant:path>
+
+    <ant:taskdef name="rewrite"
+                 classname="org.apache.commons.javaflow.ant.AntRewriteTask"
+                 classpathref="rewrite.classpath"
+                 />
+
+    <rewrite srcDir="target/test-classes" dstDir="target/test-classes">
+      <includes>
+        <include>**/*Flow*.java</include>
+      </includes>          
+    </rewrite>
+
+  </postGoal>
+
+</project>
+
+

Propchange: jakarta/commons/sandbox/javaflow/trunk/maven.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/javaflow/trunk/maven.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/ant/AntRewriteTask.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/ant/AntRewriteTask.java?rev=327059&r1=327058&r2=327059&view=diff
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/ant/AntRewriteTask.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/ant/AntRewriteTask.java Thu Oct 20 17:56:25 2005
@@ -39,20 +39,17 @@
 
     private ResourceTransformer transformer = new BcelClassTransformer();
 
-    private File destDir;
+    private File dstDir;
     private File srcDir;
 
-    public void setDestDir(File file) {
-        destDir = file;
+    public void setDstDir(final File pFile) {
+        dstDir = pFile;
     }
 
-    public File getDestDir() {
-        return destDir;
-    }
-
-    public void setSrcDir(File file) {
-        srcDir = file;
+    public void setSrcDir(final File pFile) {
+        srcDir = pFile;
     }
+    
     /**
      * Check that all required attributes have been set and nothing
      * silly has been entered.
@@ -60,28 +57,24 @@
      * @since Ant 1.5
      */
     protected void checkParameters() throws BuildException {
-        checkDir(srcDir,"source");
-        checkDir(destDir,"destination");
+        checkDir(srcDir,"srcDir");
+        checkDir(dstDir,"dstDir");
     }
 
-    private void checkDir(File dir,String name) {
-        if (dir==null) {
-            throw new BuildException("no " + name + " directory is specified", getLocation());
+    private void checkDir(final File pDir, final String pDescription) {
+        if (pDir == null) {
+            throw new BuildException("no " + pDescription + " directory is specified", getLocation());
         }
-        if (!dir.exists()) {
-            throw new BuildException(name + " directory \"" + dir + "\" does not exist", getLocation());
+        if (!pDir.exists()) {
+            throw new BuildException(pDescription + " directory \"" + pDir + "\" does not exist", getLocation());
         }
-        if (!dir.isDirectory()) {
-            throw new BuildException(name + " directory \"" + dir + "\" is not a directory", getLocation());
+        if (!pDir.isDirectory()) {
+            throw new BuildException(pDescription + " directory \"" + pDir + "\" is not a directory", getLocation());
         }
     }
 
     public void execute() throws BuildException {
-        // FIXME do we really need the super call?
-        super.execute();
         
-        checkParameters();
-
         fileset.setDir(srcDir);
         final DirectoryScanner ds = fileset.getDirectoryScanner(getProject());
         final String[] fileNames = ds.getIncludedFiles();
@@ -89,9 +82,9 @@
         try {
             for (int i = 0; i < fileNames.length; i++) {
                 final String fileName = fileNames[i];
-
+                
                 final File source = new File(srcDir, fileName);
-                final File destination = new File(getDestDir(), fileName);
+                final File destination = new File(dstDir, fileName);
                 
                 if (!destination.getParentFile().exists()) {
                     log("Creating dir: " + destination.getParentFile(), Project.MSG_VERBOSE);
@@ -105,27 +98,15 @@
                 
                 if (fileName.endsWith(".class")) {
                     log("Rewriting " + source + " to " + destination, Project.MSG_VERBOSE);
+                    System.out.println("Rewriting " + source);
 
                     RewritingUtils.rewriteClassFile(
                             source,
-                            transformer,
-                            destination);
-                    
-                    // source might be the same as destination, so be careful
-//                    long origSize = source.length();
-//                    InputStream in = new FileInputStream(source);
-//                    byte[] bytes = IOUtils.toByteArray(in);
-//                    in.close();
-//                    byte[] newBytes = transformer.transform(bytes);
-//                    if(bytes!=newBytes) {
-//                        FileOutputStream out = new FileOutputStream(destination);
-//                        out.write(newBytes);
-//                        out.close();
-//                        log("size: " + 100*destination.length()/origSize+ '%');
-//                    } else {
-//                        log("skipped");
-//                    }
+                            new ResourceTransformer[] { transformer },
+                            destination
+                            );                    
                 }
+                
                 if (fileName.endsWith(".jar")
                     || fileName.endsWith(".ear")
                     || fileName.endsWith(".zip")
@@ -135,31 +116,10 @@
                     
                     RewritingUtils.rewriteJar(
                             new JarInputStream(new FileInputStream(source)),
-                            transformer,
-                            new JarOutputStream(new FileOutputStream(destination)),
-                            null);
+                            new ResourceTransformer[] { transformer },
+                            new JarOutputStream(new FileOutputStream(destination))
+                            );
                     
-
-                    // write to a temporary file first because
-                    // source might be the same as destination
-//                    File tmp = File.createTempFile("javaflow","tmp",destination.getParentFile());
-//
-//                    ZipInputStream in = new ZipInputStream(new FileInputStream(source));
-//                    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(tmp));
-//                    boolean changed;
-//                    try {
-//                        changed = processArchive(in,out,1);
-//                    } finally {
-//                        in.close();
-//                        out.close();
-//                    }
-//
-//                    if(changed) {
-//                        if(destination.exists()) {
-//                            destination.delete();
-//                        }
-//                        tmp.renameTo(destination);
-//                    }
                 }
             }
         } catch (IOException e) {
@@ -167,63 +127,4 @@
         }
 
     }
-
-    /**
-     * Recursively proecss all the files (including zip/jar files).
-     *
-     * @return nestLevel
-     *      for a zip file, 1. for a zip file inside a zip file, 2. And so on.
-     *      Used for indentation.
-     * @return
-     *      true if at least one file has been modified. false
-     *      if otherwise (meaning input and output are identical.)
-     */
-//    private boolean processArchive(ZipInputStream in, ZipOutputStream out, int nestLevel) throws IOException {
-//        boolean changed = false;
-//        ZipEntry e;
-//
-//        while((e=in.getNextEntry())!=null) {
-//            // log the entry
-//            StringBuffer buf = new StringBuffer();
-//            for( int i=0; i<nestLevel; i++ )
-//                buf.append("  ");
-//            buf.append("processing "+e.getName());
-//            log(buf.toString(), Project.MSG_VERBOSE);
-//
-//            String one = e.getName();
-//
-//            if (one.endsWith(".class")) {
-//                // source might be the same as destination, so be careful
-//                long origSize = e.getSize();
-//                byte[] bytes = IOUtils.toByteArray(in);
-//                in.close();
-//                byte[] newBytes = transformer.transform(bytes);
-//                out.putNextEntry(e);
-//                out.write(newBytes);
-//                out.closeEntry();
-//
-//                log("Size: " + 100*newBytes.length/origSize+ '%');
-//
-//                changed |= (bytes!=newBytes);
-//            }
-//            else
-//            if (one.endsWith(".jar")
-//                || one.endsWith(".ear")
-//                || one.endsWith(".zip")
-//                || one.endsWith(".war")) {
-//
-//                out.putNextEntry(e);
-//                changed |= processArchive(new ZipInputStream(in),new ZipOutputStream(out),nestLevel++);
-//                out.closeEntry();
-//
-//                // TODO: compute the size increase
-//            } else {
-//                // just copy the file as-is.
-//                out.putNextEntry(e);
-//                IOUtils.copy(in,out);
-//                out.closeEntry();
-//            }
-//        }
-//        return changed;
-//    }
 }

Modified: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/utils/RewritingUtils.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/utils/RewritingUtils.java?rev=327059&r1=327058&r2=327059&view=diff
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/utils/RewritingUtils.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/utils/RewritingUtils.java Thu Oct 20 17:56:25 2005
@@ -35,36 +35,48 @@
 
     private final static Log log = LogFactory.getLog(RewritingUtils.class);
 
+    public interface Matcher {
+        boolean isMatching( final String name );
+    }
+    
+    private final static Matcher MATCH_ALL = new Matcher() {
+        public boolean isMatching(final String pName) {
+            return true;
+        }
+    };
+    
     /*
      * @todo multiple transformers
      */
     public static void rewriteClassFile(
             final File pInput,
-            final ResourceTransformer pTransformer,
+            final ResourceTransformer[] pTransformers,
             final File pOutput
             ) throws IOException {
         
         final byte[] original = FileUtils.readFileToByteArray(pInput);
-        final byte[] transformed = pTransformer.transform(original);
+        byte[] transformed = original;
+        for (int i = 0; i < pTransformers.length; i++) {
+            transformed = pTransformers[i].transform(original);            
+        }
         final FileOutputStream os = new FileOutputStream(pOutput);
         os.write(transformed);
         os.close();
     }
     
-    public static boolean isMatching(final String name, final String pattern) {
-        //FIXME proper matching
-        return "org/apache/cocoon/components/flow/java/AbstractContinuable.class".equals(name);
-        //|| "org/apache/cocoon/components/flow/java/Invoker.class".equals(name);
+    public static boolean rewriteJar(
+            final JarInputStream pInput,
+            final ResourceTransformer[] pTransformers,
+            final JarOutputStream pOutput
+            ) throws IOException {
+        return rewriteJar(pInput, pTransformers, pOutput, MATCH_ALL);
     }
-    
-    /*
-     * @todo multiple transformers
-     */
+
     public static boolean rewriteJar(
             final JarInputStream pInput,
-            final ResourceTransformer pTransformer,
+            final ResourceTransformer[] pTransformers,
             final JarOutputStream pOutput,
-            final String pattern //FIXME matcher class
+            final Matcher pMatcher
             ) throws IOException {
 
         boolean changed = false;
@@ -86,17 +98,19 @@
             pOutput.putNextEntry(new JarEntry(name));
 
             if (name.endsWith(".class")) {
-                if (isMatching(name, pattern)) {
+                if (pMatcher.isMatching(name)) {
                     
                     if (log.isDebugEnabled()) {
                         log.debug("transforming " + name);
                     }
                     
-                    System.out.println(name);
-                    
                     final byte[] original = IOUtils.toByteArray(pInput);
                     
-                    final byte[] transformed = pTransformer.transform(original);
+                    byte[] transformed = original;
+                    for (int i = 0; i < pTransformers.length; i++) {
+                        transformed = pTransformers[i].transform(original);            
+                    }
+
                     IOUtils.copy(new ByteArrayInputStream(transformed), pOutput);
     
                     changed |= transformed.length != original.length;
@@ -110,9 +124,9 @@
 
                 changed |= rewriteJar(
                         new JarInputStream(pInput),
-                        pTransformer,
+                        pTransformers,
                         new JarOutputStream(pOutput),
-                        pattern
+                        pMatcher
                         );
                 
                 continue;
@@ -121,7 +135,7 @@
             final byte[] original = IOUtils.toByteArray(pInput);
             IOUtils.copy(new ByteArrayInputStream(original), pOutput);
             
-            System.out.println("copied " + name + "(" + original.length + ")");
+            log.debug("copied " + name + "(" + original.length + ")");
         }
         
         pInput.close();
@@ -140,9 +154,9 @@
 
             RewritingUtils.rewriteJar(
                     new JarInputStream(new FileInputStream(args[i])),
-                    new BcelClassTransformer(),
-                    new JarOutputStream(new FileOutputStream(args[i+1])),
-                    "");
+                    new ResourceTransformer[] { new BcelClassTransformer() },
+                    new JarOutputStream(new FileOutputStream(args[i+1]))
+                    );
         }
 
         System.out.println("done");

Modified: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/AbstractTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/AbstractTestCase.java?rev=327059&r1=327058&r2=327059&view=diff
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/AbstractTestCase.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/AbstractTestCase.java Thu Oct 20 17:56:25 2005
@@ -2,52 +2,6 @@
 
 import junit.framework.TestCase;
 
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
 
 public abstract class AbstractTestCase extends TestCase {
-
-    /**
-     * {@link ClassLoader} that loads instrumented classes.
-     * <p/>
-     * instrumented {@link Runnable}s often need to call into
-     * other classes that in turn also need to be instrumented,
-     * we do need a class loader around that can load them.
-     */
-    private ClassLoader instrumentedLoader;
-
-    private ClassLoader oldContextClassLoader;
-
-    public Runnable createRunnable(final Class pClazz)  throws IOException, InstantiationException, IllegalAccessException, ClassNotFoundException, SecurityException, IllegalArgumentException, NoSuchMethodException, InvocationTargetException {
-        return createRunnable(pClazz, new Class[] {}, new Object[] {});
-    }
-    
-    public Runnable createRunnable(final Class pClazz, final Class[] pParameterTypes, final Object[] pParameters) throws IOException, InstantiationException, IllegalAccessException, ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
-        final Class clazz = instrumentedLoader.loadClass(pClazz.getName());
-        final Constructor constructor = clazz.getConstructor(pParameterTypes);
-        final Object o = constructor.newInstance(pParameters);
-        return (Runnable) o;
-    }
-
-    /**
-     * Set up the context class loader to the instrumented one
-     * so that the serialization engines will use it.
-     */
-    protected void setUp() throws Exception {
-        oldContextClassLoader = Thread.currentThread().getContextClassLoader();
-        Thread.currentThread().setContextClassLoader(instrumentedLoader);
-
-        instrumentedLoader = new TestClassLoader(getClass().getClassLoader(), "org.apache.commons.javaflow.runnables.");
-
-        super.setUp();
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        Thread.currentThread().setContextClassLoader(oldContextClassLoader);
-        instrumentedLoader = null;
-    }
-
 }

Modified: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/RewritingTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/RewritingTestCase.java?rev=327059&r1=327058&r2=327059&view=diff
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/RewritingTestCase.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/RewritingTestCase.java Thu Oct 20 17:56:25 2005
@@ -1,27 +1,27 @@
 package org.apache.commons.javaflow;
 
-import org.apache.commons.javaflow.runnables.BlackRed;
-import org.apache.commons.javaflow.runnables.Counter;
-import org.apache.commons.javaflow.runnables.NewObject;
-import org.apache.commons.javaflow.runnables.StackBug;
+import org.apache.commons.javaflow.flow.BlackRedFlow;
+import org.apache.commons.javaflow.flow.CounterFlow;
+import org.apache.commons.javaflow.flow.NewObjectFlow;
+import org.apache.commons.javaflow.flow.StackBugFlow;
 
 
 public final class RewritingTestCase extends AbstractTestCase {
     
     public void testNewObject() throws Exception {
-        final Runnable r = createRunnable(NewObject.class);
+        final Runnable r = new NewObjectFlow();
         final Continuation c = Continuation.startWith(r);
         assertTrue(c == null);
     }
 
     public void testStackBug() throws Exception {
-        final Runnable r = createRunnable(StackBug.class);
+        final Runnable r = new StackBugFlow();
         final Continuation c = Continuation.startWith(r);
         assertTrue(c == null);
     }
     
     public void testBlackRed() throws Exception {
-        final Runnable r = createRunnable(BlackRed.class);
+        final Runnable r = new BlackRedFlow();
         final Continuation c1 = Continuation.startWith(r);
         assertTrue(c1 != null);
         final Continuation c2 = Continuation.continueWith(c1);
@@ -30,7 +30,7 @@
     
     public void testCounter() throws Exception {
         final int count = 5;
-        final Runnable r = createRunnable(Counter.class, new Class[] { Integer.class }, new Object[] { new Integer(count) });
+        final Runnable r = new CounterFlow(new Integer(count));
         
         int i = 0;
         for(Continuation c = Continuation.startWith(r); c != null; c = Continuation.continueWith(c)) {

Modified: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/SerializationTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/SerializationTestCase.java?rev=327059&r1=327058&r2=327059&view=diff
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/SerializationTestCase.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/SerializationTestCase.java Thu Oct 20 17:56:25 2005
@@ -1,38 +1,31 @@
 package org.apache.commons.javaflow;
 
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.xml.DomDriver;
-import junitx.util.PrivateAccessor;
-import org.apache.commons.javaflow.runnables.Invoker;
-import org.apache.commons.javaflow.runnables.Simple;
-import org.apache.commons.javaflow.runnables.SimpleSerializable;
-import org.apache.commons.javaflow.utils.ReflectionUtils;
-import org.apache.tools.ant.util.FileUtils;
-
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FileReader;
-import java.io.IOException;
+import junitx.util.PrivateAccessor;
+import org.apache.commons.javaflow.flow.Invoker;
+import org.apache.commons.javaflow.flow.SimpleFlow;
+import org.apache.commons.javaflow.flow.SimpleSerializableFlow;
+import org.apache.tools.ant.util.FileUtils;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
 
 
 public final class SerializationTestCase extends AbstractTestCase {
 
-    public SimpleSerializable cast(Object o) throws IOException, ClassNotFoundException {
-        return (SimpleSerializable) ReflectionUtils.cast(o);
-    }
-    
     private File output;
     
     public void testSuspend() throws Exception {
-        final Runnable r = createRunnable(SimpleSerializable.class);
+        final SimpleSerializableFlow r = new SimpleSerializableFlow();
         
-        assertTrue(cast(r).g == -1);
-        assertTrue(cast(r).l == -1);
+        assertTrue(r.g == -1);
+        assertTrue(r.l == -1);
         
         Continuation c1 = Continuation.startWith(r);
         
-        assertTrue(cast(r).g == 0);
-        assertTrue(cast(r).l == 0);
+        assertTrue(r.g == 0);
+        assertTrue(r.l == 0);
         
         final XStream xstream = new XStream(new DomDriver());
         final String xml = xstream.toXML(c1);        
@@ -58,29 +51,29 @@
         
         final Continuation c1 = (Continuation) o;
 
-        final Runnable r1 = (Runnable) PrivateAccessor.getField(PrivateAccessor.getField(c1, "stack"), "runnable");
-        assertTrue(cast(r1).g == 0);
-        assertTrue(cast(r1).l == 0);
+        final SimpleSerializableFlow r1 = (SimpleSerializableFlow) PrivateAccessor.getField(PrivateAccessor.getField(c1, "stack"), "runnable");
+        assertTrue(r1.g == 0);
+        assertTrue(r1.l == 0);
         
         final Continuation c2 = Continuation.continueWith(c1);
 
-        final Runnable r2 = (Runnable) PrivateAccessor.getField(PrivateAccessor.getField(c1, "stack"), "runnable");
-        assertTrue(cast(r2).g == 1);
-        assertTrue(cast(r2).l == 1);
+        final SimpleSerializableFlow r2 = (SimpleSerializableFlow) PrivateAccessor.getField(PrivateAccessor.getField(c1, "stack"), "runnable");
+        assertTrue(r2.g == 1);
+        assertTrue(r2.l == 1);
 
         assertTrue(r1 == r2);   
     }
     
     public void testSerializableCheck() throws Exception {
-        final Runnable r1 = createRunnable(SimpleSerializable.class);
+        final Runnable r1 = new SimpleSerializableFlow();
         Continuation c1 = Continuation.startWith(r1);
         assertTrue(c1.isSerializable());
 
-        final Runnable r2 = createRunnable(SimpleSerializable.class);
+        final Runnable r2 = new SimpleSerializableFlow();
         Continuation c2 = Continuation.startWith(new Invoker(r2));
         assertTrue(c2.isSerializable());
 
-        final Runnable r3 = createRunnable(Simple.class);
+        final Runnable r3 = new SimpleFlow();
         Continuation c3 = Continuation.startWith(r3);
         assertTrue(!c3.isSerializable());
     }

Modified: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/SuspendResumeTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/SuspendResumeTestCase.java?rev=327059&r1=327058&r2=327059&view=diff
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/SuspendResumeTestCase.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/SuspendResumeTestCase.java Thu Oct 20 17:56:25 2005
@@ -1,63 +1,56 @@
 package org.apache.commons.javaflow;
 
-import java.io.IOException;
-import org.apache.commons.javaflow.Continuation;
-import org.apache.commons.javaflow.runnables.SimpleSerializable;
-import org.apache.commons.javaflow.utils.ReflectionUtils;
+import org.apache.commons.javaflow.flow.SimpleSerializableFlow;
 
 
 public class SuspendResumeTestCase extends AbstractTestCase {
     
-    public SimpleSerializable cast(Object o) throws IOException, ClassNotFoundException {
-        return (SimpleSerializable) ReflectionUtils.cast(o);
-    }
-    
     public void testSimpleSuspendResume() throws Exception {
-        final Runnable r = createRunnable(SimpleSerializable.class);
+        final SimpleSerializableFlow r = new SimpleSerializableFlow();
         
-        assertTrue(cast(r).g == -1);
-        assertTrue(cast(r).l == -1);
+        assertTrue(r.g == -1);
+        assertTrue(r.l == -1);
         
         Continuation c1 = Continuation.startWith(r);
         
-        assertTrue(cast(r).g == 0);
-        assertTrue(cast(r).l == 0);
+        assertTrue(r.g == 0);
+        assertTrue(r.l == 0);
 
         Continuation c2 = Continuation.continueWith(c1);
 
-        assertTrue(cast(r).g == 1);
-        assertTrue(cast(r).l == 1);
+        assertTrue(r.g == 1);
+        assertTrue(r.l == 1);
 
         Continuation c3 = Continuation.continueWith(c2);
 
-        assertTrue(cast(r).g == 2);
-        assertTrue(cast(r).l == 2);
+        assertTrue(r.g == 2);
+        assertTrue(r.l == 2);
     }
     
     public void testContinuationBranching() throws Exception {
-        final Runnable r = createRunnable(SimpleSerializable.class);
+        final SimpleSerializableFlow r = new SimpleSerializableFlow();
         
-        assertTrue(cast(r).g == -1);
-        assertTrue(cast(r).l == -1);
+        assertTrue(r.g == -1);
+        assertTrue(r.l == -1);
         
         Continuation c1 = Continuation.startWith(r);
         
-        assertTrue(cast(r).g == 0);
-        assertTrue(cast(r).l == 0);
+        assertTrue(r.g == 0);
+        assertTrue(r.l == 0);
 
         Continuation c2 = Continuation.continueWith(c1);
 
-        assertTrue(cast(r).g == 1);
-        assertTrue(cast(r).l == 1);
+        assertTrue(r.g == 1);
+        assertTrue(r.l == 1);
 
         Continuation c31 = Continuation.continueWith(c2);
 
-        assertTrue(cast(r).g == 2);
-        assertTrue(cast(r).l == 2);
+        assertTrue(r.g == 2);
+        assertTrue(r.l == 2);
 
         Continuation c32 = Continuation.continueWith(c2);
 
-        assertTrue(cast(r).g == 3);
-        assertTrue(cast(r).l == 2);
+        assertTrue(r.g == 3);
+        assertTrue(r.l == 2);
     }
 }

Modified: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/UsageTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/UsageTestCase.java?rev=327059&r1=327058&r2=327059&view=diff
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/UsageTestCase.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/UsageTestCase.java Thu Oct 20 17:56:25 2005
@@ -1,6 +1,6 @@
 package org.apache.commons.javaflow;
 
-import org.apache.commons.javaflow.runnables.SimpleSerializable;
+import org.apache.commons.javaflow.flow.SimpleSerializableFlow;
 
 
 
@@ -8,7 +8,7 @@
 
     public void testIncorrectUsageWithNormalClassLoader() throws Exception {
         try {
-            final Runnable r = new SimpleSerializable();
+            final Runnable r = new SimpleSerializableFlow();
             r.run();
             fail();
         } catch (final Exception e) {

Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/BlackRedFlow.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/BlackRedFlow.java?rev=327059&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/BlackRedFlow.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/BlackRedFlow.java Thu Oct 20 17:56:25 2005
@@ -0,0 +1,52 @@
+package org.apache.commons.javaflow.flow;
+
+import org.apache.commons.javaflow.Continuation;
+
+import java.io.Serializable;
+
+/**
+ * Test for making sure that rstack works correctly.
+ *
+ * For this test we need to have a stack frame that goes through multiple objects
+ * of different types.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public final class BlackRedFlow implements Runnable, Serializable {
+    public void run() {
+        new Black(new Red(new Black(new Suspend()))).run();
+    }
+
+    class Black implements Runnable {
+        final Runnable r;
+
+        public Black(Runnable r) {
+            this.r = r;
+        }
+
+        public void run() {
+            String s = "foo";   // have some random variable
+            r.run();
+        }
+    }
+
+    class Red implements Runnable {
+        final Runnable r;
+
+        public Red(Runnable r) {
+            this.r = r;
+        }
+
+        public void run() {
+            int i = 5;  // have some random variable
+            r.run();
+        }
+    }
+
+    class Suspend implements Runnable {
+        public void run() {
+            Continuation.suspend();
+        }
+    }
+
+}

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/BlackRedFlow.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/BlackRedFlow.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/CounterFlow.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/CounterFlow.java?rev=327059&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/CounterFlow.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/CounterFlow.java Thu Oct 20 17:56:25 2005
@@ -0,0 +1,21 @@
+package org.apache.commons.javaflow.flow;
+
+import org.apache.commons.javaflow.Continuation;
+
+/**
+ * @author Kohsuke Kawaguchi
+ */
+public final class CounterFlow implements Runnable {
+
+    final int up;
+
+    public CounterFlow(Integer up) {
+        this.up = up.intValue();
+    }
+
+    public void run() {
+        for( int i=0; i<up; i++ ) {
+            Continuation.suspend();
+        }
+    }
+}

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/CounterFlow.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/CounterFlow.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/Invoker.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/Invoker.java?rev=327059&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/Invoker.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/Invoker.java Thu Oct 20 17:56:25 2005
@@ -0,0 +1,16 @@
+package org.apache.commons.javaflow.flow;
+
+
+public final class Invoker implements Runnable {
+
+    private final Runnable runnable;
+    
+    public Invoker(final Runnable pRunnable) {
+        runnable = pRunnable;
+    }
+    
+    public void run() {
+        runnable.run();
+    }
+    
+}

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/Invoker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/Invoker.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/NewObjectFlow.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/NewObjectFlow.java?rev=327059&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/NewObjectFlow.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/NewObjectFlow.java Thu Oct 20 17:56:25 2005
@@ -0,0 +1,25 @@
+package org.apache.commons.javaflow.flow;
+
+import junit.framework.Assert;
+
+/**
+ * Test that allocates a lot of new objects.
+ *
+ * Javaflow performs some tricky instrumentation on new object allocations,
+ * especially when it has arguments.
+ *
+ * Nesting object allocations makes it even more interesting.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public final class NewObjectFlow implements Runnable {
+    public void run() {
+        char[] ch = {'a','b','c'};
+
+        String s = new String(new String(
+                new String(ch,0,ch.length).toCharArray(), 0, ch.length ));
+
+        Assert.assertEquals(s,"abc");
+    }
+
+}

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/NewObjectFlow.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/NewObjectFlow.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleFlow.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleFlow.java?rev=327059&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleFlow.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleFlow.java Thu Oct 20 17:56:25 2005
@@ -0,0 +1,22 @@
+package org.apache.commons.javaflow.flow;
+
+import org.apache.commons.javaflow.Continuation;
+
+public final class SimpleFlow implements Runnable {
+
+    public int g = -1; // global count throughout all continuations
+    public int l = -1; // local count mapped to a global variable so
+                       // we can access is
+    
+    public void run() {
+        int local = -1;
+        ++g; l=++local;
+        Continuation.suspend();
+        ++g; l=++local;
+        Continuation.suspend();
+        ++g; l=++local;
+        Continuation.suspend();
+        ++g; l=++local;
+    }
+
+}
\ No newline at end of file

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleFlow.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleFlow.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleSerializableFlow.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleSerializableFlow.java?rev=327059&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleSerializableFlow.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleSerializableFlow.java Thu Oct 20 17:56:25 2005
@@ -0,0 +1,25 @@
+package org.apache.commons.javaflow.flow;
+
+import java.io.Serializable;
+import org.apache.commons.javaflow.Continuation;
+
+public final class SimpleSerializableFlow implements Runnable, Serializable {
+
+    private static final long serialVersionUID = 1L;
+    
+    public int g = -1; // global count throughout all continuations
+    public int l = -1; // local count mapped to a global variable so
+                       // we can access is
+    
+    public void run() {
+        int local = -1;
+        ++g; l=++local;
+        Continuation.suspend();
+        ++g; l=++local;
+        Continuation.suspend();
+        ++g; l=++local;
+        Continuation.suspend();
+        ++g; l=++local;
+    }
+
+}
\ No newline at end of file

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleSerializableFlow.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/SimpleSerializableFlow.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/StackBugFlow.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/StackBugFlow.java?rev=327059&view=auto
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/StackBugFlow.java (added)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/StackBugFlow.java Thu Oct 20 17:56:25 2005
@@ -0,0 +1,35 @@
+package org.apache.commons.javaflow.flow;
+
+/**
+ * Regression test case.
+ *
+ * <p>
+ * When the stack size reaches the maximum in a constructor method invocation,
+ * there was a bug where we failed to expand the stack size appropriately.
+ *
+ * This is a regression test for that case.
+ *
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public final class StackBugFlow implements Runnable {
+    public void run() {
+        final Object o = foo("abc","def");
+    }
+
+    private Object foo(String a, String b) {
+        return new StrStr(a,b);
+    }
+
+    private static final class StrStr {
+        private final String value;
+
+        public StrStr(String a, String b) {
+            value = a+b;
+        }
+
+        public String toString() {
+            return value;
+        }
+    }
+}

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/StackBugFlow.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/flow/StackBugFlow.java
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org