Skip to content

Commit 229d700

Browse files
committed
CharacterScroller uses TermSize object.
1 parent b5b0fe8 commit 229d700

2 files changed

Lines changed: 34 additions & 21 deletions

File tree

scrolltext/utils.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -181,28 +181,30 @@ class CharacterScroller: # pylint: disable=R0902 # disable (too-many-instance-
181181
Utility class for all character based text-scrollers.
182182
"""
183183

184-
def __init__(self, cfg, **argv):
184+
def __init__(self, cfg, term_size, **argv):
185185
"""Objects init method.
186186
:param cfg: Configuration dictionary
187187
:type: configparser.ConfigParser
188+
:param term_size: Current terminal size, number of available columns and rows
189+
:type: TermSize
188190
:param argv["section_index"]: Number of scrolltext.text section in use [1..3]
189191
:param argv["term_rows"]: Terminal height in number of rows
190192
:param argv["term_columns"]: Terminal width in number of columns
191193
:param argv["min_scroll_line"]: The minimum terminal row allowed
192194
:param argv["test"]: Only used in unittests
193195
"""
194-
self.visible_text_length = argv["term_columns"]
196+
self.term_size = term_size
197+
self.visible_text_length = self.term_size.get_cols()
198+
log.debug("visibile_text_length: %d", self.visible_text_length)
199+
self.min_scroll_line = argv["min_scroll_line"] if "min_scroll_line" in argv else 0
195200

196201
section_index = str(argv["section_index"]) if "section_index" in argv else "1"
197202
str_section = "scrolltext.text " + section_index
198203
scroll_text = cfg[str_section]["text"]
199-
scroll_line_str = cfg[str_section]["line"]
204+
self.scroll_line_str = cfg[str_section]["line"]
200205
scroll_direction = cfg[str_section].getboolean("direction")
201206

202-
self.line = get_linenum(scroll_line_str, argv["min_scroll_line"], argv["term_rows"])
203-
log.debug("screenline %d", self.line)
204-
log.debug("scrolltext length: %d", len(scroll_text))
205-
log.debug("scrolltext part: >> %s <<", scroll_text[20:100])
207+
self._resized()
206208

207209
num_blanks = argv["blanks"] if "blanks" in argv else self.visible_text_length
208210
self.blanks = num_blanks * " "
@@ -230,13 +232,23 @@ def __init__(self, cfg, **argv):
230232
def __iter__(self):
231233
return iter(self.next, None)
232234

235+
def _resized(self):
236+
self.line = get_linenum(self.scroll_line_str,
237+
self.min_scroll_line, self.term_size.get_rows())
238+
self.visible_text_length = self.term_size.get_cols()
239+
log.debug("_resized line: %d columnns: %d rows: %d text-length %d",
240+
self.line, self.term_size.get_cols(),
241+
self.term_size.get_rows(), self.visible_text_length)
242+
233243
def next(self):
234244
"""
235245
Gives the next visible text to display by the client-program.
236246
237247
:returns: A str object of visible text length
238248
:rtype: str
239249
"""
250+
if self.term_size.is_resized():
251+
self._resized()
240252
if not self.right_to_left:
241253
return self._next_left_to_right()
242254
return self._next_right_to_left()

tests/utils_tests.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,45 +29,46 @@ def test_invalid_params1(self):
2929
""""Test creation of CharacterScroller with no parameters."""
3030
with self.assertRaises(Exception):
3131
argv = {}
32-
CharacterScroller(self.cfg, **argv)
32+
CharacterScroller(self.cfg, None, **argv)
3333

3434
def test_dunno_visible_text_length_is_zero(self):
3535
""""Test with visibile window size set to 0."""
3636
cnt = 0
37+
term_size = TermSize(0, 0)
3738
self.argv["term_columns"] = 0
3839
self.argv["blanks"] = 1
39-
for text in CharacterScroller(self.cfg, **self.argv):
40+
for text in CharacterScroller(self.cfg, term_size, **self.argv):
4041
self.assertEqual("", text)
4142
cnt += 1
4243
self.assertEqual(cnt, len(self.cfg["scrolltext.text 1"]["text"]) + 2)
4344

4445
def test_scroll_character_for_character(self):
4546
""""Test with visibile window size set to 1, or character by
4647
character respectively."""
47-
self.argv["term_columns"] = 1
48+
term_size = TermSize(1, 0)
4849
self.argv["blanks"] = 0
4950
scroll_text = "Hello, world"
5051
self.cfg["scrolltext.text 1"]["text"] = scroll_text
5152
self.cfg["scrolltext.text 1"]["direction"] = "0"
5253
expected = list(self.cfg["scrolltext.text 1"]["text"])
5354
cnt = 0
54-
for text in CharacterScroller(self.cfg, **self.argv):
55+
for text in CharacterScroller(self.cfg, term_size, **self.argv):
5556
self.assertEqual(expected[cnt], text)
5657
cnt += 1
5758
self.assertEqual(cnt, len(self.cfg["scrolltext.text 1"]["text"]))
5859

