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 { - - /** - * [EMAIL PROTECTED] ClassLoader} that loads instrumented classes. - * <p/> - * instrumented [EMAIL PROTECTED] 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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]