def test_attack_successful(self, mock_generate_name, mock_roll_die, mock_input, mock_stdout): attacker = dungeonsanddragons.create_character(5) defender = dungeonsanddragons.create_character(5) dungeonsanddragons.attack_player(attacker, defender) expected_output = 'player1 hit player2 for 3 damage\n player2 has 2 HitPoints left\n' output = mock_stdout.getvalue() self.assertEqual(expected_output, output)
def test_hp_reduction(self, mock_generate_name, mock_roll_die, mock_input): expected_output = '' character_1 = dungeonsanddragons.create_character(5) character_2 = dungeonsanddragons.create_character(5) dungeonsanddragons.combat_round(character_1, character_2) character_1_hp = character_1['HitPoints'] == 4 character_2_hp = character_2['HitPoints'] == 3 self.assertTrue(character_1_hp and character_2_hp)
def test_killed_defender(self, mock_generate_name, mock_roll_die, mock_input, mock_stdout): attacker = dungeonsanddragons.create_character(5) defender = dungeonsanddragons.create_character(5) dungeonsanddragons.attack_player(attacker, defender) expected_output = 'player1 hit player2 for 6 damage\n player2 died\n' output = mock_stdout.getvalue() self.assertEqual(expected_output, output)
def test_attack_missed(self, mock_generate_name, mock_roll_die, mock_input, mock_stdout): attacker = dungeonsanddragons.create_character(5) defender = dungeonsanddragons.create_character(5) dungeonsanddragons.attack_player(attacker, defender) expected_output = 'player1 did not hit player2\n' output = mock_stdout.getvalue() self.assertEqual(expected_output, output)
def test_create_character_race(self, mock_input): race_list = ['', 'dragonborn', 'dwarf', 'elf', 'gnome', 'half-elf', 'halfling', 'half-orc', 'human', 'tiefling'] for i in range(1, len(race_list)): my_char = create_character(4) self.assertEqual(my_char['Race'], race_list[i])
def test_create_character_class(self, mock_input): class_list = ['', 'barbarian', 'bard', 'cleric', 'druid', 'fighter', 'monk', 'paladin', 'ranger', 'rogue', 'sorcerer', 'warlock', 'wizard'] for i in range(1, len(class_list)): my_char = create_character(4) self.assertEqual(my_char['Class'], class_list[i])
def test_create_character_list_attributes_max(self, mock_input, mock_roll): my_char = create_character(3) att_list = ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"] for i in range(0, len(att_list)): self.assertEqual(my_char[att_list[i]], 9)
def test_create_character_attributes(self, mock_input): attributes = [ "Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma" ] for u in range(0, 1000): character = create_character(1) for i in range(len(attributes)): self.assertTrue(3 <= character[attributes[i]] <= 18)
def test_create_character(self, mock_input, mock_roll_die, mock_generate_name, mock_stdout): character = dungeonsanddragons.create_character(5) expected_character = { 'name': 'player', 'class': 'barbarian', 'HitPoints': 5, 'strength': 5, 'dexterity': 5, 'constitution': 5, 'intelligence': 5, 'wisdom': 5, 'charisma': 5, 'XP': 0, 'items': '' } self.assertEqual(character, expected_character)
def test_create_character_format(self, mock_name, mock_hp_roll, mock_race, mock_class, mock_roll): syllables = 3 expected = { "Name": "Jaxeno", "Class": "monk", "Race": "elf", "HP": [8, 8], "Strength": 3, "Dexterity": 3, "Constitution": 3, "Intelligence": 3, "Wisdom": 3, "Charisma": 3, "XP": 0, "Inventory": [] } self.assertEqual(expected, create_character(syllables))
def test_character_hp(self, mock_input, mock_roll): my_char = create_character(4) self.assertEqual((my_char['HP']['Max']), 8)
def test_create_character_dictionary_length(self, mock_input): self.assertEqual(len(create_character(1)), 11)
def test_create_character_bad_argument_string_warning(self, mock_stdout): create_character("bad_name") self.assertTrue("WARNING" in mock_stdout.getvalue())
def test_create_character_class(self, mock_input): self.assertEqual(create_character(1)["Class"], "bard")
def test_create_character_no_inv(self, mock_input): my_char = create_character(4) self.assertEqual(len(my_char['Inventory']), 0)
def test_create_character_bad_argument_no_syllables(self): self.assertEqual(create_character(0), None)
def test_create_character_inventory(self, mock_input): self.assertEqual(create_character(1)["Inventory"], [])
def test_create_character_xp(self, mock_input): self.assertEqual(create_character(1)["XP"], 0)
def test_create_character_hp(self, mock_input): for i in range(0, 1000): character = create_character(1) self.assertTrue( 1 <= character["HP"] <= character_class()[character["Class"]])
def test_string_pairs(self, mock_input): # check that name, race, and class are strings for i in ['Name', 'Race', 'Class']: self.assertIsInstance((create_character(3))[i], str)
def test_create_character_no_xp(self, mock_input): my_char = create_character(4) self.assertEqual(my_char['XP'], 0)
def test_list_pairs(self, mock_input): # check that HP and inventory are lists for i in ['HP', 'Inventory']: self.assertIsInstance((create_character(3))[i], list)
def test_wrong_input(self): self.assertEqual(dungeonsanddragons.create_character('wefgfwd'), None)
def test_create_character_name(self, mock_input): self.assertEqual(len(create_character(1)["Name"]), 2)
def test_int_pairs(self, mock_input): # check that XP and stats are ints for i in ['Strength', 'Dexterity', 'Constitution', 'Intelligence', 'Wisdom', 'Charisma', 'XP']: self.assertIsInstance((create_character(3))[i], int)
def test_create_character_bad_argument_no_syllables_warning( self, mock_stdout): create_character(0) self.assertTrue("WARNING" in mock_stdout.getvalue())
def test_is_dictionary(self, mock_input): # test if returned object is a dict self.assertIsInstance(create_character(3), dict)
def test_create_character_bad_argument_string(self): self.assertEqual(create_character("bad_name"), None)