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
|
||||
def execute(self, subj, obj=None):
|
||||
return Event(self, subj, obj)
|
||||
"""Execute the given action"""
|
||||
|
||||
|
||||
class Action(Executable):
|
||||
|
||||
@@ -18,17 +18,14 @@ class Encounter:
|
||||
def allies(self, agent):
|
||||
"""Who sides with the given agent in an encounter?"""
|
||||
if agent in self.group_a:
|
||||
return list(set(self.group_a) - set(agent))
|
||||
return list(set(self.group_a) - set([agent]))
|
||||
else:
|
||||
return list(set(self.group_b) - set(agent))
|
||||
return list(set(self.group_b) - set([agent]))
|
||||
|
||||
def reset(self):
|
||||
self.events = []
|
||||
self.long_rest()
|
||||
|
||||
def rating(self):
|
||||
raise NotImplementedError() # Deadly for Python :/
|
||||
|
||||
def simulate(self):
|
||||
"""Who will win?"""
|
||||
|
||||
@@ -48,6 +45,10 @@ class Encounter:
|
||||
|
||||
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):
|
||||
"""If all members of one party are at HP <= 0, it's over"""
|
||||
return (
|
||||
|
||||
+23
-7
@@ -15,8 +15,8 @@ from dungeonsheets.dice import roll
|
||||
class TestEncounter(TestCase):
|
||||
"""Tests for features and feature-related activities."""
|
||||
|
||||
def test_simple_rat_fight(self):
|
||||
"""A fight against a giant rat"""
|
||||
def setUp(self):
|
||||
|
||||
char = SimpleRanger()
|
||||
|
||||
class StravajiaxenAttack(Attack):
|
||||
@@ -24,8 +24,7 @@ class TestEncounter(TestCase):
|
||||
# creating a player character and classes
|
||||
|
||||
def __init__(self, subj, obj):
|
||||
self.subj = subj
|
||||
self.obj = obj
|
||||
super(StravajiaxenAttack, self).__init__(subj, obj)
|
||||
|
||||
def execute(self):
|
||||
result = roll(20) + self.subj.dexterity.modifier + self.subj.proficiency_bonus
|
||||
@@ -42,8 +41,7 @@ class TestEncounter(TestCase):
|
||||
class GiantRatAttack(Attack):
|
||||
|
||||
def __init__(self, subj, obj):
|
||||
self.subj = subj
|
||||
self.obj = obj
|
||||
super(GiantRatAttack, self).__init__(subj, obj)
|
||||
|
||||
def execute(self):
|
||||
result = roll(20) + 4
|
||||
@@ -58,8 +56,26 @@ class TestEncounter(TestCase):
|
||||
enemy = GiantRat()
|
||||
enemy.name = "Nameless Rat" # I don't want things to be personal...
|
||||
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()
|
||||
results = battle.simulate()
|
||||
for event in results:
|
||||
|
||||
Reference in New Issue
Block a user