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