@@ -240,7 +240,6 @@ def get_width():
240240 self .assert_sidebar_n_lines (1 )
241241 self .assertEqual (get_width (), 1 )
242242
243- @unittest .skipIf (platform == 'darwin' , 'test tk version dependent' )
244243 def test_click_selection (self ):
245244 self .linenumber .show_sidebar ()
246245 self .text .insert ('1.0' , 'one\n two\n three\n four\n ' )
@@ -254,44 +253,47 @@ def test_click_selection(self):
254253
255254 self .assertEqual (self .get_selection (), ('2.0' , '3.0' ))
256255
257- @unittest .skipIf (platform == 'darwin' , 'test tk version dependent' )
258- def test_drag_selection_down (self ):
259- self .linenumber .show_sidebar ()
260- self .text .insert ('1.0' , 'one\n two\n three\n four\n five\n ' )
261- self .root .update ()
256+ def simulate_drag (self , start_line , end_line ):
257+ start_x , start_y = self .get_line_screen_position (start_line )
258+ end_x , end_y = self .get_line_screen_position (end_line )
262259
263- # Drag from the second line to the fourth line.
264- start_x , start_y = self .get_line_screen_position (2 )
265- end_x , end_y = self .get_line_screen_position (4 )
266260 self .linenumber .sidebar_text .event_generate ('<Button-1>' ,
267261 x = start_x , y = start_y )
268- self .linenumber .sidebar_text .event_generate ('<B1-Motion>' ,
269- x = start_x , y = start_y )
270- self .linenumber .sidebar_text .event_generate ('<B1-Motion>' ,
271- x = end_x , y = end_y )
262+ self .root .update ()
263+
264+ def lerp (a , b , steps ):
265+ """linearly interpolate from a to b (inclusive) in equal steps"""
266+ last_step = steps - 1
267+ for i in range (steps ):
268+ yield ((last_step - i ) / last_step ) * a + (i / last_step ) * b
269+
270+ for x , y in zip (
271+ map (int , lerp (start_x , end_x , steps = 11 )),
272+ map (int , lerp (start_y , end_y , steps = 11 )),
273+ ):
274+ self .linenumber .sidebar_text .event_generate ('<B1-Motion>' , x = x , y = y )
275+ self .root .update ()
276+
272277 self .linenumber .sidebar_text .event_generate ('<ButtonRelease-1>' ,
273278 x = end_x , y = end_y )
274279 self .root .update ()
280+
281+ def test_drag_selection_down (self ):
282+ self .linenumber .show_sidebar ()
283+ self .text .insert ('1.0' , 'one\n two\n three\n four\n five\n ' )
284+ self .root .update ()
285+
286+ # Drag from the second line to the fourth line.
287+ self .simulate_drag (2 , 4 )
275288 self .assertEqual (self .get_selection (), ('2.0' , '5.0' ))
276289
277- @unittest .skipIf (platform == 'darwin' , 'test tk version dependent' )
278290 def test_drag_selection_up (self ):
279291 self .linenumber .show_sidebar ()
280292 self .text .insert ('1.0' , 'one\n two\n three\n four\n five\n ' )
281293 self .root .update ()
282294
283295 # Drag from the fourth line to the second line.
284- start_x , start_y = self .get_line_screen_position (4 )
285- end_x , end_y = self .get_line_screen_position (2 )
286- self .linenumber .sidebar_text .event_generate ('<Button-1>' ,
287- x = start_x , y = start_y )
288- self .linenumber .sidebar_text .event_generate ('<B1-Motion>' ,
289- x = start_x , y = start_y )
290- self .linenumber .sidebar_text .event_generate ('<B1-Motion>' ,
291- x = end_x , y = end_y )
292- self .linenumber .sidebar_text .event_generate ('<ButtonRelease-1>' ,
293- x = end_x , y = end_y )
294- self .root .update ()
296+ self .simulate_drag (4 , 2 )
295297 self .assertEqual (self .get_selection (), ('2.0' , '5.0' ))
296298
297299 def test_scroll (self ):
0 commit comments