5960
def test_scroll_character_for_character_with_spaces(self):
6061
""""Test with visibile window size set to 1, and a leading
6162
and trailing blank character."""
62-
self.argv["term_columns"] = 1
63+
term_size = TermSize(1, 0)
6364
self.argv["blanks"] = 1
6465
scroll_text = "Hello, world"
6566
self.cfg["scrolltext.text 1"]["text"] = scroll_text
6667
self.cfg["scrolltext.text 1"]["direction"] = "0"
6768
scroll_text2 = " " + scroll_text + " "
6869
expected = list(scroll_text2)
6970
cnt = 0
70-
for text in CharacterScroller(self.cfg, **self.argv):
71+
for text in CharacterScroller(self.cfg, term_size, **self.argv):
7172
self.assertEqual(expected[cnt], text)
7273
cnt += 1
7374
self.assertEqual(cnt, len(scroll_text) + 2)
@@ -77,12 +78,12 @@ def test_scroll_two_characters_with_spaces(self):
7778
scroll_text = "Hello, world"
7879
self.cfg["scrolltext.text 1"]["text"] = scroll_text
7980
self.cfg["scrolltext.text 1"]["direction"] = "0"
80-
self.argv["term_columns"] = 2
81+
term_size = TermSize(2, 0)
8182
self.argv["blanks"] = 1
8283
expected = [" H", "He", "el", "ll", "lo", "o,", ", ", " w", "wo", "or",
8384
"rl", "ld", "d ", " "]
8485
cnt = 0
85-
for text in CharacterScroller(self.cfg, **self.argv):
86+
for text in CharacterScroller(self.cfg, term_size, **self.argv):
8687
self.assertEqual(expected[cnt], text)
8788
cnt += 1
8889
self.assertEqual(cnt, len(scroll_text) + 2)
@@ -95,10 +96,10 @@ def test_scroll_in_broad_window_with_spaces(self):
9596
expected = [" Hello, world ", "Hello, world ", "ello, world ", "llo, world ",
9697
"lo, world ", "o, world ", ", world ", " world ", "world ",
9798
"orld ", "rld ", "ld ", "d ", " "]
98-
self.argv["term_columns"] = 80
99+
term_size = TermSize(80, 0)
99100
self.argv["blanks"] = 1
100101
cnt = 0
101-
for text in CharacterScroller(self.cfg, **self.argv):
102+
for text in CharacterScroller(self.cfg, term_size, **self.argv):
102103
self.assertEqual(expected[cnt], text)
103104
cnt += 1
104105
self.assertEqual(cnt, len(scroll_text) + 2)
@@ -109,14 +110,14 @@ def test_scroll_character_for_character_right_to_left2(self):
109110
scroll_text = "Hello, world"
110111
self.cfg["scrolltext.text 1"]["text"] = scroll_text
111112
self.cfg["scrolltext.text 1"]["direction"] = "1"
112-
self.argv["term_columns"] = 1
113+
term_size = TermSize(1, 0)
113114
self.argv["blanks"] = 0
114115
scroll_text_list = list(self.cfg["scrolltext.text 1"]["text"])
115116
scroll_text_list.reverse()
116117
scroll_text = "".join(scroll_text_list)
117118
expected = list(scroll_text)
118119
cnt = 0
119-
for text in CharacterScroller(self.cfg, **self.argv): # 1, 0, scroll_text, 1, 0):
120+
for text in CharacterScroller(self.cfg, term_size, **self.argv):
120121
try:
121122
self.assertEqual(expected[cnt], text)
122123
except IndexError:
@@ -128,14 +129,14 @@ def test_scroll_character_for_character_right_to_left(self):
128129
""""Right-to-Left text. Test with visibile window size set to 1, or character by
129130
character respectively."""
130131
self.cfg["scrolltext.text 1"]["direction"] = "1"
131-
self.argv["term_columns"] = 1
132+
term_size = TermSize(1, 0)
132133
self.argv["blanks"] = 0
133134
scroll_text = "مرحباً فيلت"
134135
self.cfg["scrolltext.text 1"]["text"] = scroll_text
135136
expected = list(scroll_text)
136137
expected.reverse()
137138
cnt = 0
138-
for text in CharacterScroller(self.cfg, **self.argv): # 1, 0, scroll_text, 1, 0):
139+
for text in CharacterScroller(self.cfg, term_size, **self.argv):
139140
try:
140141
self.assertEqual(expected[cnt], text)
141142
except IndexError:

0 commit comments

Comments
 (0)