/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestEngineContinuations.java 3936 2008-04-26 12:05:37Z gbevin $
*/
package com.uwyn.rife.engine;
import com.meterware.httpunit.*;
import com.uwyn.rife.TestCaseServerside;
import com.uwyn.rife.engine.testelements.continuations.AllTypes;
import com.uwyn.rife.tools.StringUtils;
import java.net.InetAddress;
import junit.framework.ComparisonFailure;
public class TestEngineContinuations extends TestCaseServerside
{
public TestEngineContinuations(int siteType, String name)
{
super(siteType, name);
}
public void testNoPause()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/nopause");
response = conversation.getResponse(request);
assertEquals("", response.getText());
}
public void testSimple()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/simple");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("before simple pause", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/simple?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("after simple pause", response.getText());
}
public void testSimpleInterface()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/simple_interface");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("before simple pause", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/simple_interface?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("after simple pause", response.getText());
}
public void testNull()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/null");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("before null pause", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/null?response=after%20null%20pause&"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("after null pause", response.getText());
}
public void testNullReference()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/null_reference");
response = conversation.getResponse(request);
request = new GetMethodWebRequest("http://localhost:8181/null_reference?"+ReservedParameters.CONTID+"="+response.getText());
try
{
response = conversation.getResponse(request);
}
catch (Throwable e)
{
assertTrue(getLogSink().getInternalException() instanceof NullPointerException);
}
}
public void testNullConditional()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/null_conditional?value=thevalue");
response = conversation.getResponse(request);
String text = response.getText();
assertTrue(text.startsWith("thevalue"));
request = new GetMethodWebRequest("http://localhost:8181/null_conditional?"+ReservedParameters.CONTID+"="+text.substring(8));
response = conversation.getResponse(request);
assertEquals("thevalue", response.getText());
}
public void testConditional()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
WebForm form = null;
request = new GetMethodWebRequest("http://localhost:8181/conditional");
response = conversation.getResponse(request);
assertEquals("printing", response.getTitle());
form = response.getFormWithName("pause");
assertNotNull(form);
form.setParameter("answer", "1");
response = form.submit();
assertEquals("pauzing", response.getTitle());
form = response.getFormWithName("pause");
assertNotNull(form);
form.setParameter("answer", "1"); // will not be checked
response = form.submit();
assertEquals("pauzingprinting", response.getTitle());
form = response.getFormWithName("pause");
assertNotNull(form);
form.setParameter("answer", "0");
response = form.submit();
assertEquals("printing", response.getTitle());
form = response.getFormWithName("pause");
assertNotNull(form);
request = new GetMethodWebRequest("http://localhost:8181/conditional");
response = conversation.getResponse(request);
assertEquals("printing", response.getTitle());
form = response.getFormWithName("pause");
assertNotNull(form);
form.setParameter("stop", "1");
response = form.submit();
assertEquals("stopping", response.getTitle());
}
public void testMemberMethod()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/membermethod");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("before pause", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/membermethod?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("me value 6899", response.getText());
}
public void testPrivateMethod()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/private_method");
response = conversation.getResponse(request);
request = new GetMethodWebRequest("http://localhost:8181/private_method?"+ReservedParameters.CONTID+"="+response.getText());
response = conversation.getResponse(request);
assertEquals("1234", response.getText());
}
public void testSynchronization()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
String text = null;
String[] lines = null;
request = new GetMethodWebRequest("http://localhost:8181/synchronization");
response = conversation.getResponse(request);
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("monitor this", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/synchronization?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("monitor member", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/synchronization?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("monitor static", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/synchronization?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("done", response.getText());
}
public void testThrow()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
WebForm form = null;
request = new GetMethodWebRequest("http://localhost:8181/throw");
response = conversation.getResponse(request);
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "1");
response = form.submit();
assertEquals("do throw = true : throw message : finally message", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "1"); // will not be checked
response = form.submit();
assertEquals("do throw = true : throw message : finally message : all done", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
request = new GetMethodWebRequest("http://localhost:8181/throw");
response = conversation.getResponse(request);
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "0");
response = form.submit();
assertEquals("do throw = false : finally message", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "1"); // will not be checked
response = form.submit();
assertEquals("do throw = false : finally message : all done", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
}
public void testTryCatch()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
WebForm form = null;
request = new GetMethodWebRequest("http://localhost:8181/trycatch");
response = conversation.getResponse(request);
assertEquals("start", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "1");
response = form.submit();
assertEquals("start : throw done catch", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "1"); // will not be checked since the value of the first param is stored in a local variable in the element
response = form.submit();
assertEquals("start : throw done catch : finally done", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "0"); // will not be checked since the value of the first param is stored in a local variable in the element
response = form.submit();
assertEquals("start : throw done catch : finally done : all done", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "1"); // will not be checked since the value of the first param is stored in a local variable in the element
response = form.submit();
assertEquals("start", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "0");
response = form.submit();
assertEquals("start : throw not done", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "1"); // will not be checked since the value of the first param is stored in a local variable in the element
response = form.submit();
assertEquals("start : throw not done : finally done", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "0"); // will not be checked since the value of the first param is stored in a local variable in the element
response = form.submit();
assertEquals("start : throw not done : finally done : all done", response.getTitle());
form = response.getFormWithName("action");
assertNotNull(form);
form.setParameter("throw", "1"); // will not be checked since the value of the first param is stored in a local variable in the element
response = form.submit();
}
public void testFinally()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
String text;
String[] lines;
try
{
request = new GetMethodWebRequest("http://localhost:8181/finally");
response = conversation.getResponse(request);
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("start", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/finally?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("try", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/finally?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("catch", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/finally?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("finally", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/finally?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("after finally", response.getText());
}
catch (ComparisonFailure e)
{
throw e;
}
catch (Throwable e)
{
/* leave this in, since JDK 1.4 compiles finally differently (with JSR/RET opcodes)
in that case continuations doesn't work
see http://uwyn.com/issues/browse/RIFE-114 */
getLogSink().getInternalException().printStackTrace();
}
}
public void testInstanceOf()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/instanceof");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("before instanceof pause", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/instanceof?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("after instanceof pause", response.getText());
}
public void testInnerClass()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/innerclass");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals("before pause", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/innerclass?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("InnerClass's output", response.getText());
}
public void testAllTypes()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
String text = null;
String[] lines = null;
request = new GetMethodWebRequest("http://localhost:8181/alltypes");
response = conversation.getResponse(request);
for (int i = 8; i < 40; i++)
{
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals(AllTypes.BEFORE+" while "+i, lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/alltypes?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
}
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals(AllTypes.BEFORE+" a", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/alltypes?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals(AllTypes.BEFORE+" b", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/alltypes?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
text = response.getText();
lines = StringUtils.splitToArray(text, "\n");
assertEquals(2, lines.length);
assertEquals(AllTypes.BEFORE+" c", lines[0]);
request = new GetMethodWebRequest("http://localhost:8181/alltypes?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("40,1209000,11,16,7,8,\n"+
"9223372036854775807,0,9223372036854775709,922337203685477570,8,-1,99,\n"+
"0.4,8.4,-80.4,-80.0,0.0,-1.0,\n"+
"2389.98,2407.3799996185303,-10.0,-1.0,-0.0,2397.3799996185303,\n"+
"local ok,some value 6899,\n"+
"true|false|false,K|O,54.7|9.8,82324.45|997823.23|87.8998,98|12,8|11,\n"+
"111111|444444|666666|999999,111111|444444|666666|999999,333|8888|99,333|66|99,\n"+
"zero|one|two|null,zero|one|two|null,ini|mini|moo,\n"+
"3:str 0 0|replaced|str 0 2|str 0 3||str 1 0|str 1 1|str 1 2|str 1 3||str 2 0|str 2 1|str 2 2|str 2 3,\n"+
"3:str 0 0|replaced|str 0 2|str 0 3||str 1 0|str 1 1|str 1 2|str 1 3||str 2 0|str 2 1|str 2 2|str 2 3,\n"+
"2:str 0 0|str 0 1||str 1 0|str 1 1,\n"+
"-98|97,-98|97,98|23|11,\n"+
"2:0|1|2|3|4||100|101|102|-89|104,\n"+
"2:0|1|2|3|4||100|101|102|-89|104,\n"+
"3:0|1|2||100|101|102||200|201|202,\n"+
"2,4,member ok,8111|8333,2:31|32|33|34||35|36|37|38,\n"+
"1,3,static ok,9111|9333,3:1|2|3|4||5|6|7|8||9|10|11|12,\n"+
"2,4,member ok,8111|8333,2:31|32|33|34||35|36|37|38,\n"+
"1,3,static ok,9111|9333,3:1|2|3|4||5|6|7|8||9|10|11|12,\n"+
"100,400,member ok two,8333|8111|23687,1:35|36|37|38,\n"+
"60,600,static ok two,23476|9333|9111|8334,2:9|10|11|12||1|2|3|4,\n"+
"2:3:3:0|1|2|3|4|5|6|7||10|11|12|13|14|15|16|17||20|21|22|23|24|25|26|27|||100|101|102|103|104|105|106|107||110|111|112|113|114|115|116|117||120|121|122|123|-99|null|126|127,\n"+
"2:3:3:0|1|2|3|4|5|6|7||10|11|12|13|14|15|16|17||20|21|22|23|24|25|26|27|||100|101|102|103|104|105|106|107||110|111|112|113|114|115|116|117||120|121|122|123|-99|null|126|127,\n"+
"4:1|3||5|7||11|-199||17|19,\n"+
"4:1|3||5|7||11|-199||17|19,\n"+
"me value 6899,\n"+
"2147483647,25,4,109912,118,-2147483648", response.getText());
}
public void testStepBack()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebForm form = null;
request = new GetMethodWebRequest("http://localhost:8181/stepback");
WebResponse response1 = conversation.getResponse(request);
form = response1.getFormWithName("getanswer");
assertEquals(" : true", response1.getTitle());
assertNotNull(form);
form.setCheckbox("start", true);
WebResponse response2 = form.submit();
assertEquals("0 : false", response2.getTitle());
form = response2.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "12");
WebResponse response3 = form.submit();
assertEquals("12 : true", response3.getTitle());
form = response3.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "32");
WebResponse response4 = form.submit();
assertEquals("44 : true", response4.getTitle());
form = response4.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "41");
WebResponse response5 = form.submit();
assertEquals("got a total of 85 : false", response5.getTitle());
}
public void testSubmissionForm()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebForm form = null;
request = new GetMethodWebRequest("http://localhost:8181/submission/form");
WebResponse response1 = conversation.getResponse(request);
form = response1.getFormWithName("getanswer");
assertEquals("0", response1.getTitle());
assertNotNull(form);
form.setParameter("answer", "12");
WebResponse response2 = form.submit();
assertEquals("12", response2.getTitle());
form = response2.getFormWithName("nocontinuations");
assertNotNull(form);
form.setParameter("answer", "32");
WebResponse response3a = form.submit();
assertEquals("0", response3a.getTitle());
form = response2.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "32");
WebResponse response3b = form.submit();
assertEquals("44", response3b.getTitle());
form = response3b.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "41");
WebResponse response4 = form.submit();
assertEquals("", response4.getTitle());
form = response4.getFormWithName("getanswer");
assertNull(form);
assertEquals("got a total of 85", response4.getText());
}
public void testExitForm()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebForm form = null;
request = new GetMethodWebRequest("http://localhost:8181/exit/form");
WebResponse response1 = conversation.getResponse(request);
assertEquals("0", response1.getTitle());
form = response1.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "12");
WebResponse response2 = form.submit();
assertEquals("12", response2.getTitle());
form = response2.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "32");
WebResponse response3a = form.submit();
assertEquals("44", response3a.getTitle());
form = response2.getFormWithName("nocontinuations");
assertNotNull(form);
form.setParameter("answer", "32");
WebResponse response3b = form.submit();
assertEquals("0", response3b.getTitle());
form = response3a.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "41");
WebResponse response4 = form.submit();
assertEquals("", response4.getTitle());
form = response4.getFormWithName("getanswer");
assertNull(form);
assertEquals("got a total of 85", response4.getText());
}
public void testSubmissionQuery()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebLink link = null;
String link_text = null;
request = new GetMethodWebRequest("http://localhost:8181/submission/query");
WebResponse response1 = conversation.getResponse(request);
link = response1.getLinkWith("getanswer");
assertNotNull(link);
link_text = link.getURLString()+"&answer=9";
request = new GetMethodWebRequest("http://localhost:8181"+link_text);
WebResponse response2 = conversation.getResponse(request);
assertEquals("9", response2.getTitle());
link = response2.getLinkWith("nocontinuations");
assertNotNull(link);
link_text = link.getURLString()+"&answer=14";
request = new GetMethodWebRequest("http://localhost:8181"+link_text);
WebResponse response3a = conversation.getResponse(request);
assertEquals("0", response3a.getTitle());
link = response2.getLinkWith("getanswer");
assertNotNull(link);
link_text = link.getURLString()+"&answer=14";
request = new GetMethodWebRequest("http://localhost:8181"+link_text);
WebResponse response3b = conversation.getResponse(request);
assertEquals("23", response3b.getTitle());
link = response3b.getLinkWith("getanswer");
assertNotNull(link);
link_text = link.getURLString()+"&answer=89";
request = new GetMethodWebRequest("http://localhost:8181"+link_text);
WebResponse response4 = conversation.getResponse(request);
assertEquals("", response4.getTitle());
link = response4.getLinkWith("getanswer");
assertNull(link);
assertEquals("got a total of 112", response4.getText());
}
public void testExitQuery()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebLink link = null;
String link_text = null;
request = new GetMethodWebRequest("http://localhost:8181/exit/query");
WebResponse response1 = conversation.getResponse(request);
assertEquals("0", response1.getTitle());
link = response1.getLinkWith("getanswer");
assertNotNull(link);
link_text = link.getURLString()+"&answer=9";
request = new GetMethodWebRequest("http://localhost:8181"+link_text);
WebResponse response2 = conversation.getResponse(request);
assertEquals("9", response2.getTitle());
link = response2.getLinkWith("getanswer");
assertNotNull(link);
link_text = link.getURLString()+"&answer=14";
request = new GetMethodWebRequest("http://localhost:8181"+link_text);
WebResponse response3a = conversation.getResponse(request);
assertEquals("23", response3a.getTitle());
link = response2.getLinkWith("nocontinuations");
assertNotNull(link);
link_text = link.getURLString()+"?answer=14";
request = new GetMethodWebRequest("http://localhost:8181"+link_text);
WebResponse response3b = conversation.getResponse(request);
assertEquals("0", response3b.getTitle());
link = response3a.getLinkWith("getanswer");
assertNotNull(link);
link_text = link.getURLString()+"&answer=89";
request = new GetMethodWebRequest("http://localhost:8181"+link_text);
WebResponse response4 = conversation.getResponse(request);
assertEquals("", response4.getTitle());
link = response4.getLinkWith("getanswer");
assertNull(link);
assertEquals("got a total of 112", response4.getText());
}
public void testInheritance()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebForm form = null;
WebLink link = null;
request = new GetMethodWebRequest("http://localhost:8181/inheritance");
WebResponse response1 = null;
response1 = conversation.getResponse(request);
link = response1.getLinkWith("activate child");
response1 = link.click();
form = response1.getFormWithName("getanswer");
assertEquals("0", response1.getTitle());
assertNotNull(form);
form.setParameter("answer", "12");
WebResponse response2 = form.submit();
link = response2.getLinkWith("activate child");
response2 = link.click();
assertEquals("12", response2.getTitle());
form = response2.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "32");
WebResponse response3 = form.submit();
link = response3.getLinkWith("activate child");
response3 = link.click();
assertEquals("44", response3.getTitle());
form = response3.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "41");
WebResponse response4 = form.submit();
link = response4.getLinkWith("activate child");
response4 = link.click();
form = response4.getFormWithName("getanswer");
assertNull(form);
assertEquals("got a total of 85", response4.getText());
}
public void testUniqueIDPerRequestNoClone()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
request = new GetMethodWebRequest("http://localhost:8181/noclone");
WebResponse response1 = conversation.getResponse(request);
WebForm form1 = response1.getFormWithName("getanswer");
assertEquals("0", response1.getTitle());
assertNotNull(form1);
String cont1 = form1.getParameterValue("contid");
assertNotNull(cont1);
form1.setParameter("answer", "12");
WebResponse response2 = form1.submit();
assertEquals("12", response2.getTitle());
WebForm form2 = response2.getFormWithName("getanswer");
assertNotNull(form2);
String cont2 = form2.getParameterValue("contid");
assertNotNull(cont2);
assertFalse(cont2.equals(cont1));
form2.setParameter("answer", "32");
WebResponse response3 = form2.submit();
assertEquals("44", response3.getTitle());
WebForm form3 = response3.getFormWithName("getanswer");
assertNotNull(form3);
String cont3 = form3.getParameterValue("contid");
assertNotNull(cont3);
assertFalse(cont3.equals(cont1));
assertFalse(cont3.equals(cont2));
form3.setParameter("answer", "41");
// check if previous continuation contexts makes the logic
// start from scratch again
WebResponse response4 = form1.submit();
assertEquals("0", response4.getTitle());
WebForm form4 = response4.getFormWithName("getanswer");
assertNotNull(form4);
String cont4 = form4.getParameterValue("contid");
assertNotNull(cont4);
WebResponse response5 = form2.submit();
assertEquals("0", response5.getTitle());
WebForm form5 = response5.getFormWithName("getanswer");
assertNotNull(form5);
String cont5 = form5.getParameterValue("contid");
assertNotNull(cont5);
// each should have a unique id
assertFalse(cont4.equals(cont1));
assertFalse(cont4.equals(cont2));
assertFalse(cont4.equals(cont3));
assertFalse(cont4.equals(cont5));
assertFalse(cont5.equals(cont1));
assertFalse(cont5.equals(cont2));
assertFalse(cont5.equals(cont3));
assertFalse(cont5.equals(cont4));
// perform the last step in the calculation
WebResponse response6 = form3.submit();
WebForm form6 = response6.getFormWithName("getanswer");
assertNull(form6);
assertEquals("got a total of 85", response6.getText());
}
public void testUniqueIDPerRequestClone()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
request = new GetMethodWebRequest("http://localhost:8181/clone");
WebResponse response1 = conversation.getResponse(request);
WebForm form1 = response1.getFormWithName("getanswer");
assertEquals("0", response1.getTitle());
assertNotNull(form1);
String cont1 = form1.getParameterValue("contid");
assertNotNull(cont1);
form1.setParameter("answer", "12");
WebResponse response2 = form1.submit();
assertEquals("12", response2.getTitle());
WebForm form2 = response2.getFormWithName("getanswer");
assertNotNull(form2);
String cont2 = form2.getParameterValue("contid");
assertNotNull(cont2);
assertFalse(cont2.equals(cont1));
form2.setParameter("answer", "32");
WebResponse response3 = form2.submit();
assertEquals("44", response3.getTitle());
WebForm form3 = response3.getFormWithName("getanswer");
assertNotNull(form3);
String cont3 = form3.getParameterValue("contid");
assertNotNull(cont3);
assertFalse(cont3.equals(cont1));
assertFalse(cont3.equals(cont2));
form3.setParameter("answer", "41");
// check if previous continuation contexts have been preserved
// and new ones cloned
WebResponse response4 = form1.submit();
assertEquals("12", response4.getTitle());
WebForm form4 = response4.getFormWithName("getanswer");
assertNotNull(form4);
String cont4 = form4.getParameterValue("contid");
assertNotNull(cont4);
WebResponse response5 = form2.submit();
assertEquals("44", response5.getTitle());
WebForm form5 = response5.getFormWithName("getanswer");
assertNotNull(form5);
String cont5 = form5.getParameterValue("contid");
assertNotNull(cont5);
// each should have a unique id
assertFalse(cont4.equals(cont1));
assertFalse(cont4.equals(cont2));
assertFalse(cont4.equals(cont3));
assertFalse(cont4.equals(cont5));
assertFalse(cont5.equals(cont1));
assertFalse(cont5.equals(cont2));
assertFalse(cont5.equals(cont3));
assertFalse(cont5.equals(cont4));
// perform the last step in the calculation
WebResponse response6 = form3.submit();
WebForm form6 = response6.getFormWithName("getanswer");
assertNull(form6);
assertEquals("got a total of 85", response6.getText());
}
public void testEmbedding()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
WebForm form = null;
String hostname = InetAddress.getByName("127.0.0.1").getHostName();
String embedded = "Just some text 127.0.0.1:"+hostname+":.EMBEDDING_EMBEDDED:";
request = new GetMethodWebRequest("http://localhost:8181/embedding");
response = conversation.getResponse(request);
assertEquals(response.getTitle(), embedded);
form = response.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "12");
response = form.submit();
assertEquals(response.getTitle(), embedded);
form = response.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "32");
response = form.submit();
assertEquals(response.getTitle(), embedded);
form = response.getFormWithName("getanswer");
assertNotNull(form);
form.setParameter("answer", "41");
response = form.submit();
assertEquals(response.getTitle(), "");
form = response.getFormWithName("getanswer");
assertNull(form);
assertEquals("got a total of 85", response.getText());
}
public void testNumberguess()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
WebForm form = null;
int low_bound = 0;
int high_bound = 100;
int last_guess = 50;
int tries = 0;
request = new GetMethodWebRequest("http://localhost:8181/numberguess");
response = conversation.getResponse(request);
do
{
form = response.getFormWithName("perform_guess");
assertNotNull(form);
form.setParameter("guess", String.valueOf(last_guess));
response = form.submit();
tries++;
String text = response.getText();
if (text.indexOf("lower") != -1)
{
high_bound = last_guess;
last_guess = low_bound+(last_guess-low_bound)/2;
}
else if (text.indexOf("higher") != -1)
{
if (last_guess == low_bound &&
low_bound == high_bound - 1)
{
last_guess = high_bound;
}
else
{
low_bound = last_guess;
last_guess = last_guess+(high_bound-last_guess)/2;
}
}
}
while (response.getTitle().equals("Perform a guess"));
String text = response.getText();
assertTrue(text.indexOf("the answer was "+last_guess) != -1);
assertTrue(text.indexOf("guessed it in "+tries+" tries") != -1);
}
public void testCallNoAnswer()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/no_answer");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(4, lines.length);
assertEquals("before simple call", lines[0]);
assertEquals("in exit", lines[2]);
assertEquals("", lines[3]);
request = new GetMethodWebRequest("http://localhost:8181/no_answer?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("after simple call", response.getText());
}
public void testSimpleCall()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/simple_call");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(4, lines.length);
assertEquals("before simple call", lines[0]);
assertEquals("in exit", lines[2]);
assertEquals("after simple call", lines[3]);
request = new GetMethodWebRequest("http://localhost:8181/simple_call?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("after simple call", response.getText());
}
public void testInheritanceCall()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
WebLink link = null;
request = new GetMethodWebRequest("http://localhost:8181/inheritance_call?input1=value1");
response = conversation.getResponse(request);
link = response.getLinkWith("submission");
response = link.click();
link = response.getLinkWith("yes");
assertEquals("received yes"+"This is the child value1", link.click().getText());
link = response.getLinkWith("no");
assertEquals("received no"+"This is the child value1", link.click().getText());
}
public void testChainedCall()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/chained_call1");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(7, lines.length);
assertEquals("before chained call 1", lines[0]);
assertEquals("before chained call 2", lines[2]);
assertEquals("before chained call 3", lines[4]);
assertEquals("", lines[6]);
request = new GetMethodWebRequest("http://localhost:8181/chained_call3?"+ReservedParameters.CONTID+"="+lines[5]);
response = conversation.getResponse(request);
assertEquals("after chained call 3\n"+
"after chained call 2\n"+
"after chained call 1\n", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/chained_call2?"+ReservedParameters.CONTID+"="+lines[3]);
response = conversation.getResponse(request);
assertEquals("after chained call 2\n"+
"after chained call 1\n", response.getText());
request = new GetMethodWebRequest("http://localhost:8181/chained_call1?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("after chained call 1\n", response.getText());
}
public void testCallAnswer()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/call_answer");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(6, lines.length);
assertEquals("before call", lines[0]);
assertEquals("the data:somevalue", lines[2]);
assertEquals("before answer", lines[3]);
assertEquals("the exit's answer", lines[4]);
assertEquals("after call", lines[5]);
request = new GetMethodWebRequest("http://localhost:8181/call_answer?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
assertEquals("after call", response.getText());
}
public void testCallSubmission()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
WebLink link = null;
request = new GetMethodWebRequest("http://localhost:8181/call_submission?input1=value1");
response = conversation.getResponse(request);
link = response.getLinkWith("submission");
response = link.click();
link = response.getLinkWith("yes");
assertEquals("received yes"+
"value1", link.click().getText());
link = response.getLinkWith("no");
assertEquals("received no"+
"value1", link.click().getText());
}
public void testCallSubmissionArrival()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
WebLink link = null;
request = new GetMethodWebRequest("http://localhost:8181/?input1=value2");
response = conversation.getResponse(request);
link = response.getLinkWith("submission");
response = link.click();
link = response.getLinkWith("yes");
assertEquals("received yes"+
"value2", link.click().getText());
link = response.getLinkWith("no");
assertEquals("received no"+
"value2", link.click().getText());
}
public void testCallSubmissionNoPause()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
WebLink link = null;
request = new GetMethodWebRequest("http://localhost:8181/call_submission/nopause?input1=value1");
response = conversation.getResponse(request);
link = response.getLinkWith("submission");
response = link.click();
link = response.getLinkWith("yes");
assertEquals("received yes"+
"value1", link.click().getText());
link = response.getLinkWith("no");
assertEquals("received no"+
"value1", link.click().getText());
}
public void testAnswerWithoutCall()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/answer_without_call");
response = conversation.getResponse(request);
assertEquals("the first value"+
"2rda-2rdd-2rdc-2rdb", response.getText());
}
public void testCallAnswerGlobalvar()
throws Exception
{
setupSite("site/continuations.xml");
WebConversation conversation = new WebConversation();
WebRequest request = null;
WebResponse response = null;
request = new GetMethodWebRequest("http://localhost:8181/call_answer_globalvar");
response = conversation.getResponse(request);
String text = response.getText();
String[] lines = StringUtils.splitToArray(text, "\n");
assertEquals(7, lines.length);
assertEquals("before call", lines[0]);
assertEquals("the data:beforecall", lines[2]);
assertEquals("before answer", lines[3]);
assertEquals("the exit's answer", lines[4]);
assertEquals("the data:beforecall,beforeanswer", lines[5]);
assertEquals("after call", lines[6]);
request = new GetMethodWebRequest("http://localhost:8181/call_answer_globalvar?"+ReservedParameters.CONTID+"="+lines[1]);
response = conversation.getResponse(request);
// output values aren't part of the state of a continuation, they belong to the response of one particular request
assertEquals("the data:null\nafter call", response.getText());
}
}