class TestAngryDice(unittest.TestCase):

    def setUp(self):
        self.new_game = AngryDice()

    def tearDown(self):
        del self.new_game

    def check_possible_values(self):
        self.new_game.dice_a.currentValue = "sasquatch"
        if self.new_game.dice_a.currentValue not in self.new_game.possibleValues:
            print("Checked for current values in possible values")
            self.assertFalse(True)

    @patch('sys.stdout', new_callable=StringIO)
    def test_double_anger_output(self, mock_stdout):
        """Test the print function of the check_anger function"""
        self.new_game.dice_a.currentValue = "ANGRY"
        self.new_game.dice_b.currentValue = "ANGRY"

        angry_text = "WOW, you're ANGRY! \nTime to go back to Stage 1!\n"

        self.new_game.check_anger()
        self.assertEqual(mock_stdout.getvalue(), angry_text)
        self.assertEqual(self.new_game.currentStage, 1)

        if self.new_game.currentStage == 1:
            self.assertTrue(True)

    @patch('sys.stdout', new_callable=StringIO)
    def test_roll_parse_for_input(self, mock_stdout):
        """Give a player input and make sure the game returns the correct string"""
        roll_dice = self.new_game.roll_parse(['asdf', 'blsdf', 'ahgybiwu*', ""])
        if roll_dice == ['a', 'b', 'ab', '']:
            self.assertTrue(True)

    def test_stage_one_input_returns_stage_two(self):
        self.new_game.currentStage = 1
        self.new_game.showing = [1, 2]

    @patch('builtins.input', return_value="ab")
    def test_player_roll_output(self, input_value):
        self.new_game.dice_a.currentValue = 10
        self.new_game.dice_b.currentValue = 10
        rolled_die = self.new_game.player_roll()
        if self.new_game.showing != [10, 10]:
            self.assertTrue(True)

    def test_cheating_lock_die_stage_one(self):
        self.new_game.currentStage = 1
        self.new_game.dice_b.currentValue = "4"

        self.new_game.check_cheating('a')

        self.assertTrue(self.new_game.cheating)

    def test_cheating_lock_die_stage_two(self):
        self.new_game.currentStage = 2
        self.new_game.dice_b.currentValue = "1"

        self.new_game.check_cheating('a')

        self.assertTrue(self.new_game.cheating)

    def test_cheating_lock_die_stage_three(self):
        self.new_game.currentStage = 3
        self.new_game.dice_b.currentValue = "6"

        self.new_game.check_cheating('a')

        self.assertTrue(self.new_game.cheating)

    def test_you_rolled_prints_correct_values(self):
        self.new_game.dice_a.currentValue = "sasquatch"
        self.new_game.dice_b.currentValue = "bigfoot"
        self.new_game.currentStage = 5

    def test_cheating(self):
        self.new_game.currentStage = 1
        self.new_game.lock_value = 6
        self.new_game.check_cheating("a")
 def setUp(self):
     self.new_game = AngryDice()
 def setUp(self):
     self.new_game = AngryDice()
class TestAngryDice(unittest.TestCase):
    def setUp(self):
        self.new_game = AngryDice()

    def tearDown(self):
        del self.new_game

    def check_possible_values(self):
        self.new_game.dice_a.currentValue = "sasquatch"
        if self.new_game.dice_a.currentValue not in self.new_game.possibleValues:
            print("Checked for current values in possible values")
            self.assertFalse(True)

    @patch('sys.stdout', new_callable=StringIO)
    def test_double_anger_output(self, mock_stdout):
        """Test the print function of the check_anger function"""
        self.new_game.dice_a.currentValue = "ANGRY"
        self.new_game.dice_b.currentValue = "ANGRY"

        angry_text = "WOW, you're ANGRY! \nTime to go back to Stage 1!\n"

        self.new_game.check_anger()
        self.assertEqual(mock_stdout.getvalue(), angry_text)
        self.assertEqual(self.new_game.currentStage, 1)

        if self.new_game.currentStage == 1:
            self.assertTrue(True)

    @patch('sys.stdout', new_callable=StringIO)
    def test_roll_parse_for_input(self, mock_stdout):
        """Give a player input and make sure the game returns the correct string"""
        roll_dice = self.new_game.roll_parse(
            ['asdf', 'blsdf', 'ahgybiwu*', ""])
        if roll_dice == ['a', 'b', 'ab', '']:
            self.assertTrue(True)

    def test_stage_one_input_returns_stage_two(self):
        self.new_game.currentStage = 1
        self.new_game.showing = [1, 2]

    @patch('builtins.input', return_value="ab")
    def test_player_roll_output(self, input_value):
        self.new_game.dice_a.currentValue = 10
        self.new_game.dice_b.currentValue = 10
        rolled_die = self.new_game.player_roll()
        if self.new_game.showing != [10, 10]:
            self.assertTrue(True)

    def test_cheating_lock_die_stage_one(self):
        self.new_game.currentStage = 1
        self.new_game.dice_b.currentValue = "4"

        self.new_game.check_cheating('a')

        self.assertTrue(self.new_game.cheating)

    def test_cheating_lock_die_stage_two(self):
        self.new_game.currentStage = 2
        self.new_game.dice_b.currentValue = "1"

        self.new_game.check_cheating('a')

        self.assertTrue(self.new_game.cheating)

    def test_cheating_lock_die_stage_three(self):
        self.new_game.currentStage = 3
        self.new_game.dice_b.currentValue = "6"

        self.new_game.check_cheating('a')

        self.assertTrue(self.new_game.cheating)

    def test_you_rolled_prints_correct_values(self):
        self.new_game.dice_a.currentValue = "sasquatch"
        self.new_game.dice_b.currentValue = "bigfoot"
        self.new_game.currentStage = 5

    def test_cheating(self):
        self.new_game.currentStage = 1
        self.new_game.lock_value = 6
        self.new_game.check_cheating("a")