//$Id: NumberGuessTest.java 5335 2007-06-20 09:07:34Z gavin $
package org.jboss.seam.example.numberguess.test;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.OverProtocol;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.seam.core.Manager;
import org.jboss.seam.example.numberguess.NumberGuess;
import org.jboss.seam.mock.JUnitSeamTest;
import org.jboss.seam.pageflow.Pageflow;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class NumberGuessTest extends JUnitSeamTest {
private int guess;
@Deployment(name = "NumberGuessTest")
@OverProtocol("Servlet 3.0")
public static Archive<?> createDeployment() {
EnterpriseArchive er = Deployments.numberGuessDeployment();
WebArchive web = er.getAsType
(WebArchive.class, "numberguess-web.war");
web.addClasses(NumberGuessTest.class);
return er;
}
@Test
public void testNumberGuessWin() throws Exception {
String id = new NonFacesRequest("/numberGuess.xhtml") {
@Override
protected void renderResponse() throws Exception {
NumberGuess ng = (NumberGuess) getInstance(NumberGuess.class);
assert ng.getMaxGuesses() == 10;
assert ng.getBiggest() == 100;
assert ng.getSmallest() == 1;
assert ng.getCurrentGuess() == null;
assert ng.getGuessCount() == 0;
assert Manager.instance().isLongRunningConversation();
assert Pageflow.instance().getProcessInstance().getRootToken()
.getNode().getName().equals("displayGuess");
}
}.run();
String id2 = new FacesRequest("/numberGuess.xhtml", id) {
@Override
protected void applyRequestValues() throws Exception {
NumberGuess ng = (NumberGuess) getInstance(NumberGuess.class);
guess = ng.getRandomNumber() > 50 ? 25 : 75;
ng.setCurrentGuess(guess);
}
@Override
protected void invokeApplication() throws Exception {
setOutcome("guess");
//ng.guess();
}
@Override
protected void afterRequest() {
assert !isRenderResponseBegun();
assert getViewId().equals("/numberGuess.xhtml");
}
}.run();
assert id2.equals(id);
new NonFacesRequest("/numberGuess.xhtml", id) {
@Override
protected void renderResponse() throws Exception {
NumberGuess ng = (NumberGuess) getInstance(NumberGuess.class);
assert ng.getMaxGuesses() == 10;
assert (guess > ng.getRandomNumber() && ng.getBiggest() == guess - 1)
|| (guess < ng.getRandomNumber() && ng.getSmallest() == guess + 1);
assert !ng.isCorrectGuess();
assert !ng.isLastGuess();
assert ng.getCurrentGuess() == guess;
assert ng.getGuessCount() == 1;
assert ng.getRemainingGuesses() == 9;
assert Manager.instance().isLongRunningConversation();
assert Pageflow.instance().getProcessInstance().getRootToken()
.getNode().getName().equals("displayGuess");
}
}.run();
id2 = new FacesRequest("/numberGuess.xhtml", id) {
@Override
protected void applyRequestValues() throws Exception {
NumberGuess ng = (NumberGuess) getInstance(NumberGuess.class);
ng.setCurrentGuess(ng.getRandomNumber());
}
@Override
protected void invokeApplication() throws Exception {
setOutcome("guess");
//ng.guess();
}
@Override
protected void afterRequest() {
assert !isRenderResponseBegun();
assert getViewId().equals("/win.xhtml");
}
}.run();
assert id2.equals(id);
new NonFacesRequest("/win.xhtml", id) {
@Override
protected void renderResponse() throws Exception {
NumberGuess ng = (NumberGuess) getInstance(NumberGuess.class);
assert ng.getMaxGuesses() == 10;
assert ng.isCorrectGuess();
assert ng.getCurrentGuess() == ng.getRandomNumber();
assert ng.getGuessCount() == 2;
assert !Manager.instance().isLongRunningConversation();
assert Pageflow.instance().getProcessInstance().getRootToken()
.getNode().getName().equals("win");
}
}.run();
}
@Test
public void testNumberGuessLose() throws Exception {
String id = new NonFacesRequest("/numberGuess.xhtml") {
@Override
protected void renderResponse() throws Exception {
NumberGuess ng = (NumberGuess) getInstance(NumberGuess.class);
assert ng.getMaxGuesses() == 10;
assert ng.getBiggest() == 100;
assert ng.getSmallest() == 1;
assert ng.getCurrentGuess() == null;
assert ng.getGuessCount() == 0;
assert Manager.instance().isLongRunningConversation();
}
}.run();
for (int i = 1; i <= 9; i++) {
final int count = i;
new FacesRequest("/numberGuess.xhtml", id) {
@Override
protected void applyRequestValues() throws Exception {
NumberGuess ng = (NumberGuess) getInstance(NumberGuess.class);
guess = ng.getRandomNumber() > 50 ? 25 + count : 75 - count;
ng.setCurrentGuess(guess);
}
@Override
protected void invokeApplication() throws Exception {
setOutcome("guess");
//ng.guess();
//assert Pageflow.instance().getProcessInstance().getRootToken()
// .getNode().getName().equals("displayGuess");
}
@Override
protected void afterRequest() {
assert !isRenderResponseBegun();
assert getViewId().equals("/numberGuess.xhtml");
}
}.run();
new NonFacesRequest("/numberGuess.xhtml", id) {
@Override
protected void renderResponse() throws Exception {
NumberGuess ng = (NumberGuess) getInstance(NumberGuess.class);
assert ng.getMaxGuesses() == 10;
assert (guess > ng.getRandomNumber() && ng.getBiggest() == guess - 1)
|| (guess < ng.getRandomNumber() && ng.getSmallest() == guess + 1);
assert !ng.isCorrectGuess();
assert !ng.isLastGuess();
assert ng.getCurrentGuess() == guess;
assert ng.getGuessCount() == count;
assert ng.getRemainingGuesses() == 10 - count;
assert Manager.instance().isLongRunningConversation();
assert Pageflow.instance().getProcessInstance().getRootToken()
.getNode().getName().equals("displayGuess");
}
}.run();
}
new FacesRequest("/numberGuess.xhtml", id) {
@Override
protected void applyRequestValues() throws Exception {
NumberGuess ng = (NumberGuess) getInstance(NumberGuess.class);
guess = ng.getRandomNumber() > 50 ? 49 : 51;
ng.setCurrentGuess(guess);
}
@Override
protected void invokeApplication() throws Exception {
setOutcome("guess");
//ng.guess();
assert Pageflow.instance().getProcessInstance().getRootToken()
.getNode().getName().equals("displayGuess");
}
@Override
protected void afterRequest() {
assert !isRenderResponseBegun();
assert getViewId().equals("/lose.xhtml");
}
}.run();
new NonFacesRequest("/lose.xhtml", id) {
@Override
protected void renderResponse() throws Exception {
NumberGuess ng = (NumberGuess) getInstance(NumberGuess.class);
assert ng.getMaxGuesses() == 10;
assert (guess > ng.getRandomNumber() && ng.getBiggest() == guess - 1)
|| (guess < ng.getRandomNumber() && ng.getSmallest() == guess + 1);
assert !ng.isCorrectGuess();
assert ng.isLastGuess();
assert ng.getCurrentGuess() == guess;
assert ng.getGuessCount() == 10;
assert ng.getRemainingGuesses() == 0;
assert !Manager.instance().isLongRunningConversation();
assert Pageflow.instance().getProcessInstance().getRootToken()
.getNode().getName().equals("lose");
}
}.run();
}
}