Debian patch that removes test_vterm.py is attached.
Vincent, could you please include this patch in new Debian package version? Regards, Dejan
diff -uNr urwid-1.2.1.orig/urwid/tests/test_vterm.py urwid-1.2.1/urwid/tests/test_vterm.py --- urwid-1.2.1.orig/urwid/tests/test_vterm.py 2014-04-04 15:55:01.000000000 +0000 +++ urwid-1.2.1/urwid/tests/test_vterm.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,334 +0,0 @@ -# Urwid terminal emulation widget unit tests -# Copyright (C) 2010 aszlig -# Copyright (C) 2011 Ian Ward -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# Urwid web site: http://excess.org/urwid/ - -import os -import sys -import unittest - -from itertools import dropwhile - -from urwid import vterm -from urwid import signals -from urwid.compat import B - - -class DummyCommand(object): - QUITSTRING = B('|||quit|||') - - def __init__(self): - self.reader, self.writer = os.pipe() - - def __call__(self): - # reset - stdout = getattr(sys.stdout, 'buffer', sys.stdout) - stdout.write(B('\x1bc')) - - while True: - data = os.read(self.reader, 1024) - if self.QUITSTRING == data: - break - stdout.write(data) - stdout.flush() - - def write(self, data): - os.write(self.writer, data) - - def quit(self): - self.write(self.QUITSTRING) - - -class TermTest(unittest.TestCase): - def setUp(self): - self.command = DummyCommand() - - self.term = vterm.Terminal(self.command) - self.resize(80, 24) - - def tearDown(self): - self.command.quit() - - def connect_signal(self, signal): - self._sig_response = None - - def _set_signal_response(widget, *args, **kwargs): - self._sig_response = (args, kwargs) - self._set_signal_response = _set_signal_response - - signals.connect_signal(self.term, signal, self._set_signal_response) - - def expect_signal(self, *args, **kwargs): - self.assertEqual(self._sig_response, (args, kwargs)) - - def disconnect_signal(self, signal): - signals.disconnect_signal(self.term, signal, self._set_signal_response) - - def caught_beep(self, obj): - self.beeped = True - - def resize(self, width, height, soft=False): - self.termsize = (width, height) - if not soft: - self.term.render(self.termsize, focus=False) - - def write(self, data): - data = B(data) - self.command.write(data.replace(B('\e'), B('\x1b'))) - - def flush(self): - self.write(chr(0x7f)) - - def read(self, raw=False): - self.term.wait_and_feed() - rendered = self.term.render(self.termsize, focus=False) - if raw: - is_empty = lambda c: c == (None, None, B(' ')) - content = list(rendered.content()) - lines = [list(dropwhile(is_empty, reversed(line))) - for line in content] - return [list(reversed(line)) for line in lines if len(line)] - else: - content = rendered.text - lines = [line.rstrip() for line in content] - return B('\n').join(lines).rstrip() - - def expect(self, what, desc=None, raw=False): - if not isinstance(what, list): - what = B(what) - got = self.read(raw=raw) - if desc is None: - desc = '' - else: - desc += '\n' - desc += 'Expected:\n%r\nGot:\n%r' % (what, got) - self.assertEqual(got, what, desc) - - def test_simplestring(self): - self.write('hello world') - self.expect('hello world') - - def test_linefeed(self): - self.write('hello\x0aworld') - self.expect('hello\nworld') - - def test_linefeed2(self): - self.write('aa\b\b\eDbb') - self.expect('aa\nbb') - - def test_carriage_return(self): - self.write('hello\x0dworld') - self.expect('world') - - def test_insertlines(self): - self.write('\e[0;0flast\e[0;0f\e[10L\e[0;0ffirst\nsecond\n\e[11D') - self.expect('first\nsecond\n\n\n\n\n\n\n\n\nlast') - - def test_deletelines(self): - self.write('1\n2\n3\n4\e[2;1f\e[2M') - self.expect('1\n4') - - def test_movement(self): - self.write('\e[10;20H11\e[10;0f\e[20C\e[K') - self.expect('\n' * 9 + ' ' * 19 + '1') - self.write('\e[A\e[B\e[C\e[D\b\e[K') - self.expect('') - self.write('\e[50A2') - self.expect(' ' * 19 + '2') - self.write('\b\e[K\e[50B3') - self.expect('\n' * 23 + ' ' * 19 + '3') - self.write('\b\e[K' + '\eM' * 30 + '\e[100C4') - self.expect(' ' * 79 + '4') - self.write('\e[100D\e[K5') - self.expect('5') - - def edgewall(self): - edgewall = '1-\e[1;%(x)df-2\e[%(y)d;1f3-\e[%(y)d;%(x)df-4\x0d' - self.write(edgewall % {'x': self.termsize[0] - 1, - 'y': self.termsize[1] - 1}) - - def test_horizontal_resize(self): - self.resize(80, 24) - self.edgewall() - self.expect('1-' + ' ' * 76 + '-2' + '\n' * 22 - + '3-' + ' ' * 76 + '-4') - self.resize(78, 24, soft=True) - self.flush() - self.expect('1-' + '\n' * 22 + '3-') - self.resize(80, 24, soft=True) - self.flush() - self.expect('1-' + '\n' * 22 + '3-') - - def test_vertical_resize(self): - self.resize(80, 24) - self.edgewall() - self.expect('1-' + ' ' * 76 + '-2' + '\n' * 22 - + '3-' + ' ' * 76 + '-4') - for y in xrange(23, 1, -1): - self.resize(80, y, soft=True) - self.write('\e[%df\e[J3-\e[%d;%df-4' % (y, y, 79)) - desc = "try to rescale to 80x%d." % y - self.expect('\n' * (y - 2) + '3-' + ' ' * 76 + '-4', desc) - self.resize(80, 24, soft=True) - self.flush() - self.expect('1-' + ' ' * 76 + '-2' + '\n' * 22 - + '3-' + ' ' * 76 + '-4') - - def write_movements(self, arg): - fmt = 'XXX\n\e[faaa\e[Bccc\e[Addd\e[Bfff\e[Cbbb\e[A\e[Deee' - self.write(fmt.replace('\e[', '\e['+arg)) - - def test_defargs(self): - self.write_movements('') - self.expect('aaa ddd eee\n ccc fff bbb') - - def test_nullargs(self): - self.write_movements('0') - self.expect('aaa ddd eee\n ccc fff bbb') - - def test_erase_line(self): - self.write('1234567890\e[5D\e[K\n1234567890\e[5D\e[1K\naaaaaaaaaaaaaaa\e[2Ka') - self.expect('12345\n 7890\n a') - - def test_erase_display(self): - self.write('1234567890\e[5D\e[Ja') - self.expect('12345a') - self.write('98765\e[8D\e[1Jx') - self.expect(' x5a98765') - - def test_scrolling_region_simple(self): - self.write('\e[10;20r\e[10f1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\e[faa') - self.expect('aa' + '\n' * 9 + '2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12') - - def test_scrolling_region_reverse(self): - self.write('\e[2J\e[1;2r\e[5Baaa\r\eM\eM\eMbbb\nXXX') - self.expect('\n\nbbb\nXXX\n\naaa') - - def test_scrolling_region_move(self): - self.write('\e[10;20r\e[2J\e[10Bfoo\rbar\rblah\rmooh\r\e[10Aone\r\eM\eMtwo\r\eM\eMthree\r\eM\eMa') - self.expect('ahree\n\n\n\n\n\n\n\n\n\nmooh') - - def test_scrolling_twice(self): - self.write('\e[?6h\e[10;20r\e[2;5rtest') - self.expect('\ntest') - - def test_cursor_scrolling_region(self): - self.write('\e[?6h\e[10;20r\e[10f1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\e[faa') - self.expect('\n' * 9 + 'aa\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12') - - def test_relative_region_jump(self): - self.write('\e[21H---\e[10;20r\e[?6h\e[18Htest') - self.expect('\n' * 19 + 'test\n---') - - def test_set_multiple_modes(self): - self.write('\e[?6;5htest') - self.expect('test') - self.assertTrue(self.term.term_modes.constrain_scrolling) - self.assertTrue(self.term.term_modes.reverse_video) - self.write('\e[?6;5l') - self.expect('test') - self.assertFalse(self.term.term_modes.constrain_scrolling) - self.assertFalse(self.term.term_modes.reverse_video) - - def test_wrap_simple(self): - self.write('\e[?7h\e[1;%dHtt' % self.term.width) - self.expect(' ' * (self.term.width - 1) + 't\nt') - - def test_wrap_backspace_tab(self): - self.write('\e[?7h\e[1;%dHt\b\b\t\ta' % self.term.width) - self.expect(' ' * (self.term.width - 1) + 'a') - - def test_cursor_visibility(self): - self.write('\e[?25linvisible') - self.expect('invisible') - self.assertEqual(self.term.term.cursor, None) - self.write('\rvisible\e[?25h\e[K') - self.expect('visible') - self.assertNotEqual(self.term.term.cursor, None) - - def test_get_utf8_len(self): - length = self.term.term.get_utf8_len(int("11110000", 2)) - self.assertEqual(length, 3) - length = self.term.term.get_utf8_len(int("11000000", 2)) - self.assertEqual(length, 1) - length = self.term.term.get_utf8_len(int("11111101", 2)) - self.assertEqual(length, 5) - - def test_encoding_unicode(self): - vterm.util._target_encoding = 'utf-8' - self.write('\e%G\xe2\x80\x94') - self.expect('\xe2\x80\x94') - - def test_encoding_unicode_ascii(self): - vterm.util._target_encoding = 'ascii' - self.write('\e%G\xe2\x80\x94') - self.expect('?') - - def test_encoding_wrong_unicode(self): - vterm.util._target_encoding = 'utf-8' - self.write('\e%G\xc0\x99') - self.expect('') - - def test_encoding_vt100_graphics(self): - vterm.util._target_encoding = 'ascii' - self.write('\e)0\e(0\x0fg\x0eg\e)Bn\e)0g\e)B\e(B\x0fn') - self.expect([[ - (None, '0', B('g')), (None, '0', B('g')), - (None, None, B('n')), (None, '0', B('g')), - (None, None, B('n')) - ]], raw=True) - - def test_ibmpc_mapping(self): - vterm.util._target_encoding = 'ascii' - - self.write('\e[11m\x18\e[10m\x18') - self.expect([[(None, 'U', B('\x18'))]], raw=True) - - self.write('\ec\e)U\x0e\x18\x0f\e[3h\x18\e[3l\x18') - self.expect([[(None, None, B('\x18'))]], raw=True) - - self.write('\ec\e[11m\xdb\x18\e[10m\xdb') - self.expect([[ - (None, 'U', B('\xdb')), (None, 'U', B('\x18')), - (None, None, B('\xdb')) - ]], raw=True) - - def test_set_title(self): - self._the_title = None - - def _change_title(widget, title): - self._the_title = title - - self.connect_signal('title') - self.write('\e]666parsed right?\e\\te\e]0;test title\007st1') - self.expect('test1') - self.expect_signal(B('test title')) - self.write('\e]3;stupid title\e\\\e[0G\e[2Ktest2') - self.expect('test2') - self.expect_signal(B('stupid title')) - self.disconnect_signal('title') - - def test_set_leds(self): - self.connect_signal('leds') - self.write('\e[0qtest1') - self.expect('test1') - self.expect_signal('clear') - self.write('\e[3q\e[H\e[Ktest2') - self.expect('test2') - self.expect_signal('caps_lock') - self.disconnect_signal('leds')