Skip to content

Commit 63c174d

Browse files
tests for readline keys
--HG-- branch : scroll-frontend
1 parent afde916 commit 63c174d

File tree

1 file changed

+206
-0
lines changed

1 file changed

+206
-0
lines changed
Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
from bpython.scrollfrontend.manual_readline import *
2+
import unittest
3+
4+
class TestManualReadline(unittest.TestCase):
5+
def setUp(self):
6+
self._line = "this is my test string"
7+
8+
def tearDown(self):
9+
pass
10+
11+
def test_left_arrow_at_zero(self):
12+
pos = 0
13+
expected = (pos, self._line)
14+
result = left_arrow(pos, self._line)
15+
self.assertEquals(expected, result)
16+
17+
def test_left_arrow_at_non_zero(self):
18+
for i in xrange(1, len(self._line)):
19+
expected = (i-1, self._line)
20+
result = left_arrow(i, self._line)
21+
self.assertEqual(expected, result)
22+
23+
def test_right_arrow_at_end(self):
24+
pos = len(self._line)
25+
expected = (pos, self._line)
26+
result = right_arrow(pos, self._line)
27+
self.assertEquals(expected, result)
28+
29+
def test_right_arrow_at_non_end(self):
30+
for i in xrange(len(self._line) - 1):
31+
expected = (i + 1, self._line)
32+
result = right_arrow(i, self._line)
33+
self.assertEquals(expected, result)
34+
35+
def test_beginning_of_line(self):
36+
expected = (0, self._line)
37+
for i in xrange(len(self._line)):
38+
result = beginning_of_line(i, self._line)
39+
self.assertEquals(expected, result)
40+
41+
def test_end_of_line(self):
42+
expected = (len(self._line), self._line)
43+
for i in xrange(len(self._line)):
44+
result = end_of_line(i, self._line)
45+
self.assertEquals(expected, result)
46+
47+
def test_forward_word(self):
48+
line = "going from here to_here"
49+
#012345678901234567890123
50+
start_pos = 11
51+
next_word_pos = 15
52+
expected = (next_word_pos, line)
53+
result = forward_word(start_pos, line)
54+
self.assertEquals(expected, result)
55+
start_pos = 15
56+
next_word_pos = 23
57+
expected = (next_word_pos, line)
58+
result = forward_word(start_pos, line)
59+
self.assertEquals(expected, result)
60+
61+
def test_forward_word_tabs(self):
62+
line = "going from here to_here"
63+
#01234567890123456789012345678
64+
start_pos = 11
65+
next_word_pos = 15
66+
expected = (next_word_pos, line)
67+
result = forward_word(start_pos, line)
68+
self.assertEquals(expected, result)
69+
start_pos = 15
70+
next_word_pos = 28
71+
expected = (next_word_pos, line)
72+
result = forward_word(start_pos, line)
73+
self.assertEquals(expected, result)
74+
75+
def test_forward_word_end(self):
76+
line = "going from here to_here"
77+
#012345678901234567890123
78+
start_pos = 16
79+
next_word_pos = 23
80+
expected = (next_word_pos, line)
81+
result = forward_word(start_pos, line)
82+
self.assertEquals(expected, result)
83+
start_pos = 22
84+
next_word_pos = 23
85+
expected = (next_word_pos, line)
86+
result = forward_word(start_pos, line)
87+
self.assertEquals(expected, result)
88+
start_pos = 23
89+
next_word_pos = 23
90+
expected = (next_word_pos, line)
91+
result = forward_word(start_pos, line)
92+
self.assertEquals(expected, result)
93+
94+
def test_forward_word_empty(self):
95+
line = ""
96+
#0
97+
start_pos = 0
98+
next_word_pos = 0
99+
expected = (next_word_pos, line)
100+
result = forward_word(start_pos, line)
101+
self.assertEquals(expected, result)
102+
103+
def test_back_word(self):
104+
line = "going to here from_here"
105+
start_pos = 14
106+
prev_word_pos = 9
107+
self.assertEquals(line[start_pos], 'f')
108+
self.assertEquals(line[prev_word_pos], 'h')
109+
expected = (prev_word_pos, line)
110+
result = back_word(start_pos, line)
111+
self.assertEquals(expected, result)
112+
113+
def test_last_word_pos(self):
114+
line = "a word"
115+
expected = 2
116+
result = last_word_pos(line)
117+
self.assertEquals(expected, result)
118+
119+
def test_last_word_pos_single_word(self):
120+
line = "word"
121+
expected = 0
122+
result = last_word_pos(line)
123+
self.assertEquals(expected, result)
124+
125+
def test_delete(self):
126+
line = "deletion line"
127+
pos = 3
128+
expected = (3, "deltion line")
129+
result = delete(pos, line)
130+
self.assertEquals(expected, result)
131+
132+
def test_delete_from_cursor_back(self):
133+
line = "everything before this will be deleted"
134+
expected = (0, "this will be deleted")
135+
result = delete_from_cursor_back(line.find("this"), line)
136+
self.assertEquals(expected, result)
137+
138+
def test_delete_from_cursor_forward(self):
139+
line = "everything after this will be deleted"
140+
pos = line.find("this")
141+
expected = (pos, "everything after ")
142+
result = delete_from_cursor_forward(line.find("this"), line)
143+
self.assertEquals(expected, result)
144+
145+
def test_delete_rest_of_word(self):
146+
self.try_stages(['z|s;df asdf d s;a;a',
147+
'z|;df asdf d s;a;a',
148+
'z| asdf d s;a;a',
149+
'z| d s;a;a',
150+
'z| s;a;a',
151+
'z|;a;a',
152+
'z|;a',
153+
'z|'], delete_rest_of_word)
154+
155+
def test_delete_word_to_cursor(self):
156+
self.try_stages([
157+
' a;d sdf ;a;s;d; fjksald|a',
158+
' a;d sdf ;a;s;d; |a',
159+
' a;d sdf |a',
160+
' a;d |a',
161+
' |a',
162+
'|a',
163+
], delete_word_to_cursor)
164+
165+
def test_yank_prev_killed_text(self):
166+
pass
167+
168+
def test_yank_prev_prev_killed_text(self):
169+
pass
170+
171+
def try_stages(self, strings, func):
172+
if not all('|' in s for s in strings):
173+
raise ValueError("Need to use '|' to specify cursor")
174+
175+
stages = [(s.index('|'), s.replace('|', '')) for s in strings]
176+
for (initial_pos, initial), (final_pos, final) in zip(stages[:-1], stages[1:]):
177+
self.assertTupleEqual(func(initial_pos, initial), (final_pos, final))
178+
179+
def test_transpose_character_before_cursor(self):
180+
self.try_stages(["as|df asdf",
181+
"ads|f asdf",
182+
"adfs| asdf",
183+
"adf s|asdf",
184+
"adf as|sdf"], transpose_character_before_cursor)
185+
186+
def test_transpose_word_before_cursor(self):
187+
pass
188+
189+
def test_backspace(self):
190+
self.assertEquals(backspace(2, 'as'), (1, 'a'))
191+
self.assertEquals(backspace(3, 'as '), (2, 'as'))
192+
193+
def test_delete_word_from_cursor_back(self):
194+
self.try_stages([
195+
"asd;fljk asd;lfjas;dlkfj asdlk jasdf;ljk|",
196+
"asd;fljk asd;lfjas;dlkfj asdlk jasdf;|",
197+
"asd;fljk asd;lfjas;dlkfj asdlk |",
198+
"asd;fljk asd;lfjas;dlkfj |",
199+
"asd;fljk asd;lfjas;|",
200+
"asd;fljk asd;|",
201+
"asd;fljk |",
202+
"asd;|",
203+
"|"], delete_word_from_cursor_back)
204+
205+
if __name__ == '__main__':
206+
unittest.main()

0 commit comments

Comments
 (0)