/*
* Copyright 2001-2007 Geert Bevin <gbevin[remove] at uwyn dot com>
* Distributed under the terms of either:
* - the common development and distribution license (CDDL), v1.0; or
* - the GNU Lesser General Public License, v2.1 or later
* $Id: TestPause.java 3810 2007-06-25 13:36:58Z gbevin $
*/
package com.uwyn.rife.continuations;
import junit.framework.TestCase;
public class TestPause extends TestCase
{
public TestPause(String name)
{
super(name);
}
public void testPauseInWhile()
throws Throwable
{
for (String testclass : new String[] {"$PauseInWhile", "$PauseInWhileInterface"})
{
ContinuableRunnerTest runner = new ContinuableRunnerTest();
String id1 = runner.start(TestPause.class.getName()+testclass);
assertNotNull(id1);
ContinuationContext context1 = runner.getManager().getContext(id1);
assertEquals(5, context1.getLocalVars().getInt(1));
String id2 = runner.resume(id1);
assertNotNull(id2);
assertFalse(id1.equals(id2));
ContinuationContext context2 = runner.getManager().getContext(id2);
assertEquals(4, context2.getLocalVars().getInt(1));
String id3 = runner.resume(id2);
assertNotNull(id3);
assertFalse(id1.equals(id3));
assertFalse(id2.equals(id3));
ContinuationContext context3 = runner.getManager().getContext(id3);
assertEquals(3, context3.getLocalVars().getInt(1));
String id4 = runner.resume(id3);
assertNotNull(id4);
assertFalse(id1.equals(id4));
assertFalse(id2.equals(id4));
assertFalse(id3.equals(id4));
ContinuationContext context4 = runner.getManager().getContext(id4);
assertEquals(2, context4.getLocalVars().getInt(1));
String id5 = runner.resume(id4);
assertNotNull(id5);
assertFalse(id1.equals(id5));
assertFalse(id2.equals(id5));
assertFalse(id3.equals(id5));
assertFalse(id4.equals(id5));
ContinuationContext context5 = runner.getManager().getContext(id5);
assertEquals(1, context5.getLocalVars().getInt(1));
String id6 = runner.resume(id5);
assertNull(id6);
}
}
public void testPauseInWhileClones()
throws Throwable
{
for (String testclass : new String[] {"$PauseInWhile", "$PauseInWhileInterface"})
{
ContinuableRunnerTest runner = new ContinuableRunnerTest();
String id1 = runner.start(TestPause.class.getName()+testclass);
assertNotNull(id1);
ContinuationContext context1 = runner.getManager().getContext(id1);
assertEquals(5, context1.getLocalVars().getInt(1));
String id2a = runner.resume(id1);
assertNotNull(id2a);
ContinuationContext context2 = runner.getManager().getContext(id2a);
assertEquals(4, context2.getLocalVars().getInt(1));
String id3aa = runner.resume(id2a);
assertNotNull(id3aa);
ContinuationContext context3aa = runner.getManager().getContext(id3aa);
assertEquals(3, context3aa.getLocalVars().getInt(1));
String id4aa = runner.resume(id3aa);
assertNotNull(id4aa);
ContinuationContext context4aa = runner.getManager().getContext(id4aa);
assertEquals(2, context4aa.getLocalVars().getInt(1));
String id2b = runner.resume(id1);
assertNotNull(id2b);
assertFalse(id2a.equals(id2b));
ContinuationContext context2b = runner.getManager().getContext(id2b);
assertEquals(4, context2.getLocalVars().getInt(1));
String id3ab = runner.resume(id2a);
assertNotNull(id3ab);
assertFalse(id3aa.equals(id3ab));
ContinuationContext context3ab = runner.getManager().getContext(id3ab);
assertEquals(3, context3ab.getLocalVars().getInt(1));
String id5aa = runner.resume(id4aa);
assertNotNull(id5aa);
ContinuationContext context5aa = runner.getManager().getContext(id5aa);
assertEquals(1, context5aa.getLocalVars().getInt(1));
String id3b = runner.resume(id2b);
assertNotNull(id3b);
assertFalse(id3aa.equals(id3b));
assertFalse(id3ab.equals(id3b));
ContinuationContext context3b = runner.getManager().getContext(id3b);
assertEquals(3, context3b.getLocalVars().getInt(1));
String id4ab = runner.resume(id3ab);
assertNotNull(id4ab);
assertFalse(id4aa.equals(id4ab));
ContinuationContext context4ab = runner.getManager().getContext(id4ab);
assertEquals(2, context4ab.getLocalVars().getInt(1));
String id4b = runner.resume(id3b);
assertNotNull(id4b);
assertFalse(id4aa.equals(id4b));
assertFalse(id4ab.equals(id4b));
ContinuationContext context4b = runner.getManager().getContext(id4b);
assertEquals(2, context4b.getLocalVars().getInt(1));
String id6aa = runner.resume(id5aa);
assertNull(id6aa);
String id5b = runner.resume(id4b);
assertNotNull(id5b);
assertFalse(id5aa.equals(id5b));
ContinuationContext context5b = runner.getManager().getContext(id5b);
assertEquals(1, context5b.getLocalVars().getInt(1));
String id5ab = runner.resume(id4ab);
assertNotNull(id5ab);
assertFalse(id5aa.equals(id5ab));
assertFalse(id5b.equals(id5ab));
ContinuationContext context5ab = runner.getManager().getContext(id5ab);
assertEquals(1, context5ab.getLocalVars().getInt(1));
String id6ab = runner.resume(id5ab);
assertNull(id6ab);
String id6b = runner.resume(id5b);
assertNull(id6b);
}
}
public static class PauseInWhile extends AbstractContinuableObject
{
public void execute()
{
int count = 5;
while (count > 0)
{
pause();
count--;
}
}
}
public static class PauseInWhileInterface implements ContinuableObject, ContinuableSupportAware
{
private ContinuableSupport mSupport;
public void setContinuableSupport(ContinuableSupport support) { mSupport = support; }
public Object clone()
throws CloneNotSupportedException
{
return super.clone();
}
public void execute()
{
int count = 5;
while (count > 0)
{
mSupport.pause();
count--;
}
}
}
}
|