Address Coverage

This commit is contained in:
Matthew DeMartino
2021-05-23 16:18:48 -04:00
parent 0c24268118
commit f6baaba7ba
3 changed files with 30 additions and 13 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ class Executable(ABC):
@abstractmethod @abstractmethod
def execute(self, subj, obj=None): def execute(self, subj, obj=None):
return Event(self, subj, obj) """Execute the given action"""
class Action(Executable): class Action(Executable):
+6 -5
View File
@@ -18,17 +18,14 @@ class Encounter:
def allies(self, agent): def allies(self, agent):
"""Who sides with the given agent in an encounter?""" """Who sides with the given agent in an encounter?"""
if agent in self.group_a: if agent in self.group_a:
return list(set(self.group_a) - set(agent)) return list(set(self.group_a) - set([agent]))
else: else:
return list(set(self.group_b) - set(agent)) return list(set(self.group_b) - set([agent]))
def reset(self): def reset(self):
self.events = [] self.events = []
self.long_rest() self.long_rest()
def rating(self):
raise NotImplementedError() # Deadly for Python :/
def simulate(self): def simulate(self):
"""Who will win?""" """Who will win?"""
@@ -48,6 +45,10 @@ class Encounter:
return self.events # Should never get here -- self.is_encounter_over() will end it return self.events # Should never get here -- self.is_encounter_over() will end it
def rating(self):
"""Encounter Rating"""
raise NotImplementedError()
def is_encounter_over(self): def is_encounter_over(self):
"""If all members of one party are at HP <= 0, it's over""" """If all members of one party are at HP <= 0, it's over"""
return ( return (
+23 -7
View File
@@ -15,8 +15,8 @@ from dungeonsheets.dice import roll
class TestEncounter(TestCase): class TestEncounter(TestCase):
"""Tests for features and feature-related activities.""" """Tests for features and feature-related activities."""
def test_simple_rat_fight(self): def setUp(self):
"""A fight against a giant rat"""
char = SimpleRanger() char = SimpleRanger()
class StravajiaxenAttack(Attack): class StravajiaxenAttack(Attack):
@@ -24,8 +24,7 @@ class TestEncounter(TestCase):
# creating a player character and classes # creating a player character and classes
def __init__(self, subj, obj): def __init__(self, subj, obj):
self.subj = subj super(StravajiaxenAttack, self).__init__(subj, obj)
self.obj = obj
def execute(self): def execute(self):
result = roll(20) + self.subj.dexterity.modifier + self.subj.proficiency_bonus result = roll(20) + self.subj.dexterity.modifier + self.subj.proficiency_bonus
@@ -42,8 +41,7 @@ class TestEncounter(TestCase):
class GiantRatAttack(Attack): class GiantRatAttack(Attack):
def __init__(self, subj, obj): def __init__(self, subj, obj):
self.subj = subj super(GiantRatAttack, self).__init__(subj, obj)
self.obj = obj
def execute(self): def execute(self):
result = roll(20) + 4 result = roll(20) + 4
@@ -58,8 +56,26 @@ class TestEncounter(TestCase):
enemy = GiantRat() enemy = GiantRat()
enemy.name = "Nameless Rat" # I don't want things to be personal... enemy.name = "Nameless Rat" # I don't want things to be personal...
enemy.default_actions.append(GiantRatAttack) enemy.default_actions.append(GiantRatAttack)
self.default_player = char
self.default_enemy = enemy
battle = Encounter([char], [enemy]) def test_encounter_rating(self):
battle = Encounter([self.default_player], [self.default_enemy])
self.assertRaises(NotImplementedError, battle.rating)
def test_opponents(self):
battle = Encounter([self.default_player], [self.default_enemy])
self.assertEqual([self.default_enemy], battle.opponents(self.default_player))
self.assertEqual([self.default_player], battle.opponents(self.default_enemy))
def test_allies(self):
battle = Encounter([self.default_player], [self.default_enemy])
self.assertEqual(0, len(battle.allies(self.default_player)))
self.assertEqual(0, len(battle.allies(self.default_enemy)))
def test_simple_rat_fight(self):
"""A fight against a giant rat"""
battle = Encounter([self.default_player], [self.default_enemy])
battle.reset() battle.reset()
results = battle.simulate() results = battle.simulate()
for event in results: for event in results: