diff --git a/evennia/utils/tests/test_funcparser.py b/evennia/utils/tests/test_funcparser.py index ed59006cb0..33f005645e 100644 --- a/evennia/utils/tests/test_funcparser.py +++ b/evennia/utils/tests/test_funcparser.py @@ -10,11 +10,10 @@ from ast import literal_eval from unittest.mock import MagicMock, patch from django.test import TestCase, override_settings +from evennia.utils import funcparser, test_resources from parameterized import parameterized from simpleeval import simple_eval -from evennia.utils import funcparser, test_resources - def _test_callable(*args, **kwargs): kwargs.pop("funcparser", None) @@ -471,6 +470,23 @@ class TestDefaultCallables(TestCase): ) self.assertEqual(expected_them, ret) + def test_conjugate__non_existing_verb(self): + """ + Test $conj() but with a nonsense verb. It should just return the verb as-is. + + """ + string = "$You() $conj(squanch) greatly." + + mapping = {"char1": self.obj1, "char2": self.obj2} + ret = self.parser.parse( + string, caller=self.obj1, receiver=self.obj1, mapping=mapping, raise_errors=True + ) + self.assertEqual("You squanch greatly.", ret) + ret = self.parser.parse( + string, caller=self.obj1, receiver=self.obj2, mapping=mapping, raise_errors=True + ) + self.assertEqual("Char1 squanchs greatly.", ret) + def test_conjugate_missing_args(self): string = "You $conj(smile)" with self.assertRaises(funcparser.ParsingError): diff --git a/evennia/utils/verb_conjugation/conjugate.py b/evennia/utils/verb_conjugation/conjugate.py index 393347af6c..20043b4e09 100644 --- a/evennia/utils/verb_conjugation/conjugate.py +++ b/evennia/utils/verb_conjugation/conjugate.py @@ -130,7 +130,7 @@ def verb_conjugate(verb, tense="infinitive", negate=False): ind += len(verb_tenses_keys) try: return verb_tenses[verb][ind] - except IndexError: + except (IndexError, KeyError): # TODO implement simple algorithm here with +s for certain tenses? return verb @@ -257,7 +257,9 @@ def verb_tense(verb): """ infinitive = verb_infinitive(verb) - data = verb_tenses[infinitive] + data = verb_tenses.get(infinitive) + if not data: + return infinitive for tense in verb_tenses_keys: if data[verb_tenses_keys[tense]] == verb: return tense