OLD | NEW |
| (Empty) |
1 # -*- test-case-name: twisted.conch.test.test_text -*- | |
2 # Copyright (c) 2001-2004 Twisted Matrix Laboratories. | |
3 # See LICENSE for details. | |
4 | |
5 from twisted.trial import unittest | |
6 | |
7 from twisted.conch.insults import helper, text | |
8 | |
9 A = text.attributes | |
10 | |
11 class Serialization(unittest.TestCase): | |
12 def setUp(self): | |
13 self.attrs = helper.CharacterAttribute() | |
14 | |
15 def testTrivial(self): | |
16 self.assertEquals( | |
17 text.flatten(A.normal['Hello, world.'], self.attrs), | |
18 'Hello, world.') | |
19 | |
20 def testBold(self): | |
21 self.assertEquals( | |
22 text.flatten(A.bold['Hello, world.'], self.attrs), | |
23 '\x1b[1mHello, world.') | |
24 | |
25 def testUnderline(self): | |
26 self.assertEquals( | |
27 text.flatten(A.underline['Hello, world.'], self.attrs), | |
28 '\x1b[4mHello, world.') | |
29 | |
30 def testBlink(self): | |
31 self.assertEquals( | |
32 text.flatten(A.blink['Hello, world.'], self.attrs), | |
33 '\x1b[5mHello, world.') | |
34 | |
35 def testReverseVideo(self): | |
36 self.assertEquals( | |
37 text.flatten(A.reverseVideo['Hello, world.'], self.attrs), | |
38 '\x1b[7mHello, world.') | |
39 | |
40 def testMinus(self): | |
41 self.assertEquals( | |
42 text.flatten( | |
43 A.bold[A.blink['Hello', -A.bold[' world'], '.']], | |
44 self.attrs), | |
45 '\x1b[1;5mHello\x1b[0;5m world\x1b[1;5m.') | |
46 | |
47 def testForeground(self): | |
48 self.assertEquals( | |
49 text.flatten( | |
50 A.normal[A.fg.red['Hello, '], A.fg.green['world!']], | |
51 self.attrs), | |
52 '\x1b[31mHello, \x1b[32mworld!') | |
53 | |
54 def testBackground(self): | |
55 self.assertEquals( | |
56 text.flatten( | |
57 A.normal[A.bg.red['Hello, '], A.bg.green['world!']], | |
58 self.attrs), | |
59 '\x1b[41mHello, \x1b[42mworld!') | |
60 | |
61 | |
62 class EfficiencyTestCase(unittest.TestCase): | |
63 todo = ("flatten() isn't quite stateful enough to avoid emitting a few extra
bytes in " | |
64 "certain circumstances, so these tests fail. The failures take the
form of " | |
65 "additional elements in the ;-delimited character attribute lists.
For example, " | |
66 "\\x1b[0;31;46m might be emitted instead of \\x[46m, even if 31 has
already been " | |
67 "activated and no conflicting attributes are set which need to be cl
eared.") | |
68 | |
69 def setUp(self): | |
70 self.attrs = helper.CharacterAttribute() | |
71 | |
72 def testComplexStructure(self): | |
73 output = A.normal[ | |
74 A.bold[ | |
75 A.bg.cyan[ | |
76 A.fg.red[ | |
77 "Foreground Red, Background Cyan, Bold", | |
78 A.blink[ | |
79 "Blinking"], | |
80 -A.bold[ | |
81 "Foreground Red, Background Cyan, normal"]], | |
82 A.fg.green[ | |
83 "Foreground Green, Background Cyan, Bold"]]]] | |
84 | |
85 self.assertEquals( | |
86 text.flatten(output, self.attrs), | |
87 "\x1b[1;31;46mForeground Red, Background Cyan, Bold" | |
88 "\x1b[5mBlinking" | |
89 "\x1b[0;31;46mForeground Red, Background Cyan, normal" | |
90 "\x1b[1;32;46mForeground Green, Background Cyan, Bold") | |
91 | |
92 def testNesting(self): | |
93 self.assertEquals( | |
94 text.flatten(A.bold['Hello, ', A.underline['world.']], self.attrs), | |
95 '\x1b[1mHello, \x1b[4mworld.') | |
96 | |
97 self.assertEquals( | |
98 text.flatten( | |
99 A.bold[A.reverseVideo['Hello, ', A.normal['world'], '.']], | |
100 self.attrs), | |
101 '\x1b[1;7mHello, \x1b[0mworld\x1b[1;7m.') | |
OLD | NEW |