//$Id: DroolsNumberGuessTest.java 6415 2007-10-07 22:27:57Z pmuir $ package org.jboss.seam.example.numberguess.test; import java.io.File; 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.Game; import org.jboss.seam.example.numberguess.Guess; import org.jboss.seam.example.numberguess.RandomNumber; import org.jboss.seam.mock.JUnitSeamTest; import org.jboss.seam.pageflow.Pageflow; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.importer.ZipImporter; 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 DroolsNumberGuessTest extends JUnitSeamTest { private int guessedValue; @Deployment(name="RenderTest") @OverProtocol("Servlet 3.0") public static Archive<?> createDeployment() { EnterpriseArchive er = ShrinkWrap.create(ZipImporter.class, "seam-drools.ear").importFrom(new File("../drools-ear/target/seam-drools.ear")) .as(EnterpriseArchive.class); WebArchive web = er.getAsType(WebArchive.class, "drools-web.war"); web.addClasses(DroolsNumberGuessTest.class); // Install org.jboss.seam.mock.MockSeamListener web.delete("/WEB-INF/web.xml"); web.addAsWebInfResource("web.xml"); return er; } @Test public void testNumberGuessWin() throws Exception { String id = new NonFacesRequest("/numberGuess.jsp") { @Override protected void renderResponse() throws Exception { Game game = (Game) getInstance(Game.class); Guess guess = (Guess) getInstance(Guess.class); assert game.getBiggest()==100; assert game.getSmallest()==1; assert guess.getValue()==null; assert game.getGuessCount()==0; assert Manager.instance().isLongRunningConversation(); assert Pageflow.instance().getProcessInstance().getRootToken() .getNode().getName().equals("displayGuess"); } }.run(); String id2 = new FacesRequest("/numberGuess.jsp", id) { @Override protected void applyRequestValues() throws Exception { Guess guess = (Guess) getInstance(Guess.class); guessedValue = getRandomNumber() > 50 ? 25 : 75; guess.setValue(guessedValue); } @Override protected void invokeApplication() throws Exception { setOutcome("guess"); //ng.guess(); } @Override protected void afterRequest() { assert !isRenderResponseBegun(); assert getViewId().equals("/numberGuess.jsp"); } }.run(); assert id2.equals(id); new NonFacesRequest("/numberGuess.jsp", id) { @Override protected void renderResponse() throws Exception { Game game = (Game) getInstance(Game.class); Guess guess = (Guess) getInstance(Guess.class); assert ( guessedValue > getRandomNumber() && game.getBiggest()==guessedValue-1 ) || ( guessedValue < getRandomNumber() && game.getSmallest()==guessedValue+1 ); assert guess.getValue().equals(guessedValue); assert game.getGuessCount()==1; assert Manager.instance().isLongRunningConversation(); assert Pageflow.instance().getProcessInstance().getRootToken() .getNode().getName().equals("displayGuess"); } }.run(); id2 = new FacesRequest("/numberGuess.jsp", id) { @Override protected void applyRequestValues() throws Exception { Guess guess = (Guess) getInstance(Guess.class); guessedValue = getRandomNumber(); guess.setValue(guessedValue); } @Override protected void invokeApplication() throws Exception { Guess guess = (Guess) getInstance(Guess.class); setOutcome("guess"); assert guess.getValue().equals(getRandomNumber()); assert Pageflow.instance().getProcessInstance().getRootToken() .getNode().getName().equals("displayGuess"); //ng.guess(); } @Override protected void afterRequest() { assert !isRenderResponseBegun(); assert getViewId().equals("/win.jsp"); } }.run(); assert id2.equals(id); new NonFacesRequest("/win.jsp", id) { @Override protected void renderResponse() throws Exception { Game game = (Game) getInstance(Game.class); Guess guess = (Guess) getInstance(Guess.class); assert guess.getValue().equals(getRandomNumber()); assert game.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.jsp") { @Override protected void renderResponse() throws Exception { Game game = (Game) getInstance(Game.class); Guess guess = (Guess) getInstance(Guess.class); assert game.getBiggest()==100; assert game.getSmallest()==1; assert guess.getValue()==null; assert game.getGuessCount()==0; assert Manager.instance().isLongRunningConversation(); } }.run(); for (int i=1; i<=9; i++) { final int count = i; new FacesRequest("/numberGuess.jsp", id) { @Override protected void applyRequestValues() throws Exception { Guess guess = (Guess) getInstance(Guess.class); guessedValue = getRandomNumber() > 50 ? 25+count : 75-count; guess.setValue(guessedValue); } @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.jsp"); } }.run(); new NonFacesRequest("/numberGuess.jsp", id) { @Override protected void renderResponse() throws Exception { Game game = (Game) getInstance(Game.class); Guess guess = (Guess) getInstance(Guess.class); assert ( guessedValue > getRandomNumber() && game.getBiggest()==guessedValue-1 ) || ( guessedValue < getRandomNumber() && game.getSmallest()==guessedValue+1 ); assert guess.getValue().equals(guessedValue); assert game.getGuessCount()==count; assert Manager.instance().isLongRunningConversation(); assert Pageflow.instance().getProcessInstance().getRootToken() .getNode().getName().equals("displayGuess"); } }.run(); } new FacesRequest("/numberGuess.jsp", id) { @Override protected void applyRequestValues() throws Exception { Guess guess = (Guess) getInstance(Guess.class); guessedValue = getRandomNumber() > 50 ? 49 : 51; guess.setValue(guessedValue); } @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.jsp"); } }.run(); new NonFacesRequest("/lose.jsp", id) { @Override protected void renderResponse() throws Exception { Guess guess = (Guess) getInstance(Guess.class); Game game = (Game) getInstance(Game.class); assert ( guessedValue > getRandomNumber() && game.getBiggest()==guessedValue-1 ) || ( guessedValue < getRandomNumber() && game.getSmallest()==guessedValue+1 ); assert guess.getValue().equals(guessedValue); assert game.getGuessCount()==10; assert !Manager.instance().isLongRunningConversation(); assert Pageflow.instance().getProcessInstance().getRootToken() .getNode().getName().equals("lose"); } }.run(); } private Integer getRandomNumber() { return (Integer) getInstance(RandomNumber.class); } }