diff --git a/evennia/contrib/test_traits.py b/evennia/contrib/test_traits.py index 1b4aeedde2..7595243e9c 100644 --- a/evennia/contrib/test_traits.py +++ b/evennia/contrib/test_traits.py @@ -403,8 +403,8 @@ class TestTraitCounter(_TraitHandlerBase): descs={ 0: "range0", 2: "range1", - 5: "range3", - 7: "range4", + 5: "range2", + 7: "range3", } ) self.trait = self.traithandler.get("test1") @@ -424,14 +424,14 @@ class TestTraitCounter(_TraitHandlerBase): "min": 0, "max": 10, "extra_val1": "xvalue1", - "extra_val2": "xvalue2" - }, - "descs": { + "extra_val2": "xvalue2", + "descs": { 0: "range0", 2: "range1", - 5: "range3", - 7: "range4", - } + 5: "range2", + 7: "range3", + } + } ) def test_actual(self): @@ -549,19 +549,23 @@ class TestTraitCounter(_TraitHandlerBase): def test_descs(self): """Test descriptions""" + self.trait.min = -5 self.trait.mod = 0 - self.current = 0 + self.assertEqual(self._get_values(), (1, 0, 1, -5, 10)) + self.trait.current = -2 self.assertEqual(self.trait.desc(), "range0") - self.current = 1 + self.trait.current = 0 self.assertEqual(self.trait.desc(), "range0") - self.current = 3 + self.trait.current = 1 self.assertEqual(self.trait.desc(), "range1") - self.current = 5 + self.trait.current = 3 + self.assertEqual(self.trait.desc(), "range2") + self.trait.current = 5 + self.assertEqual(self.trait.desc(), "range2") + self.trait.current = 9 + self.assertEqual(self.trait.desc(), "range3") + self.trait.current = 100 self.assertEqual(self.trait.desc(), "range3") - self.current = 9 - self.assertEqual(self.trait.desc(), "range4") - self.current = 100 - self.assertEqual(self.trait.desc(), "range4") class TestTraitGauge(_TraitHandlerBase): @@ -575,7 +579,13 @@ class TestTraitGauge(_TraitHandlerBase): base=8, # max = base + mod mod=2, extra_val1="xvalue1", - extra_val2="xvalue2" + extra_val2="xvalue2", + descs={ + 0: "range0", + 2: "range1", + 5: "range2", + 7: "range3", + } ) self.trait = self.traithandler.get("test1") @@ -594,7 +604,12 @@ class TestTraitGauge(_TraitHandlerBase): "min": 0, "extra_val1": "xvalue1", "extra_val2": "xvalue2", - "descs": None + "descs": { + 0: "range0", + 2: "range1", + 5: "range2", + 7: "range3", + } } ) def test_actual(self): @@ -717,6 +732,25 @@ class TestTraitGauge(_TraitHandlerBase): self.trait.mod -= 1 self.assertEqual(self.trait.percent(), "33.3%") + def test_descs(self): + """Test descriptions""" + self.trait.min = -5 + self.assertEqual(self._get_values(), (8, 2, 10, -5, 10)) + self.trait.current = -2 + self.assertEqual(self.trait.desc(), "range0") + self.trait.current = 0 + self.assertEqual(self.trait.desc(), "range0") + self.trait.current = 1 + self.assertEqual(self.trait.desc(), "range1") + self.trait.current = 3 + self.assertEqual(self.trait.desc(), "range2") + self.trait.current = 5 + self.assertEqual(self.trait.desc(), "range2") + self.trait.current = 9 + self.assertEqual(self.trait.desc(), "range3") + self.trait.current = 100 + self.assertEqual(self.trait.desc(), "range3") + class TestNumericTraitOperators(TestCase): """Test case for numeric magic method implementations.""" diff --git a/evennia/contrib/traits.py b/evennia/contrib/traits.py index c463f856ad..b27540231d 100644 --- a/evennia/contrib/traits.py +++ b/evennia/contrib/traits.py @@ -957,7 +957,7 @@ class CounterTrait(NumericTrait): "mod": 0, "min": None, "max": None, - "descs": None: + "descs": None, } @classmethod @@ -1087,7 +1087,8 @@ class CounterTrait(NumericTrait): Retrieve descriptions of the current value, if available. This must be a mapping {upper_bound_inclusive: text}, - ordered from small to big. + ordered from small to big. Any value above the highest + upper bound will be included as being in the highest bound. rely on Python3.7+ dicts retaining ordering to let this describe the interval. @@ -1100,9 +1101,14 @@ class CounterTrait(NumericTrait): return "" value = self.actual # we rely on Python3.7+ dicts retaining ordering + highest = "" for bound, txt in descs.items(): - if bound >= value: + highest = txt + if value <= bound: return txt + # if we get here we are above the highest bound so + # we return the latest bound specified. + return highest class GaugeTrait(CounterTrait): @@ -1249,7 +1255,7 @@ class GaugeTrait(CounterTrait): del self.current -class SequenceTrait(CounterTrait) +class SequenceTrait(CounterTrait): """ A trait that stores an indexed array of strings to represent distinct values in a sequence. Adding to the trait will