diff --git a/napari/layers/shapes/_tests/test_shapes_mouse_bindings.py b/napari/layers/shapes/_tests/test_shapes_mouse_bindings.py index bf36aba6c82..c11a2d9682c 100644 --- a/napari/layers/shapes/_tests/test_shapes_mouse_bindings.py +++ b/napari/layers/shapes/_tests/test_shapes_mouse_bindings.py @@ -158,6 +158,87 @@ def test_line_fixed_angles(create_known_shapes_layer): assert np.allclose(theta, 45.0) +def test_polyline_tablet(create_known_shapes_layer): + layer, n_shapes, known_non_shape = create_known_shapes_layer + desired_shape = np.array([[20, 30], [10, 50], [60, 40], [80, 20]]) + + layer.mode = 'add_polyline' + event = read_only_mouse_event( + type='mouse_press', + is_dragging=True, + position=desired_shape[0], + pos=desired_shape[0], + ) + mouse_press_callbacks(layer, event) + assert layer.shape_type[-1] == 'path' + + for coord in desired_shape[1:]: + event = read_only_mouse_event( + type='mouse_move', + is_dragging=True, + position=coord, + pos=coord, + ) + mouse_move_callbacks(layer, event) + + event = read_only_mouse_event( + type='mouse_release', + is_dragging=True, + position=desired_shape[-1], + pos=desired_shape[-1], + ) + mouse_release_callbacks(layer, event) + + assert len(layer.data) == n_shapes + 1 + assert np.array_equal(desired_shape, layer.data[-1]) + + assert layer.shape_type[-1] == 'path' + assert not layer._is_creating + + # Ensure it's selected, accounting for zero-indexing + assert len(layer.selected_data) == 1 + assert layer.selected_data == {n_shapes} + + +def test_polyline_mouse(create_known_shapes_layer): + layer, n_shapes, known_non_shape = create_known_shapes_layer + desired_shape = np.array([[20, 30], [10, 50], [60, 40], [80, 20]]) + + layer.mode = 'add_polyline' + + event = read_only_mouse_event( + type='mouse_press', + position=desired_shape[0], + pos=desired_shape[0], + ) + mouse_press_callbacks(layer, event) + assert layer.shape_type[-1] == 'path' + + for coord in desired_shape[1:]: + event = read_only_mouse_event( + type='mouse_move', + position=coord, + pos=coord, + ) + mouse_move_callbacks(layer, event) + + event = read_only_mouse_event( + type='mouse_press', + position=desired_shape[-1], + pos=desired_shape[-1], + ) + mouse_press_callbacks(layer, event) + + assert len(layer.data) == n_shapes + 1 + assert np.array_equal(desired_shape, layer.data[-1]) + assert layer.shape_type[-1] == 'path' + assert not layer._is_creating + + # Ensure it's selected, accounting for zero-indexing + assert len(layer.selected_data) == 1 + assert layer.selected_data == {n_shapes} + + def test_polygon_lasso_tablet(create_known_shapes_layer): """Draw polygon with tablet simulated by mouse drag event.""" layer, n_shapes, known_non_shape = create_known_shapes_layer