diff --git a/fire/formatting.py b/fire/formatting.py index 68484c27..e6ff04e2 100644 --- a/fire/formatting.py +++ b/fire/formatting.py @@ -81,12 +81,13 @@ def EllipsisMiddleTruncate(text, available_space, line_length): """Truncates text from the middle with ellipsis.""" if available_space < len(ELLIPSIS): available_space = line_length - if len(text) < available_space: + if len(text) <= available_space: return text available_string_len = available_space - len(ELLIPSIS) first_half_len = int(available_string_len / 2) # start from middle second_half_len = available_string_len - first_half_len - return text[:first_half_len] + ELLIPSIS + text[-second_half_len:] + return (text[:first_half_len] + ELLIPSIS + + (text[-second_half_len:] if second_half_len else '')) def DoubleQuote(text): diff --git a/fire/formatting_test.py b/fire/formatting_test.py index e0f6699d..a87e913b 100644 --- a/fire/formatting_test.py +++ b/fire/formatting_test.py @@ -67,6 +67,18 @@ def test_ellipsis_middle_truncate(self): text=text, available_space=7, line_length=LINE_LENGTH) self.assertEqual('10...0L', truncated_text) + def test_ellipsis_middle_truncate_ellipsis_only(self): + self.assertEqual('...', formatting.EllipsisMiddleTruncate( + 'abcdefghij', available_space=3, line_length=LINE_LENGTH)) + + def test_ellipsis_middle_truncate_exact_fit(self): + self.assertEqual('abcd', formatting.EllipsisMiddleTruncate( + 'abcd', available_space=4, line_length=LINE_LENGTH)) + + def test_ellipsis_middle_truncate_short_width(self): + self.assertEqual('...j', formatting.EllipsisMiddleTruncate( + 'abcdefghij', available_space=4, line_length=LINE_LENGTH)) + def test_ellipsis_middle_truncate_not_enough_space(self): text = '1000000000L' truncated_text = formatting.EllipsisMiddleTruncate(