[BUG] test_placement_table_box_elements permanently mutates the shared box.ASCII singleton
- I've checked docs and closed issues for possible solutions.
- I can't find my issue in the FAQ.
Describe the bug
tests/test_table.py::test_placement_table_box_elements builds a Table with the module-level box.ASCII singleton and then rewrites that singleton in place (table.box.__dict__.update(...), tests/test_table.py line 314) without restoring it. Any test that renders with box.ASCII afterwards sees the replacement letters instead of box-drawing characters:
python -m pytest tests/test_table.py::test_placement_table_box_elements tests/test_box.py::test_get_row -p no:randomly
def test_get_row():
row = ASCII.get_row(widths=[1, 2, 3], level="row")
> assert row == "|-+--+---|"
E AssertionError: assert 'ijkjjkjjjl' == '|-+--+---|'
The suite only stays green because the natural file order happens to run test_box.py before test_table.py. Under pytest-randomly (which the test environment installs) the polluter runs first on roughly half the seeds: in a controlled comparison of 48 shuffled runs against 48 with the plugin disabled, the shuffled runs passed 52% and the natural order 100%, with hash seed, timezone, locale and allocator varied as controls that all stayed quiet.
Proposed fix
Give the table its own copy before mutating, for example box=copy.deepcopy(box.ASCII) in the Table constructed by that test, so the shared singleton stays pristine. Happy to send a PR if that direction works for you.
Platform
Reproduced on macOS (arm64), Python 3.13, pytest 9.1.1, pytest-randomly 5.0.0, at master 9d8f9a3. The failure depends only on test order, not on the platform.
Investigated with the help of Claude (Anthropic's Claude Code).
Source: Textualize/rich