|
5 | 5 | import numpy as np |
6 | 6 | import pytest |
7 | 7 |
|
8 | | -from supervision.annotators.utils import ColorLookup, resolve_color_idx |
| 8 | +from supervision.annotators.utils import ColorLookup, resolve_color_idx, wrap_text |
9 | 9 | from supervision.detection.core import Detections |
10 | 10 | from test.test_utils import mock_detections |
11 | 11 |
|
@@ -108,3 +108,67 @@ def test_resolve_color_idx( |
108 | 108 | color_lookup=color_lookup, |
109 | 109 | ) |
110 | 110 | assert result == expected_result |
| 111 | + |
| 112 | + |
| 113 | +@pytest.mark.parametrize( |
| 114 | + "text, max_line_length, expected_result, exception", |
| 115 | + [ |
| 116 | + (None, None, [""], DoesNotRaise()), # text is None |
| 117 | + ("", None, [""], DoesNotRaise()), # empty string |
| 118 | + (" \t ", 3, [""], DoesNotRaise()), # whitespace-only (spaces + tab) |
| 119 | + (12345, None, ["12345"], DoesNotRaise()), # plain integer |
| 120 | + (-6789, None, ["-6789"], DoesNotRaise()), # negative integer |
| 121 | + (np.int64(1000), None, ["1000"], DoesNotRaise()), # NumPy int64 |
| 122 | + ([1, 2, 3], None, ["[1, 2, 3]"], DoesNotRaise()), # list to string |
| 123 | + ( |
| 124 | + "When you play the game of thrones, you win or you die.\nFear cuts deeper than swords.\nA mind needs books as a sword needs a whetstone.", # noqa: E501 |
| 125 | + None, |
| 126 | + [ |
| 127 | + "When you play the game of thrones, you win or you die.", |
| 128 | + "Fear cuts deeper than swords.", |
| 129 | + "A mind needs books as a sword needs a whetstone.", |
| 130 | + ], |
| 131 | + DoesNotRaise(), |
| 132 | + ), # Game-of-Thrones quotes, multiline |
| 133 | + ("\n", None, [""], DoesNotRaise()), # single newline |
| 134 | + ( |
| 135 | + "valarmorghulisvalardoharis", |
| 136 | + 6, |
| 137 | + ["valarm", "orghul", "isvala", "rdohar", "is"], |
| 138 | + DoesNotRaise(), |
| 139 | + ), # long Valyrian phrase, wrapped |
| 140 | + ( |
| 141 | + "Winter is coming\nFire and blood", |
| 142 | + 10, |
| 143 | + [ |
| 144 | + "Winter is", |
| 145 | + "coming", |
| 146 | + "Fire and", |
| 147 | + "blood", |
| 148 | + ], |
| 149 | + DoesNotRaise(), |
| 150 | + ), # mix of short/long with newline |
| 151 | + ( |
| 152 | + "What is dead may never die", |
| 153 | + 0, |
| 154 | + None, |
| 155 | + pytest.raises(ValueError), |
| 156 | + ), # width 0 - invalid |
| 157 | + ( |
| 158 | + "A Lannister always pays his debts", |
| 159 | + -1, |
| 160 | + None, |
| 161 | + pytest.raises(ValueError), |
| 162 | + ), # width -1 - invalid |
| 163 | + (None, 10, [""], DoesNotRaise()), # text None, width set |
| 164 | + ], |
| 165 | +) |
| 166 | +def test_wrap_text( |
| 167 | + text: object, |
| 168 | + max_line_length: int | None, |
| 169 | + expected_result: list[str], |
| 170 | + exception: Exception, |
| 171 | +) -> None: |
| 172 | + with exception: |
| 173 | + result = wrap_text(text=text, max_line_length=max_line_length) |
| 174 | + assert result == expected_result |
0 commit comments