diff options
-rw-r--r-- | cmd2/utils.py | 16 | ||||
-rw-r--r-- | tests/test_utils.py | 23 |
2 files changed, 39 insertions, 0 deletions
diff --git a/cmd2/utils.py b/cmd2/utils.py index c8fb4aff..3e28641d 100644 --- a/cmd2/utils.py +++ b/cmd2/utils.py @@ -5,6 +5,7 @@ import collections import glob import os import re +import shutil import subprocess import sys import threading @@ -377,6 +378,21 @@ def get_exes_in_path(starts_with: str) -> List[str]: return list(exes_set) +def center_text(msg: str, *, pad: str = ' ') -> str: + """Centers text horizontally for display within the current terminal, optionally padding both sides. + + :param msg: message to display in the center + :param pad: (optional) if provided, the first character will be used to pad both sides of the message + :return: centered message, optionally padded on both sides with pad_char + """ + term_width = shutil.get_terminal_size().columns + surrounded_msg = ' {} '.format(msg) + if not pad: + pad = ' ' + fill_char = pad[:1] + return surrounded_msg.center(term_width, fill_char) + + class StdSim(object): """ Class to simulate behavior of sys.stdout or sys.stderr. diff --git a/tests/test_utils.py b/tests/test_utils.py index b43eb10c..44421b93 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -276,3 +276,26 @@ def test_context_flag_bool(context_flag): def test_context_flag_exit_err(context_flag): with pytest.raises(ValueError): context_flag.__exit__() + + +def test_center_text_pad_none(): + msg = 'foo' + centered = cu.center_text(msg, pad=None) + expected_center = ' ' + msg + ' ' + assert expected_center in centered + letters_in_centered = set(centered) + letters_in_msg = set(msg) + assert len(letters_in_centered) == len(letters_in_msg) + 1 + +def test_center_text_pad_equals(): + msg = 'foo' + pad = '=' + centered = cu.center_text(msg, pad=pad) + expected_center = ' ' + msg + ' ' + assert expected_center in centered + assert centered.startswith(pad) + assert centered.endswith(pad) + letters_in_centered = set(centered) + letters_in_msg = set(msg) + assert len(letters_in_centered) == len(letters_in_msg) + 2 + |