From 3b02463bc1510702efb9b2bbff2a38cea6c69391 Mon Sep 17 00:00:00 2001 From: juk0de Date: Sat, 19 Aug 2023 08:30:24 +0200 Subject: [PATCH] tags: TagLine constructor now supports multiline taglines and multiple spaces --- chatmastermind/tags.py | 4 +++- tests/test_main.py | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/chatmastermind/tags.py b/chatmastermind/tags.py index bfe5fd5..bee23ee 100644 --- a/chatmastermind/tags.py +++ b/chatmastermind/tags.py @@ -102,10 +102,12 @@ class TagLine(str): def __new__(cls: Type[TagLineInst], string: str) -> TagLineInst: """ - Make sure the tagline string starts with the prefix. + Make sure the tagline string starts with the prefix. Also replace newlines + and multiple spaces with ' ', in order to support multiline TagLines. """ if not string.startswith(cls.prefix): raise TagError(f"TagLine '{string}' is missing prefix '{cls.prefix}'") + string = ' '.join(string.split()) instance = super().__new__(cls, string) return instance diff --git a/tests/test_main.py b/tests/test_main.py index 8ce06cb..25cdc37 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -256,6 +256,10 @@ class TestTagLine(CmmTestCase): tagline = TagLine('TAGS: tag1 tag2') self.assertEqual(tagline, 'TAGS: tag1 tag2') + def test_valid_tagline_with_newline(self) -> None: + tagline = TagLine('TAGS: tag1\n tag2') + self.assertEqual(tagline, 'TAGS: tag1 tag2') + def test_invalid_tagline(self) -> None: with self.assertRaises(TagError): TagLine('tag1 tag2') @@ -273,6 +277,11 @@ class TestTagLine(CmmTestCase): tags = tagline.tags() self.assertEqual(tags, {Tag('tag1'), Tag('tag2')}) + def test_tags_with_newline(self) -> None: + tagline = TagLine('TAGS: tag1\n tag2') + tags = tagline.tags() + self.assertEqual(tags, {Tag('tag1'), Tag('tag2')}) + def test_merge(self) -> None: tagline1 = TagLine('TAGS: tag1 tag2') tagline2 = TagLine('TAGS: tag2 tag3')