//$Id: NumberGuessTest.java 5335 2007-06-20 09:07:34Z gavin $ 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.NumberGuess; import org.jboss.seam.mock.SeamTest; import org.testng.annotations.Test; public class NumberGuessTest extends SeamTest { private int guess; @Test public void testNumberGuessWin() throws Exception { String id = new NonFacesRequest("/numberGuess.jspx") { @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.jspx", 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.jspx"); } }.run(); assert id2.equals(id); new NonFacesRequest("/numberGuess.jspx", 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.jspx", 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.jspx"); } }.run(); assert id2.equals(id); new NonFacesRequest("/win.jspx", 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.jspx") { @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.jspx", 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.jspx"); } }.run(); new NonFacesRequest("/numberGuess.jspx", 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.jspx", 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.jspx"); } }.run(); new NonFacesRequest("/lose.jspx", 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(); } }