Skip to content

Commit 3b20cf3

Browse files
committed
Add tests
1 parent 8e75eb6 commit 3b20cf3

1 file changed

Lines changed: 34 additions & 0 deletions

File tree

Lib/test/test_pyrepl/test_pyrepl.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1641,6 +1641,40 @@ def test_suggestions_and_messages(self) -> None:
16411641
new_imports = sys.modules.keys() - _imported
16421642
self.assertSetEqual(new_imports, expected_imports)
16431643

1644+
def test_colorize_import_completions(self) -> None:
1645+
from _colorize import get_theme
1646+
from _pyrepl.fancycompleter import colorize_matches
1647+
from _pyrepl.completing_reader import stripcolor
1648+
1649+
theme = get_theme()
1650+
colorize = lambda names, values: colorize_matches(names, values, theme)
1651+
config = ReadlineConfig(colorize_completions=colorize)
1652+
1653+
reader = ReadlineAlikeReader(
1654+
console=FakeConsole(events=[]),
1655+
config=config,
1656+
)
1657+
1658+
# Multiple completions should be colorized (contain ANSI codes)
1659+
reader.buffer = list("from collections import d")
1660+
reader.pos = len(reader.buffer)
1661+
result = reader.get_module_completions()
1662+
self.assertIsNotNone(result)
1663+
names, action = result
1664+
self.assertTrue(len(names) > 1)
1665+
# Colorized names contain ANSI escape sequences
1666+
self.assertTrue(any(name != stripcolor(name) for name in names
1667+
if name.strip()))
1668+
1669+
# Single completion should NOT be colorized
1670+
reader.buffer = list("from collections import Order")
1671+
reader.pos = len(reader.buffer)
1672+
result = reader.get_module_completions()
1673+
self.assertIsNotNone(result)
1674+
names, action = result
1675+
self.assertEqual(len(names), 1)
1676+
self.assertEqual(names[0], stripcolor(names[0]))
1677+
16441678

16451679
# Audit hook used to check for stdlib modules import side-effects
16461680
# Defined globally to avoid adding one hook per test run (refleak)

0 commit comments

Comments
 (0)