From 038c71213a32e4126f036d290f36ebcaaa8e7121 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 8 Jan 2022 16:57:18 +0100 Subject: [PATCH] Fix tag homogenzation. Resolve #2524. --- evennia/prototypes/prototypes.py | 6 +++--- evennia/prototypes/tests.py | 22 ++++++++++++++++++++++ evennia/utils/test_resources.py | 18 +++++++++++------- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/evennia/prototypes/prototypes.py b/evennia/prototypes/prototypes.py index 72ae14154a..2e83d698a2 100644 --- a/evennia/prototypes/prototypes.py +++ b/evennia/prototypes/prototypes.py @@ -139,11 +139,11 @@ def homogenize_prototype(prototype, custom_keys=None): nattr = len(attr) if nattr == 1: # we assume a None-value - homogenized_attrs.append(attr[0], None, None, "") + homogenized_attrs.append((attr[0], None, None, "")) elif nattr == 2: - homogenized_attrs.append(attr[0], attr[1], None, "") + homogenized_attrs.append((attr[0], attr[1], None, "")) elif nattr == 3: - homogenized_attrs.append(attr[0], attr[1], attr[2], "") + homogenized_attrs.append((attr[0], attr[1], attr[2], "")) else: homogenized_attrs.append(attr[:4]) diff --git a/evennia/prototypes/tests.py b/evennia/prototypes/tests.py index c64eb2c800..286d6203ed 100644 --- a/evennia/prototypes/tests.py +++ b/evennia/prototypes/tests.py @@ -939,3 +939,25 @@ class Test2474(BaseEvenniaTest): sting = spawner.spawn(self.prototypes["WEAPON"], prototype_parents=self.prototypes)[0] self.assertEqual(sting.db.magic, False) + +class TestPartialTagAttributes(BaseEvenniaTest): + """ + Make sure tags and attributes are homogenized if given as incomplete tuples. + + See https://github.com/evennia/evennia/issues/2524. + + """ + + def setUp(self): + self.prot = { + 'prototype_key': 'rock', + 'typeclass': 'evennia.objects.objects.DefaultObject', + 'key': 'a rock', + 'tags': [('quantity', 'groupable')], # missing data field + 'attrs': [('quantity', 1)], # missing category and lock fields + 'desc': 'A good way to get stoned.' + } + + def test_partial_spawn(self): + obj = spawner.spawn(self.prot) + self.assertEqual(obj[0].key, self.prot['key']) diff --git a/evennia/utils/test_resources.py b/evennia/utils/test_resources.py index a1a6d606a4..ca68b792bc 100644 --- a/evennia/utils/test_resources.py +++ b/evennia/utils/test_resources.py @@ -141,10 +141,11 @@ class EvenniaTestMixin: def restore_backups(self): flush_cache() - SESSIONS.data_out = self.backups[0] - SESSIONS.disconnect = self.backups[1] - settings.DEFAULT_HOME = self.backups[2] - settings.PROTOTYPE_MODULES = self.backups[3] + if hasattr(self, "backups"): + SESSIONS.data_out = self.backups[0] + SESSIONS.disconnect = self.backups[1] + settings.DEFAULT_HOME = self.backups[2] + settings.PROTOTYPE_MODULES = self.backups[3] def mock_sessions(self): SESSIONS.data_out = Mock() @@ -167,8 +168,10 @@ class EvenniaTestMixin: self.account.permissions.add("Developer") def teardown_accounts(self): - self.account.delete() - self.account2.delete() + if hasattr(self, "account"): + self.account.delete() + if hasattr(self, "account2"): + self.account2.delete() def create_rooms(self): self.room1 = create.create_object(self.room_typeclass, key="Room", nohome=True) @@ -218,7 +221,8 @@ class EvenniaTestMixin: self.session = session def teardown_session(self): - del SESSIONS[self.session.sessid] + if hasattr(self, "sessions"): + del SESSIONS[self.session.sessid] @patch("evennia.scripts.taskhandler.deferLater", _mock_deferlater) def setUp(self):