import junit.framework.TestCase;
public class BracketGuessDivisorsTester extends TestCase {
  
  public void testPlayFirstGuessBGD() {
    BracketGuessDivisors bgd= new BracketGuessDivisors(23);
    JOptionPane.setBufferedReaderToString("23");
    JOptionPane.resetStringBuffer();
    bgd.play();
    String yourOutput= JOptionPane.getStringBufferContents();
    String oneGuess= 
      "\\s*Guess a positive integer.\\s*\\n+" +
      "\\s*You got it!\\s*\\n+" +
      "\\s*You guessed\\s+0 numbers smaller than my number\\s*\\n+" +
      "\\s*and\\s+0 numbers larger than my number.\\s*\\n+";
    assertTrue("Your output:\n" + yourOutput,
               yourOutput.matches(oneGuess));
  }
  
  public void testPlayHiGuessBGD() {
    BracketGuessDivisors bgd= new BracketGuessDivisors(23);
    JOptionPane.setBufferedReaderToString("47\n23");
    JOptionPane.resetStringBuffer();
    bgd.play();
    String yourOutput= JOptionPane.getStringBufferContents();
    String hiGuess= 
      "\\s*Guess a positive integer\\.\\s*\\n+" +
      "\\s*My number divides your guess,\\s+" +
      "leaving a remainder of\\s+1\\.\\n+" +
      "\\s*The number is in the range\\s+" +
      "\\.\\.\\s*47 \\(exclusive\\).\\s*\n" +
      "\\s*You got it!\\s*\\n+" +
      "\\s*You guessed\\s+0 numbers smaller than my number\\s*\\n+" +
      "\\s*and\\s+1 numbers larger than my number\\.\\s*\\n+";
    assertTrue("Your output:\n" + yourOutput,
               yourOutput.matches(hiGuess));
  }
  
  
  public void testPlayHiLowGuessBGD() {
    BracketGuessDivisors bgd= new BracketGuessDivisors(23);
    JOptionPane.setBufferedReaderToString("47\n8\n23");
    JOptionPane.resetStringBuffer();
    bgd.play();
    String yourOutput= JOptionPane.getStringBufferContents();
    String hiLowGuess= 
      "\\s*Guess a positive integer\\.\\n+" +
      "\\s*My number divides your guess,\\s+" +
      "leaving a remainder of 1\\.\\s*\\n+" +
      "\\s*The number is in the range \\.\\.47\\s+" +
      "\\(exclusive\\)[\\.,]\\s*\\n+" +
      "\\s*Your guess divides my number,\\s+" +
      "leaving a remainder of 7\\.\\s*\\n+" +
      "The number is in the range 8\\.\\.47 \\(exclusive\\)[\\.,]\\s*\\n+" +
      "\\s*You got it!\\n+" +
      "\\s*You guessed 1 numbers smaller than my number\\s*\\n+" +
      "\\s*and 1 numbers larger than my number\\.\\s*\\n+";
    assertTrue("Your output:\n" + yourOutput,
                 yourOutput.matches(hiLowGuess));
    
  }
  
  public static void testHiLowHiGuessBGD() {
    BracketGuessDivisors bgd= new BracketGuessDivisors(23);
    JOptionPane.setBufferedReaderToString("47\n8\n43\n23");
    JOptionPane.resetStringBuffer();
    bgd.play();
    String yourOutput= JOptionPane.getStringBufferContents();
    String hiLowHiGuess=
      "\\s*Guess a positive integer\\.\\s*\n" +
      "\\s*My number divides your guess,\\s+" +
      "\\s*leaving a remainder of 1\\.\\s*\n" +
      "\\s*The number is in the range\\s+" +
      "\\.\\.47 \\(exclusive\\)[\\.,]\\s*\\n+" +
      "\\s*Your guess divides my number,\\s+" +
      "\\s*leaving a remainder of 7\\.\\s*\n" +
      "\\s*The number is in the range " +
      "8\\.\\.47 \\(exclusive\\)[\\.,]\\s*\n" +
      "\\s*My number divides your guess, " +
      "leaving a remainder of 20\\.\\s*\n" +
      "\\s*The number is in the range " +
      "8\\.\\.43 \\(exclusive\\)[,\\.]\\s*\n" +
      "\\s*You got it!\\s*\n" +
      "\\s*You guessed 1 numbers smaller than my number\\s*\n" +
      "\\s*and 2 numbers larger than my number\\.\\s*\\n+";
    assertTrue("Your output:\n" + yourOutput,
                 yourOutput.matches(hiLowHiGuess));
  }
}
