11import re
2+ from typing import Optional , Tuple
23import unittest
34
45from bpython .line import (
6+ LinePart ,
57 current_word ,
68 current_dict_key ,
79 current_dict ,
@@ -25,7 +27,7 @@ def cursor(s):
2527 return cursor_offset , line
2628
2729
28- def decode (s ) :
30+ def decode (s : str ) -> Tuple [ Tuple [ int , str ], Optional [ LinePart ]] :
2931 """'a<bd|c>d' -> ((3, 'abcd'), (1, 3, 'bdc'))"""
3032
3133 if not s .count ("|" ) == 1 :
@@ -41,24 +43,26 @@ def decode(s):
4143 assert len (d ) in [1 , 3 ], "need all the parts just once! %r" % d
4244
4345 if "<" in d :
44- return (d ["|" ], s ), (d ["<" ], d [">" ], s [d ["<" ] : d [">" ]])
46+ return (d ["|" ], s ), LinePart (d ["<" ], d [">" ], s [d ["<" ] : d [">" ]])
4547 else :
4648 return (d ["|" ], s ), None
4749
4850
49- def line_with_cursor (cursor_offset , line ) :
51+ def line_with_cursor (cursor_offset : int , line : str ) -> str :
5052 return line [:cursor_offset ] + "|" + line [cursor_offset :]
5153
5254
53- def encode (cursor_offset , line , result ) :
55+ def encode (cursor_offset : int , line : str , result : Optional [ LinePart ]) -> str :
5456 """encode(3, 'abdcd', (1, 3, 'bdc')) -> a<bd|c>d'
5557
5658 Written for prettier assert error messages
5759 """
5860 encoded_line = line_with_cursor (cursor_offset , line )
5961 if result is None :
6062 return encoded_line
61- start , end , value = result
63+ start = result .start
64+ end = result .stop
65+ value = result .word
6266 assert line [start :end ] == value
6367 if start < cursor_offset :
6468 encoded_line = encoded_line [:start ] + "<" + encoded_line [start :]
@@ -107,19 +111,25 @@ def test_I(self):
107111 self .assertEqual (cursor ("asd|fgh" ), (3 , "asdfgh" ))
108112
109113 def test_decode (self ):
110- self .assertEqual (decode ("a<bd|c>d" ), ((3 , "abdcd" ), (1 , 4 , "bdc" )))
111- self .assertEqual (decode ("a|<bdc>d" ), ((1 , "abdcd" ), (1 , 4 , "bdc" )))
112- self .assertEqual (decode ("a<bdc>d|" ), ((5 , "abdcd" ), (1 , 4 , "bdc" )))
114+ self .assertEqual (
115+ decode ("a<bd|c>d" ), ((3 , "abdcd" ), LinePart (1 , 4 , "bdc" ))
116+ )
117+ self .assertEqual (
118+ decode ("a|<bdc>d" ), ((1 , "abdcd" ), LinePart (1 , 4 , "bdc" ))
119+ )
120+ self .assertEqual (
121+ decode ("a<bdc>d|" ), ((5 , "abdcd" ), LinePart (1 , 4 , "bdc" ))
122+ )
113123
114124 def test_encode (self ):
115- self .assertEqual (encode (3 , "abdcd" , (1 , 4 , "bdc" )), "a<bd|c>d" )
116- self .assertEqual (encode (1 , "abdcd" , (1 , 4 , "bdc" )), "a|<bdc>d" )
117- self .assertEqual (encode (4 , "abdcd" , (1 , 4 , "bdc" )), "a<bdc|>d" )
118- self .assertEqual (encode (5 , "abdcd" , (1 , 4 , "bdc" )), "a<bdc>d|" )
125+ self .assertEqual (encode (3 , "abdcd" , LinePart (1 , 4 , "bdc" )), "a<bd|c>d" )
126+ self .assertEqual (encode (1 , "abdcd" , LinePart (1 , 4 , "bdc" )), "a|<bdc>d" )
127+ self .assertEqual (encode (4 , "abdcd" , LinePart (1 , 4 , "bdc" )), "a<bdc|>d" )
128+ self .assertEqual (encode (5 , "abdcd" , LinePart (1 , 4 , "bdc" )), "a<bdc>d|" )
119129
120130 def test_assert_access (self ):
121131 def dumb_func (cursor_offset , line ):
122- return (0 , 2 , "ab" )
132+ return LinePart (0 , 2 , "ab" )
123133
124134 self .func = dumb_func
125135 self .assertAccess ("<a|b>d" )
0 commit comments