//$Id: DroolsNumberGuessTest.java 6415 2007-10-07 22:27:57Z pmuir $ package org.jboss.seam.example.numberguess.test; import org.jboss.seam.core.Manager; import org.jboss.seam.pageflow.Pageflow; 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.SeamTest; import org.testng.annotations.Test; public class DroolsNumberGuessTest extends SeamTest { private int guessedValue; @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); } }