def test_ensure_width(): screen = HistoryScreen(5, 5, history=50) screen.set_mode(mo.LNM) stream = Stream() stream.attach(screen) stream.escape["N"] = "next_page" stream.escape["P"] = "prev_page" for idx in range(len(screen) * 5): for ch in str(idx) + os.linesep: stream.feed(ch) assert screen.display == ["21 ", "22 ", "23 ", "24 ", " "] # a) shrinking the screen, expecting the lines displayed to # be truncated. screen.resize(5, 2) stream.feed(ctrl.ESC + "P") assert all(len(l) is not 2 for l in screen.history.top) assert all(len(l) is 2 for l in screen.history.bottom) assert screen.display == ["18", "19", "20", "21", "22"] # b) expading the screen, expecting the lines displayed to # be filled with whitespace characters. screen.resize(5, 10) stream.feed(ctrl.ESC + "N") assert all(len(l) is 10 for l in list(screen.history.top)[-3:]) assert all(len(l) is not 10 for l in screen.history.bottom) assert screen.display == [ "21 ", "22 ", "23 ", "24 ", " " ]
def test_ensure_width(monkeypatch): screen = HistoryScreen(5, 5, history=50) screen.set_mode(mo.LNM) monkeypatch.setattr(Stream, "escape", dict(N="next_page", P="prev_page", **Stream.escape)) stream = Stream() stream.attach(screen) for idx in range(len(screen.buffer) * 5): for ch in str(idx) + os.linesep: stream.feed(ch) assert screen.display == ["21 ", "22 ", "23 ", "24 ", " "] # a) shrinking the screen, expecting the lines displayed to # be truncated. screen.resize(5, 2) stream.feed(ctrl.ESC + "P") assert all(len(l) != 2 for l in screen.history.top) assert all(len(l) == 2 for l in screen.history.bottom) assert screen.display == ["18", "19", "20", "21", "22"] # b) expading the screen, expecting the lines displayed to # be filled with whitespace characters. screen.resize(5, 10) stream.feed(ctrl.ESC + "N") assert all(len(l) == 10 for l in list(screen.history.top)[-3:]) assert all(len(l) != 10 for l in screen.history.bottom) assert screen.display == [ "21 ", "22 ", "23 ", "24 ", " " ]
def test_draw(): screen = HistoryScreen(5, 5, history=50) screen.set_mode(mo.LNM) stream = Stream() stream.attach(screen) stream.escape["N"] = "next_page" stream.escape["P"] = "prev_page" for idx in range(len(screen) * 5): for ch in str(idx) + os.linesep: stream.feed(ch) assert screen.display == [ "21 ", "22 ", "23 ", "24 ", " " ] # a) doing a pageup and then a draw -- expecting the screen # to scroll to the bottom before drawing anything. stream.feed(ctrl.ESC + "P") stream.feed(ctrl.ESC + "P") stream.feed(ctrl.ESC + "N") stream.feed("x") assert screen.display == [ "21 ", "22 ", "23 ", "24 ", "x " ]
def test_unicode(): screen = Screen(4, 2) stream = Stream() stream.attach(screen) try: stream.feed("тест") except UnicodeDecodeError: pytest.fail("Check your code -- we do accept unicode.") assert screen.display == ["тест", " "]
def test_private_report_device_attributes(): # Some console apps (e.g. ADOM) might add ``?`` to the DA request, # even though the VT102/VT220 spec does not allow this. screen = Screen(10, 10) stream = Stream() stream.attach(screen) acc = [] screen.write_process_input = acc.append stream.feed(ctrl.CSI + "?0c") assert acc.pop() == ctrl.CSI + "?6c"
def test_ensure_width(monkeypatch): screen = HistoryScreen(5, 5, history=50) screen.set_mode(mo.LNM) monkeypatch.setattr(Stream, "escape", dict(N="next_page", P="prev_page", **Stream.escape)) stream = Stream() stream.attach(screen) for idx in range(len(screen.buffer) * 5): for ch in str(idx) + os.linesep: stream.feed(ch) assert screen.display == [ "21 ", "22 ", "23 ", "24 ", " " ] # a) shrinking the screen, expecting the lines displayed to # be truncated. screen.resize(5, 2) stream.feed(ctrl.ESC + "P") assert all(len(l) != 2 for l in screen.history.top) assert all(len(l) == 2 for l in screen.history.bottom) assert screen.display == [ "18", "19", "20", "21", "22" ] # b) expading the screen, expecting the lines displayed to # be filled with whitespace characters. screen.resize(5, 10) stream.feed(ctrl.ESC + "N") assert all(len(l) == 10 for l in list(screen.history.top)[-3:]) assert all(len(l) != 10 for l in screen.history.bottom) assert screen.display == [ "21 ", "22 ", "23 ", "24 ", " " ]
def test_ensure_width(): screen = HistoryScreen(5, 5, history=50) screen.set_mode(mo.LNM) stream = Stream() stream.attach(screen) stream.escape["N"] = "next_page" stream.escape["P"] = "prev_page" for idx in range(len(screen) * 5): for ch in str(idx) + os.linesep: stream.feed(ch) assert screen.display == [ "21 ", "22 ", "23 ", "24 ", " " ] # a) shrinking the screen, expecting the lines displayed to # be truncated. screen.resize(5, 2) stream.feed(ctrl.ESC + "P") assert all(len(l) is not 2 for l in screen.history.top) assert all(len(l) is 2 for l in screen.history.bottom) assert screen.display == [ "18", "19", "20", "21", "22" ] # b) expading the screen, expecting the lines displayed to # be filled with whitespace characters. screen.resize(5, 10) stream.feed(ctrl.ESC + "N") assert all(len(l) is 10 for l in list(screen.history.top)[-3:]) assert all(len(l) is not 10 for l in screen.history.bottom) assert screen.display == [ "21 ", "22 ", "23 ", "24 ", " " ]
def main(path): font = ImageFont.truetype("SourceCodePro-Regular.otf", size=16) with tempfile.TemporaryDirectory() as dirname, open(path, 'r') as f: j = json.load(f) screen = Screen(j['width'], j['height']) stream = Stream() stream.attach(screen) i = 0 for delay, text in j['stdout']: img = Image.new("RGBA", (1280, 960)) draw = ImageDraw.Draw(img) stream.feed(text) draw.multiline_text((0, 0), "\n".join(screen.display), font=font) img.save(os.path.join(dirname, '%04d.gif' % i)) i = i + 1 subprocess.run('gifsicle -d 10 --loopcount -O2 --output %s.gif %s/*.gif' % (path, dirname), shell=True, check=True)
def main(path): font = ImageFont.truetype("SourceCodePro-Regular.otf", size=16) with tempfile.TemporaryDirectory() as dirname, open(path, 'r') as f: j = json.load(f) screen = Screen(j['width'], j['height']) stream = Stream() stream.attach(screen) i = 0 for delay, text in j['stdout']: img = Image.new("RGBA", (1280, 960)) draw = ImageDraw.Draw(img) stream.feed(text) draw.multiline_text((0, 0), "\n".join(screen.display), font=font) img.save(os.path.join(dirname, '%04d.gif' % i)) i = i + 1 subprocess.run( 'gifsicle -d 10 --loopcount -O2 --output %s.gif %s/*.gif' % (path, dirname), shell=True, check=True)
def test_cursor_is_hidden(): screen = HistoryScreen(5, 5, history=50) stream = Stream() stream.attach(screen) stream.escape["N"] = "next_page" stream.escape["P"] = "prev_page" for idx in range(len(screen) * 5): map(stream.feed, unicode(idx) + "\n") assert not screen.cursor.hidden stream.feed(ctrl.ESC + "P") assert screen.cursor.hidden stream.feed(ctrl.ESC + "P") assert screen.cursor.hidden stream.feed(ctrl.ESC + "N") assert screen.cursor.hidden stream.feed(ctrl.ESC + "N") assert not screen.cursor.hidden
def test_cursor_is_hidden(): screen = HistoryScreen(5, 5, history=50) stream = Stream() stream.attach(screen) stream.escape["N"] = "next_page" stream.escape["P"] = "prev_page" for idx in range(len(screen.buffer) * 5): for ch in str(idx) + os.linesep: stream.feed(ch) assert not screen.cursor.hidden stream.feed(ctrl.ESC + "P") assert screen.cursor.hidden stream.feed(ctrl.ESC + "P") assert screen.cursor.hidden stream.feed(ctrl.ESC + "N") assert screen.cursor.hidden stream.feed(ctrl.ESC + "N") assert not screen.cursor.hidden
def test_cursor_is_hidden(): screen = HistoryScreen(5, 5, history=50) stream = Stream() stream.attach(screen) stream.escape["N"] = "next_page" stream.escape["P"] = "prev_page" for idx in range(len(screen) * 5): for ch in str(idx) + os.linesep: stream.feed(ch) assert not screen.cursor.hidden stream.feed(ctrl.ESC + "P") assert screen.cursor.hidden stream.feed(ctrl.ESC + "P") assert screen.cursor.hidden stream.feed(ctrl.ESC + "N") assert screen.cursor.hidden stream.feed(ctrl.ESC + "N") assert not screen.cursor.hidden
def test_draw(): screen = HistoryScreen(5, 5, history=50) screen.set_mode(mo.LNM) stream = Stream() stream.attach(screen) stream.escape["N"] = "next_page" stream.escape["P"] = "prev_page" for idx in range(len(screen.buffer) * 5): for ch in str(idx) + os.linesep: stream.feed(ch) assert screen.display == ["21 ", "22 ", "23 ", "24 ", " "] # a) doing a pageup and then a draw -- expecting the screen # to scroll to the bottom before drawing anything. stream.feed(ctrl.ESC + "P") stream.feed(ctrl.ESC + "P") stream.feed(ctrl.ESC + "N") stream.feed("x") assert screen.display == ["21 ", "22 ", "23 ", "24 ", "x "]