import junit.framework.TestCase;

public class TestBowling extends TestCase {
  private Bowling b;
  public static void main(String[] args) {
    junit.textui.TestRunner.run(TestBowling.class);
  }

  public void setUp()
  {
    b = new Bowling();
  }

  public void testAllGutterBalls() {
    gameOfIdenticalRolls(0);
    assertEquals(0, b.getScore());
  }

  public void testOnePinInEachRoll() {
    gameOfIdenticalRolls(1);
    assertEquals(20, b.getScore());
  }

  public void testSpare() {
    b.roll(8);
    b.roll(2);
    b.roll(1);
    b.roll(3);
    multipleRolls(16, 0);
    assertEquals(15, b.getScore());
  }

  public void testStrike() {
    b.roll(10);
    b.roll(1);
    b.roll(3);
    multipleRolls(16, 0);
    assertEquals(18, b.getScore());
  }

  public void testPerfectGame() {
    multipleRolls(12, 10);
    assertEquals(300, b.getScore());
  }

  public void testAlternatingStrikesAndSpares() {
    for (int i = 0; i < 5; i ++) {
        b.roll(10);
        b.roll(3);
        b.roll(7);
    }
    b.roll(10);
    assertEquals(200, b.getScore());
  }

  private void multipleRolls(int numRolls, int pins) {
    for (int i = 0; i < numRolls; i++) 
      b.roll(pins);
  }

  private void gameOfIdenticalRolls(int pins) {
    multipleRolls(20, pins);
  }
}
