Coverage for tests / utils.py: 100%

24 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-11-09 00:15 +0000

1import re 1abcdefg

2import sys 1abcdefg

3from os import getenv 1abcdefg

4 

5import pytest 1abcdefg

6from typer._completion_shared import _get_shell_name 1abcdefg

7from typer.core import HAS_RICH 1abcdefg

8 

9needs_linux = pytest.mark.skipif( 1abcdefg

10 not sys.platform.startswith("linux"), reason="Test requires Linux" 

11) 

12needs_macos = pytest.mark.skipif( 1abcdefg

13 not sys.platform.startswith("darwin"), reason="Test requires macOS" 

14) 

15needs_windows = pytest.mark.skipif( 1abcdefg

16 not sys.platform.startswith("win"), reason="Test requires Windows" 

17) 

18skip_if_windows = pytest.mark.skipif( 1abcdefg

19 sys.platform == "win32", 

20 reason="Test should not be run on Windows", 

21) 

22 

23needs_rich = pytest.mark.skipif(not HAS_RICH, reason="Test requires Rich") 1abcdefg

24 

25shell = _get_shell_name() 1abcdefg

26needs_bash = pytest.mark.skipif( 1abcdefg

27 shell is None or "bash" not in shell, reason="Test requires Bash" 

28) 

29 

30requires_completion_permission = pytest.mark.skipif( 1abcdefg

31 not getenv("_TYPER_RUN_INSTALL_COMPLETION_TESTS", False), 

32 reason="Test requires permission to run completion installation tests", 

33) 

34 

35 

36def strip_double_spaces(text: str) -> str: 1abcdefg

37 return re.sub(r" {2,}", " ", text) 1abcdefg

38 

39 

40def normalize_rich_output( 1abcdefg

41 text: str, replace_with: str = "*", squash_whitespaces: bool = True 

42) -> str: 

43 """ 

44 Replace all rich formatting characters with a simple placeholder. 

45 """ 

46 text = re.sub(r"\x1b\[[0-9;]*m", replace_with, text) 1abcdefg

47 text = re.sub(r"[\u2500-\u257F]", replace_with, text) 1abcdefg

48 text = re.sub(r"[\U0001F300-\U0001F6FF]", replace_with, text) 1abcdefg

49 text = re.sub(f"{re.escape(replace_with)}+", replace_with, text) 1abcdefg

50 if squash_whitespaces: 1abcdefg

51 text = strip_double_spaces(text) 1abcdefg

52 return text 1abcdefg