@@ -27,11 +27,16 @@ def test_debug(self):
2727 def test_search (self ):
2828 text = self .text
2929
30+ # pattern and index are obligatory arguments.
3031 self .assertRaises (tkinter .TclError , text .search , None , '1.0' )
3132 self .assertRaises (tkinter .TclError , text .search , 'a' , None )
3233 self .assertRaises (tkinter .TclError , text .search , None , None )
34+
35+ # Invalid text index.
3336 self .assertRaises (tkinter .TclError , text .search , '' , 0 )
3437
38+ # Check if we are getting the indices as strings -- you are likely
39+ # to get Tcl_Obj under Tk 8.5 if Tkinter doesn't convert it.
3540 text .insert ('1.0' , 'hi-test' )
3641 self .assertEqual (text .search ('-test' , '1.0' , 'end' ), '1.2' )
3742 self .assertEqual (text .search ('test' , '1.0' , 'end' ), '1.3' )
@@ -45,19 +50,37 @@ def test_search(self):
4550 result = text .search ('line' , '1.0' , 'end' , nolinestop = True , regexp = True )
4651 self .assertEqual (result , '2.8' )
4752
48- all_res = text .search_all ('test' , '1.0' , 'end' )
49- self .assertIsInstance (all_res , tuple )
50- self .assertGreaterEqual (len (all_res ), 2 )
51- self .assertEqual (str (all_res [0 ]), '1.10' )
52- self .assertEqual (str (all_res [1 ]), '1.31' )
53+ strict_res = text .search ('test' , '1.0' , '1.20' , strictlimits = True )
54+ self .assertEqual (strict_res , '1.10' )
5355
56+ def test_search_all (self ):
57+ text = self .text
58+ text .insert ('1.0' ,
59+ 'ababa ababa\n '
60+ 'ababababa\n '
61+ 'aba aba' )
5462
55- overlap_res = text .search_all ('test' , '1.0' , 'end' , overlap = True )
63+ all_res = text .search_all ('aba' , '1.0' , 'end' )
64+ all_res_strs = [str (i ) for i in all_res ]
65+ self .assertIsInstance (all_res , tuple )
66+ self .assertGreaterEqual (len (all_res ), 3 )
67+ self .assertEqual (str (all_res [0 ]), '1.0' )
68+ self .assertEqual (str (all_res [1 ]), '1.6' )
69+
70+ overlap_res = text .search_all ('aba' , '1.0' , 'end' , overlap = True )
71+ overlap_res_strs = [str (i ) for i in overlap_res ]
5672 self .assertIsInstance (overlap_res , tuple )
57- self .assertGreaterEqual (len (overlap_res ), len (all_res ))
73+ self .assertGreater (len (overlap_res ), len (all_res ))
5874
59- strict_res = text .search ('test' , '1.0' , '1.20' , strictlimits = True )
60- self .assertEqual (strict_res , '1.10' )
75+ # Check that overlap actually finds overlapping matches
76+ self .assertIn ('2.0' , overlap_res_strs )
77+ self .assertIn ('2.2' , overlap_res_strs )
78+ self .assertIn ('2.4' , overlap_res_strs )
79+ self .assertNotIn ('2.2' , all_res_strs )
80+
81+ # Ensure all results are valid text indices
82+ for i in overlap_res :
83+ self .assertRegex (str (i ), r'^\d+\.\d+$' )
6184
6285 def test_count (self ):
6386 text = self .text
0 commit comments