/**
 * Generated by Agitar build: Agitator Version 1.0.4.000225 (Build date: Mar 05, 2007) [1.0.4.000225]
 * JDK Version: 1.5.0_09
 *
 * Generated on Mar 20, 2007 6:43:14 PM
 * Time to generate: 00:25.117 seconds
 *
 */

package kevin.lawrence.bowling;

import com.agitar.lib.junit.AgitarTestCase;

public class FrameAgitarTest extends AgitarTestCase {
    static Class TARGET_CLASS = Frame.class;
    
    public void testConstructor() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), true);
        assertEquals("frame.getCumulativeScore()", 0, frame.getCumulativeScore());
        assertFalse("frame.isStrike()", frame.isStrike());
        assertTrue("frame.lastFrame", ((Boolean) getPrivateField(frame, "lastFrame")).booleanValue());
    }
    
    public void testAddBall() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(9);
        frame.addBall(0);
        assertEquals("frame.balls[1]", 0, ((Integer[]) getPrivateField(frame, "balls"))[1].intValue());
        assertFalse("frame.isStrike()", frame.isStrike());
    }
    
    public void testAddBall1() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(new Frame(null, true), false), true), false);
        frame.addBall(10);
        frame.addBall(9);
        assertEquals("frame.balls[1]", 9, ((Integer[]) getPrivateField(frame, "balls"))[1].intValue());
        assertTrue("frame.isStrike()", frame.isStrike());
    }
    
    public void testAddBall2() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(2);
        frame.addBall(8);
        assertEquals("frame.balls[1]", 8, ((Integer[]) getPrivateField(frame, "balls"))[1].intValue());
        assertFalse("frame.isStrike()", frame.isStrike());
    }
    
    public void testAddBall3() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(0);
        frame.addBall(1);
        assertEquals("frame.balls[1]", 1, ((Integer[]) getPrivateField(frame, "balls"))[1].intValue());
        assertFalse("frame.isStrike()", frame.isStrike());
    }
    
    public void testAddBall4() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(9);
        assertEquals("frame.balls[0]", 9, ((Integer[]) getPrivateField(frame, "balls"))[0].intValue());
        assertFalse("frame.isStrike()", frame.isStrike());
    }
    
    public void testAddBall5() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(new Frame(null, true), false), true), false);
        frame.addBall(10);
        frame.addBall(10);
        assertEquals("frame.balls[1]", 10, ((Integer[]) getPrivateField(frame, "balls"))[1].intValue());
        assertTrue("frame.isStrike()", frame.isStrike());
    }
    
    public void testGetCumulativeScore() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(0);
        int result = frame.getCumulativeScore();
        assertEquals("result", 0, result);
    }
    
    public void testGetCumulativeScore1() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(1);
        int result = frame.getCumulativeScore();
        assertEquals("result", 1, result);
    }
    
    public void testGetCumulativeScore2() throws Throwable {
        int result = new Frame(new Frame(null, true), false).getCumulativeScore();
        assertEquals("result", 0, result);
    }
    
    public void testGetCumulativeScore3() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(0);
        frame.addBall(1);
        frame.addBall(10);
        int result = frame.getCumulativeScore();
        assertEquals("result", 11, result);
    }
    
    public void testGetCumulativeScore4() throws Throwable {
        int result = new Frame(null, true).getCumulativeScore();
        assertEquals("result", 0, result);
    }
    
    public void testGetFirstBall() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(0);
        String result = frame.getFirstBall();
        assertEquals("result", "-", result);
    }
    
    public void testGetFirstBall1() throws Throwable {
        String result = new Frame(null, true).getFirstBall();
        assertEquals("result", "", result);
    }
    
    public void testGetFirstBall2() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(9);
        String result = frame.getFirstBall();
        assertEquals("result", "9", result);
    }
    
    public void testGetFirstBall3() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(1);
        frame.addBall(1);
        String result = frame.getFirstBall();
        assertEquals("result", "1", result);
    }
    
    public void testGetFirstBall4() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(10);
        frame.addBall(1);
        String result = frame.getFirstBall();
        assertEquals("result", "X", result);
    }
    
    public void testGetScore() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(0);
        frame.addBall(1);
        frame.addBall(10);
        String result = frame.getScore();
        assertEquals("result", "11", result);
    }
    
    public void testGetScore1() throws Throwable {
        String result = new Frame(null, true).getScore();
        assertEquals("result", "", result);
    }
    
    public void testGetScore2() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(9);
        frame.addBall(0);
        frame.addBall(0);
        String result = frame.getScore();
        assertEquals("result", "9", result);
    }
    
    public void testGetScore3() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(null, true), false), false);
        frame.addBall(10);
        frame.addBall(10);
        frame.addBall(1);
        String result = frame.getScore();
        assertEquals("result", "21", result);
    }
    
    public void testGetScore4() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(null, true), false), false);
        frame.addBall(0);
        String result = frame.getScore();
        assertEquals("result", "", result);
    }
    
    public void testGetScore5() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(null, true), false), false);
        frame.addBall(10);
        frame.addBall(2);
        String result = frame.getScore();
        assertEquals("result", "", result);
    }
    
    public void testGetScore6() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(0);
        frame.addBall(1);
        String result = frame.getScore();
        assertEquals("result", "1", result);
    }
    
    public void testGetSecondBall() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(new Frame(new Frame(null, true), false), true), false), false);
        frame.addBall(9);
        frame.addBall(1);
        String result = frame.getSecondBall();
        assertEquals("result", "1", result);
    }
    
    public void testGetSecondBall1() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(null, true), false), true);
        frame.addBall(10);
        String result = frame.getSecondBall();
        assertEquals("result", "", result);
    }
    
    public void testGetSecondBall2() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(new Frame(null, true), false), false), true);
        frame.addBall(10);
        frame.addBall(10);
        String result = frame.getSecondBall();
        assertEquals("result", "10", result);
    }
    
    public void testGetSecondBall3() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(9);
        frame.addBall(0);
        String result = frame.getSecondBall();
        assertEquals("result", "-", result);
    }
    
    public void testGetSecondBall4() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(new Frame(new Frame(null, true), false), false), true), false);
        frame.addBall(10);
        String result = frame.getSecondBall();
        assertEquals("result", "", result);
    }
    
    public void testGetSecondBall5() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(9);
        String result = frame.getSecondBall();
        assertEquals("result", "", result);
    }
    
    public void testGetSecondBall6() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(null, true), false), true);
        frame.addBall(10);
        frame.addBall(0);
        String result = frame.getSecondBall();
        assertEquals("result", "-", result);
    }
    
    public void testGetSecondBall7() throws Throwable {
        String result = new Frame(null, true).getSecondBall();
        assertEquals("result", "", result);
    }
    
    public void testGetThirdBall() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(0);
        frame.addBall(1);
        frame.addBall(0);
        String result = frame.getThirdBall();
        assertEquals("result", "-", result);
    }
    
    public void testGetThirdBall1() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(0);
        frame.addBall(1);
        frame.addBall(1);
        String result = frame.getThirdBall();
        assertEquals("result", "1", result);
    }
    
    public void testGetThirdBall2() throws Throwable {
        String result = new Frame(new Frame(null, true), false).getThirdBall();
        assertEquals("result", "", result);
    }
    
    public void testIsComplete() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(null, true), false), true);
        frame.addBall(10);
        boolean result = frame.isComplete();
        assertTrue("result", result);
    }
    
    public void testIsComplete1() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(new Frame(null, true), false), false), true);
        frame.addBall(10);
        frame.addBall(2);
        frame.addBall(8);
        boolean result = frame.isComplete();
        assertTrue("result", result);
    }
    
    public void testIsComplete2() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(0);
        frame.addBall(1);
        boolean result = frame.isComplete();
        assertTrue("result", result);
    }
    
    public void testIsComplete3() throws Throwable {
        boolean result = new Frame(new Frame(null, true), false).isComplete();
        assertFalse("result", result);
    }
    
    public void testIsComplete4() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(9);
        frame.addBall(0);
        frame.addBall(0);
        boolean result = frame.isComplete();
        assertFalse("result", result);
    }
    
    public void testIsStrike() throws Throwable {
        boolean result = new Frame(new Frame(new Frame(null, true), false), true).isStrike();
        assertFalse("result", result);
    }
    
    public void testIsStrike1() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(9);
        frame.addBall(0);
        boolean result = frame.isStrike();
        assertFalse("result", result);
    }
    
    public void testIsStrike2() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(null, true), false), false);
        frame.addBall(0);
        boolean result = frame.isStrike();
        assertFalse("result", result);
    }
    
    public void testIsStrike3() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(10);
        frame.addBall(10);
        boolean result = frame.isStrike();
        assertTrue("result", result);
    }
    
    public void testNeedsMoreBalls() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(0);
        frame.addBall(1);
        boolean result = frame.needsMoreBalls();
        assertFalse("result", result);
    }
    
    public void testNeedsMoreBalls1() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(10);
        frame.addBall(10);
        boolean result = frame.needsMoreBalls();
        assertTrue("result", result);
    }
    
    public void testNeedsMoreBalls2() throws Throwable {
        boolean result = new Frame(null, true).needsMoreBalls();
        assertTrue("result", result);
    }
    
    public void testNeedsMoreBalls3() throws Throwable {
        Frame frame = new Frame(null, true);
        frame.addBall(9);
        frame.addBall(1);
        boolean result = frame.needsMoreBalls();
        assertFalse("result", result);
    }
    
    public void testNeedsMoreBalls4() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(new Frame(null, true), false), false), true);
        frame.addBall(0);
        boolean result = frame.needsMoreBalls();
        assertTrue("result", result);
    }
    
    public void testNeedsMoreBalls5() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(10);
        frame.addBall(10);
        frame.addBall(1);
        boolean result = frame.needsMoreBalls();
        assertFalse("result", result);
    }
    
    public void testAddBallThrowsArrayIndexOutOfBoundsException() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(9);
        frame.addBall(0);
        frame.addBall(0);
        try {
            frame.addBall(1);
            fail("Expected ArrayIndexOutOfBoundsException to be thrown");
        } catch (ArrayIndexOutOfBoundsException ex) {
            assertFalse("frame.isStrike()", frame.isStrike());
            assertEquals("ex.getMessage()", "3", ex.getMessage());
            assertThrownBy(Frame.class, ex);
        }
    }
    
    public void testAddBallThrowsArrayIndexOutOfBoundsException1() throws Throwable {
        Frame frame = new Frame(new Frame(null, true), false);
        frame.addBall(10);
        frame.addBall(1);
        frame.addBall(10);
        try {
            frame.addBall(10);
            fail("Expected ArrayIndexOutOfBoundsException to be thrown");
        } catch (ArrayIndexOutOfBoundsException ex) {
            assertTrue("frame.isStrike()", frame.isStrike());
            assertEquals("ex.getMessage()", "3", ex.getMessage());
            assertThrownBy(Frame.class, ex);
        }
    }
    
    public void testAddBallThrowsIllegalArgumentException() throws Throwable {
        Frame frame = new Frame(new Frame(new Frame(null, true), false), true);
        frame.addBall(2);
        try {
            frame.addBall(9);
            fail("Expected IllegalArgumentException to be thrown");
        } catch (IllegalArgumentException ex) {
            assertEquals("ex.getMessage()", "Total pin count invalid", ex.getMessage());
            assertThrownBy(Frame.class, ex);
            assertFalse("frame.isStrike()", frame.isStrike());
        }
    }
    
    public void testAddBallThrowsIllegalArgumentException1() throws Throwable {
        Frame frame = new Frame(null, true);
        try {
            frame.addBall(-1);
            fail("Expected IllegalArgumentException to be thrown");
        } catch (IllegalArgumentException ex) {
            assertEquals("ex.getMessage()", "Invalid pin count - -1", ex.getMessage());
            assertThrownBy(Frame.class, ex);
            assertFalse("frame.isStrike()", frame.isStrike());
        }
    }
    
    public void testAddBallThrowsIllegalArgumentException2() throws Throwable {
        Frame frame = new Frame(null, true);
        try {
            frame.addBall(11);
            fail("Expected IllegalArgumentException to be thrown");
        } catch (IllegalArgumentException ex) {
            assertEquals("ex.getMessage()", "Invalid pin count - 11", ex.getMessage());
            assertThrownBy(Frame.class, ex);
            assertFalse("frame.isStrike()", frame.isStrike());
        }
    }
}

