import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;

/**
 * JUnit test class for (Week 1 Lab) version of GameDie
 * 
 * @author Sharon Tuttle
 * @version 2015-11-30
 */

public class GameDieTest
{
    // data fields
    
    private GameDie die;
    private GameDie decaDie;
    
    /**
     * this @Before method will set up our two dice
     * before each test
     */
    
    @Before
    public void setUp() throws Exception
    {
        die = new GameDie(6);
        decaDie = new GameDie(10);
    }
    
    /**
     * test method for getNumSides
     */
    
    @Test
    public void testGetNumSides()
    {
        assertEquals("6-sided die should have 6 sides",
                     6, die.getNumSides());
        
        assertEquals("10-sided die should have 10 sides",
                     10, decaDie.getNumSides());
    }
    
    /**
     * test method for getNumRolls
     */
    
    @Test
    public void testGetNumRolls()
    {
        assertEquals("brand new die has not yet been rolled",
                     0, die.getNumRolls());
        
        // roll 6-sided die a few times
        
        die.roll();
        die.roll();
        die.roll();
        
        assertEquals("thrice-rolled die has been rolled 3 times",
                     3, die.getNumRolls());
        
        assertEquals("another not-yet-rolled-die should show that",
                     0, decaDie.getNumRolls());
        
        decaDie.roll();
        
        assertEquals("once-rolled die has been rolled 1 time",
                     1, decaDie.getNumRolls());
        
        assertEquals("thrice-rolled die has been rolled 3 times",
                     3, die.getNumRolls());
        
    }
    
    /**
     * test for method roll
     * (at least a partial test -- does NOT test
     *    if it is even a little bit random...)
     */
    
    @Test
    public void testRoll()
    {
        int testRollResult;
        
        for (int i=0; i<5000; i++)
        {
            testRollResult = die.roll();
            
            assertTrue("6-sided die should roll [1, 6]",
                       (testRollResult >= 1) &&
                       (testRollResult <= 6));
            
            testRollResult = decaDie.roll();
            
            assertTrue("10-sided die should roll [1, 10]",
                         (testRollResult >= 1) &&
                         (testRollResult <= 10));
        }
        
    }
    
}