File: test_screen.py

package info (click to toggle)
pyqonsole 0.2.0-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 448 kB
  • ctags: 647
  • sloc: python: 4,383; ansic: 111; makefile: 52; sh: 2
file content (97 lines) | stat: -rw-r--r-- 3,479 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Copyright (c) 2005-2006 LOGILAB S.A. (Paris, FRANCE).
# Copyright (c) 2005-2006 CEA Grenoble 
# http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the CECILL license, available at
# http://www.inria.fr/valorisation/logiciels/Licence.CeCILL-V2.pdf
#
"""Test pyqonsole's screen module.
"""
import unittest
from pyqonsole.screen import *
from pyqonsole.ca import *

class ScreenTC(unittest.TestCase):

    def setUp(self):
        self.screen = Screen(5, 10) # 5 lines 10 columns screen


    def test_init(self):
        screen = self.screen        
        self.failUnlessEqual(screen.getCursorX(), 0)
        self.failUnlessEqual(screen.getCursorY(), 0)

    def test_incPoint(self):
        screen = self.screen        
        point = [4 , 0]
        screen._incPoint(point)
        self.failUnlessEqual(point, [4, 1])
        screen._incPoint(point, -2)
        self.failUnlessEqual(point, [3, 9])
        screen._incPoint(point, 2)
        self.failUnlessEqual(point, [4, 1])
            
    def test_showCharacter(self):
        screen = self.screen
        image = screen._image
        screen.showCharacter(ord('a'))
        self.failUnlessEqual(screen.getCursorX(), 1)
        self.failUnlessEqual(screen.getCursorY(), 0)
        self.failUnlessEqual(image[0][0].c, u'a')
        for y in xrange(5):
            for x in xrange(10):
                if y == 0 and x == 0:
                    continue
                self.failUnlessEqual(image[y][x].c, u' ')

    def test_nextLine(self):
        screen = self.screen
        image = screen._image
        screen.nextLine()
        self.failUnlessEqual(screen.getCursorX(), 0)
        self.failUnlessEqual(screen.getCursorY(), 1)
        for y in xrange(5):
            for x in xrange(10):
                self.failUnlessEqual(image[y][x].c, u' ')
        #self.failUnlessEqual(screen._hist.hist_buffer[0], [])

    def test_getCookedImage(self):
        screen = self.screen
        screen.showCharacter(ord('a'))
        screen.nextLine()
        image, wrapped = screen.getCookedImage()
        expected = [[Ca(u'a')] + [Ca() for i in xrange(9)]]
        expected += [[Ca() for i in xrange(10)] for i in xrange(4)]
        expected[1][0].r |= RE_CURSOR # cursor location
        self.failUnlessEqual(image, expected)

        screen.showCharacter(ord('b'))
        screen.showCharacter(ord('c'))
        screen.nextLine()
        image, wrapped = screen.getCookedImage()
        expected[1][0].c = u'b'
        expected[1][0].r = 0
        expected[1][1].c = u'c'
        expected[2][0].r |= RE_CURSOR # cursor location
        self.failUnlessEqual(image, expected)

    def test_modes(self):
        SCREEN_MODES = (MODE_Origin, MODE_Wrap, MODE_Insert, MODE_Screen, MODE_Cursor, MODE_NewLine)
        # reset modes so all modes are unset
        self.screen.resetMode(MODE_Wrap) 
        self.screen.resetMode(MODE_Cursor) 
        for mode in SCREEN_MODES:
            self.screen.setMode(mode)
            self.failUnless(self.screen.getMode(mode))
            for omode in SCREEN_MODES:
                if omode == mode:
                    continue
                self.failUnless(not self.screen.getMode(omode))
            self.screen.resetMode(mode)
            for omode in SCREEN_MODES:
                self.failUnless(not self.screen.getMode(omode))
        
if __name__ == '__main__':
    unittest.main()