From 13d68d4ee7a06feb74cb2ff611bc8579019e6f6b Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 5 Nov 2022 20:40:39 +0100 Subject: [PATCH] Add more unit tests for Evtable; start docs for several components --- docs/source/Components/Components-Overview.md | 5 +- docs/source/Components/EvForm.md | 3 + docs/source/Components/EvTable.md | 3 + evennia/utils/evtable.py | 30 --- evennia/utils/tests/test_evtable.py | 224 ++++++++++++++++++ 5 files changed, 234 insertions(+), 31 deletions(-) create mode 100644 docs/source/Components/EvForm.md create mode 100644 docs/source/Components/EvTable.md create mode 100644 evennia/utils/tests/test_evtable.py diff --git a/docs/source/Components/Components-Overview.md b/docs/source/Components/Components-Overview.md index 79be8908b3..0f0e93d248 100644 --- a/docs/source/Components/Components-Overview.md +++ b/docs/source/Components/Components-Overview.md @@ -47,12 +47,15 @@ Batch-Command-Processor.md Coding-Utils.md EvEditor.md +EvForm.md EvMenu.md EvMore.md +EvTable.md +FuncParser.md MonitorHandler.md TickerHandler.md Locks.md -FuncParser.md +Signals.md ``` ## Web components diff --git a/docs/source/Components/EvForm.md b/docs/source/Components/EvForm.md new file mode 100644 index 0000000000..84d369cfcc --- /dev/null +++ b/docs/source/Components/EvForm.md @@ -0,0 +1,3 @@ +# EvForm + +[Docstring in evennia/utils/evform.py](api:evennia.utils.evform) \ No newline at end of file diff --git a/docs/source/Components/EvTable.md b/docs/source/Components/EvTable.md new file mode 100644 index 0000000000..3797808e13 --- /dev/null +++ b/docs/source/Components/EvTable.md @@ -0,0 +1,3 @@ +# EvTable + +[Docstring in evennia/utils/evtable.py](api:evennia.utils.evtable) \ No newline at end of file diff --git a/evennia/utils/evtable.py b/evennia/utils/evtable.py index 2e5c1797d6..1b914c234d 100644 --- a/evennia/utils/evtable.py +++ b/evennia/utils/evtable.py @@ -1697,33 +1697,3 @@ class EvTable(object): """print table (this also balances it)""" # h = "12345678901234567890123456789012345678901234567890123456789012345678901234567890" return str(str(ANSIString("\n").join([line for line in self._generate_lines()]))) - - -def _test(): - """Test""" - table = EvTable( - "|yHeading1|n", - "|gHeading2|n", - table=[[1, 2, 3], [4, 5, 6], [7, 8, 9]], - border="cells", - align="l", - ) - table.add_column("|rThis is long data|n", "|bThis is even longer data|n") - table.add_row("This is a single row") - print(str(table)) - table.reformat(width=50) - print(str(table)) - table.reformat_column(3, width=30, align="r") - print(str(table)) - return table - - -def _test2(): - table = EvTable("|yHeading1|n", "|B|[GHeading2|n", "Heading3") - for i in range(100): - table.add_row( - "This is col 0, row %i" % i, - "|gThis is col 1, row |w%i|n|g.|n" % i, - "This is col 2, row %i" % i, - ) - return table diff --git a/evennia/utils/tests/test_evtable.py b/evennia/utils/tests/test_evtable.py new file mode 100644 index 0000000000..d5cffcefa1 --- /dev/null +++ b/evennia/utils/tests/test_evtable.py @@ -0,0 +1,224 @@ +""" +Tests for EvTable + +""" + +from evennia.utils import ansi, evtable +from evennia.utils.test_resources import EvenniaTestCase + + +class TestEvTable(EvenniaTestCase): + def _validate(self, expected, result): + """easier debug""" + expected = ansi.strip_ansi(expected).strip() + result = ansi.strip_ansi(result).strip() + + err = f"\n{'expected':-^60}\n{expected}\n{'result':-^60}\n{result}\n{'':-^60}" + self.assertEqual(expected, result, err) + + def test_base(self): + """ + Create plain table. + + """ + table = evtable.EvTable( + "|yHeading1|n", + "|gHeading2|n", + "|rHeading3|n", + table=[[1, 2, 3], [4, 5, 6], [7, 8, 9]], + border="cells", + align="l", + ) + + expected = """ ++----------+----------+----------+ +| Heading1 | Heading2 | Heading3 | ++~~~~~~~~~~+~~~~~~~~~~+~~~~~~~~~~+ +| 1 | 4 | 7 | ++----------+----------+----------+ +| 2 | 5 | 8 | ++----------+----------+----------+ +| 3 | 6 | 9 | ++----------+----------+----------+ +""" + + self._validate(expected, str(table)) + + def test_table_with_short_header(self): + """ + Don't provide header3 + + """ + table = evtable.EvTable( + "|yHeading1|n", + "|gHeading2|n", + table=[[1, 2, 3], [4, 5, 6], [7, 8, 9]], + border="cells", + align="l", + ) + expected = """ ++----------+----------+---+ +| Heading1 | Heading2 | | ++~~~~~~~~~~+~~~~~~~~~~+~~~+ +| 1 | 4 | 7 | ++----------+----------+---+ +| 2 | 5 | 8 | ++----------+----------+---+ +| 3 | 6 | 9 | ++----------+----------+---+ +""" + + self._validate(expected, str(table)) + + def test_add_column(self): + + table = evtable.EvTable( + "|yHeading1|n", + "|gHeading2|n", + "|rHeading3|n", + table=[[1, 2, 3], [4, 5, 6], [7, 8, 9]], + border="cells", + align="l", + ) + table.add_column("|rThis is long data|n", "|bThis is even longer data|n") + + expected = """ ++----------+----------+----------+--------------------------+ +| Heading1 | Heading2 | Heading3 | | ++~~~~~~~~~~+~~~~~~~~~~+~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~+ +| 1 | 4 | 7 | This is long data | ++----------+----------+----------+--------------------------+ +| 2 | 5 | 8 | This is even longer data | ++----------+----------+----------+--------------------------+ +| 3 | 6 | 9 | | ++----------+----------+----------+--------------------------+ +""" + self._validate(expected, str(table)) + + def test_add_row(self): + table = evtable.EvTable( + "|yHeading1|n", + "|gHeading2|n", + "|rHeading3|n", + table=[[1, 2, 3], [4, 5, 6], [7, 8, 9]], + border="cells", + align="l", + ) + table.add_row("This is a single row") + + expected = """ ++----------------------+----------+----------+ +| Heading1 | Heading2 | Heading3 | ++~~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~+~~~~~~~~~~+ +| 1 | 4 | 7 | ++----------------------+----------+----------+ +| 2 | 5 | 8 | ++----------------------+----------+----------+ +| 3 | 6 | 9 | ++----------------------+----------+----------+ +| This is a single row | | | ++----------------------+----------+----------+ +""" + self._validate(expected, str(table)) + + def test_add_row_and_column(self): + + table = evtable.EvTable( + "|yHeading1|n", + "|gHeading2|n", + "|rHeading3|n", + table=[[1, 2, 3], [4, 5, 6], [7, 8, 9]], + border="cells", + align="l", + ) + table.add_row("This is a single row") + table.add_column("|rThis is long data|n", "|bThis is even longer data|n") + + expected = """ ++----------------------+----------+----------+--------------------------+ +| Heading1 | Heading2 | Heading3 | | ++~~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~+~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~+ +| 1 | 4 | 7 | This is long data | ++----------------------+----------+----------+--------------------------+ +| 2 | 5 | 8 | This is even longer data | ++----------------------+----------+----------+--------------------------+ +| 3 | 6 | 9 | | ++----------------------+----------+----------+--------------------------+ +| This is a single row | | | | ++----------------------+----------+----------+--------------------------+ +""" + self._validate(expected, str(table)) + + def test_reformat(self): + + table = evtable.EvTable( + "|yHeading1|n", + "|gHeading2|n", + "|rHeading3|n", + table=[[1, 2, 3], [4, 5, 6], [7, 8, 9]], + border="cells", + align="l", + ) + + # width + table.reformat(width=50) + + expected = """ ++----------------+---------------+---------------+ +| Heading1 | Heading2 | Heading3 | ++~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~+ +| 1 | 4 | 7 | ++----------------+---------------+---------------+ +| 2 | 5 | 8 | ++----------------+---------------+---------------+ +| 3 | 6 | 9 | ++----------------+---------------+---------------+ + """ + self._validate(expected, str(table)) + + # right-aligned + + table.reformat_column(2, width=30, align="r") + + expected = """ ++---------+--------+-----------------------------+ +| Heading | Headin | Heading3 | +| 1 | g2 | | ++~~~~~~~~~+~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ +| 1 | 4 | 7 | ++---------+--------+-----------------------------+ +| 2 | 5 | 8 | ++---------+--------+-----------------------------+ +| 3 | 6 | 9 | ++---------+--------+-----------------------------+ + """ + self._validate(expected, str(table)) + + def test_multiple_rows(self): + """ + adding a lot of rows with `.add_row`. + """ + table = evtable.EvTable("|yHeading1|n", "|B|[GHeading2|n", "Heading3") + nlines = 12 + + for i in range(nlines): + table.add_row( + f"This is col 0, row {i}", + f"|gThis is col 1, row |w{i}|n|g|n", + f"This is col 2, row {i}", + ) + + expected = [ + "+-----------------------+-----------------------+-----------------------+", + "| Heading1 | Heading2 | Heading3 |", + "+~~~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~+", + ] + for i in range(nlines): + expected.append( + f"| This is col 0, row {i:<2} | This is col 1, row {i:<2} | This is col 2, row" + f" {i:<2} |" + ) + expected.append(expected[0]) + expected = "\n".join(expected) + + self._validate(expected, str(table))