mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-06-07 13:15:53 +02:00
Address Coverage
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user