~ubuntu-branches/ubuntu/raring/ipython/raring

« back to all changes in this revision

Viewing changes to IPython/frontend/qt/console/tests/test_ansi_code_processor.py

  • Committer: Package Import Robot
  • Author(s): Julian Taylor
  • Date: 2011-11-22 23:40:57 UTC
  • mfrom: (6.1.5 sid)
  • Revision ID: package-import@ubuntu.com-20111122234057-ta86ocdahnhwmnd8
Tags: 0.11-2
* upload to unstable
* add patch fix-version-checks-for-pyzmq-2.1.10.patch
* fix debianize-error-messages.patch to reraise unknown exceptions
* suggest python-zmq for ipython package
* use dh_sphinxdoc
  - bump sphinx dependency to >= 1.0.7+dfsg-1~, replace libjs-jquery
    dependency with ${sphinxdoc:Depends} and drop ipython-doc.links
* remove empty directory from ipython
* link duplicate images in ipython-doc
* remove obsolete Conflicts and Replaces

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Standard library imports
 
2
import unittest
 
3
 
 
4
# Local imports
 
5
from IPython.frontend.qt.console.ansi_code_processor import AnsiCodeProcessor
 
6
 
 
7
 
 
8
class TestAnsiCodeProcessor(unittest.TestCase):
 
9
 
 
10
    def setUp(self):
 
11
        self.processor = AnsiCodeProcessor()
 
12
 
 
13
    def test_clear(self):
 
14
        """ Do control sequences for clearing the console work?
 
15
        """
 
16
        string = '\x1b[2J\x1b[K'
 
17
        i = -1
 
18
        for i, substring in enumerate(self.processor.split_string(string)):
 
19
            if i == 0:
 
20
                self.assertEquals(len(self.processor.actions), 1)
 
21
                action = self.processor.actions[0]
 
22
                self.assertEquals(action.action, 'erase')
 
23
                self.assertEquals(action.area, 'screen')
 
24
                self.assertEquals(action.erase_to, 'all')
 
25
            elif i == 1:
 
26
                self.assertEquals(len(self.processor.actions), 1)
 
27
                action = self.processor.actions[0]
 
28
                self.assertEquals(action.action, 'erase')
 
29
                self.assertEquals(action.area, 'line')
 
30
                self.assertEquals(action.erase_to, 'end')
 
31
            else:
 
32
                self.fail('Too many substrings.')
 
33
        self.assertEquals(i, 1, 'Too few substrings.')
 
34
 
 
35
    def test_colors(self):
 
36
        """ Do basic controls sequences for colors work?
 
37
        """
 
38
        string = 'first\x1b[34mblue\x1b[0mlast'
 
39
        i = -1
 
40
        for i, substring in enumerate(self.processor.split_string(string)):
 
41
            if i == 0:
 
42
                self.assertEquals(substring, 'first')
 
43
                self.assertEquals(self.processor.foreground_color, None)
 
44
            elif i == 1:
 
45
                self.assertEquals(substring, 'blue')
 
46
                self.assertEquals(self.processor.foreground_color, 4)
 
47
            elif i == 2:
 
48
                self.assertEquals(substring, 'last')
 
49
                self.assertEquals(self.processor.foreground_color, None)
 
50
            else:
 
51
                self.fail('Too many substrings.')
 
52
        self.assertEquals(i, 2, 'Too few substrings.')
 
53
 
 
54
    def test_colors_xterm(self):
 
55
        """ Do xterm-specific control sequences for colors work?
 
56
        """
 
57
        string = '\x1b]4;20;rgb:ff/ff/ff\x1b' \
 
58
            '\x1b]4;25;rgbi:1.0/1.0/1.0\x1b'
 
59
        substrings = list(self.processor.split_string(string))
 
60
        desired = { 20 : (255, 255, 255),
 
61
                    25 : (255, 255, 255) }
 
62
        self.assertEquals(self.processor.color_map, desired)
 
63
 
 
64
        string = '\x1b[38;5;20m\x1b[48;5;25m'
 
65
        substrings = list(self.processor.split_string(string))
 
66
        self.assertEquals(self.processor.foreground_color, 20)
 
67
        self.assertEquals(self.processor.background_color, 25)
 
68
 
 
69
    def test_scroll(self):
 
70
        """ Do control sequences for scrolling the buffer work?
 
71
        """
 
72
        string = '\x1b[5S\x1b[T'
 
73
        i = -1
 
74
        for i, substring in enumerate(self.processor.split_string(string)):
 
75
            if i == 0:
 
76
                self.assertEquals(len(self.processor.actions), 1)
 
77
                action = self.processor.actions[0]
 
78
                self.assertEquals(action.action, 'scroll')
 
79
                self.assertEquals(action.dir, 'up')
 
80
                self.assertEquals(action.unit, 'line')
 
81
                self.assertEquals(action.count, 5)
 
82
            elif i == 1:
 
83
                self.assertEquals(len(self.processor.actions), 1)
 
84
                action = self.processor.actions[0]
 
85
                self.assertEquals(action.action, 'scroll')
 
86
                self.assertEquals(action.dir, 'down')
 
87
                self.assertEquals(action.unit, 'line')
 
88
                self.assertEquals(action.count, 1)
 
89
            else:
 
90
                self.fail('Too many substrings.')
 
91
        self.assertEquals(i, 1, 'Too few substrings.')
 
92
 
 
93
    def test_specials(self):
 
94
        """ Are special characters processed correctly?
 
95
        """
 
96
        string = '\f' # form feed
 
97
        self.assertEquals(list(self.processor.split_string(string)), [''])
 
98
        self.assertEquals(len(self.processor.actions), 1)
 
99
        action = self.processor.actions[0]
 
100
        self.assertEquals(action.action, 'scroll')
 
101
        self.assertEquals(action.dir, 'down')
 
102
        self.assertEquals(action.unit, 'page')
 
103
        self.assertEquals(action.count, 1)
 
104
 
 
105
 
 
106
if __name__ == '__main__':
 
107
    unittest.main()