def test_fill(Event): """Test filling label.""" data = np.ones((20, 20)) data[:5, :5] = 2 data[-5:, -5:] = 3 layer = Labels(data) assert np.unique(layer.data[:5, :5]) == 2 assert np.unique(layer.data[-5:, -5:]) == 3 assert np.unique(layer.data[:5, -5:]) == 1 assert np.unique(layer.data[-5:, :5]) == 1 layer.mode = 'fill' layer.position = (0, 0) layer.selected_label = 4 # Simulate click event = ReadOnlyWrapper(Event(type='mouse_press', is_dragging=False)) mouse_press_callbacks(layer, event) assert np.unique(layer.data[:5, :5]) == 4 assert np.unique(layer.data[-5:, -5:]) == 3 assert np.unique(layer.data[:5, -5:]) == 1 assert np.unique(layer.data[-5:, :5]) == 1 layer.position = (19, 19) layer.selected_label = 5 # Simulate click event = ReadOnlyWrapper(Event(type='mouse_press', is_dragging=False)) mouse_press_callbacks(layer, event) assert np.unique(layer.data[:5, :5]) == 4 assert np.unique(layer.data[-5:, -5:]) == 5 assert np.unique(layer.data[:5, -5:]) == 1 assert np.unique(layer.data[-5:, :5]) == 1
def test_erase(Event, brush_shape, expected_sum): """Test erasing labels with different brush shapes.""" data = np.ones((20, 20)) layer = Labels(data) layer.brush_size = 10 layer.mode = 'erase' layer.brush_shape = brush_shape layer.selected_label = 3 layer.position = (0, 0) # Simulate click event = ReadOnlyWrapper(Event(type='mouse_press', is_dragging=False)) mouse_press_callbacks(layer, event) layer.position = (19, 19) # Simulate drag event = ReadOnlyWrapper(Event(type='mouse_move', is_dragging=True)) mouse_move_callbacks(layer, event) # Simulate release event = ReadOnlyWrapper(Event(type='mouse_release', is_dragging=False)) mouse_release_callbacks(layer, event) # Painting goes from (0, 0) to (19, 19) with a brush size of 10, changing # all pixels along that path, but non outside it. assert np.unique(layer.data[:8, :8]) == 0 assert np.unique(layer.data[-8:, -8:]) == 0 assert np.unique(layer.data[:5, -5:]) == 1 assert np.unique(layer.data[-5:, :5]) == 1 assert np.sum(layer.data == 1) == expected_sum
def test_paint_scale(Event, brush_shape, expected_sum): """Test painting labels with circle/square brush when scaled.""" data = np.ones((20, 20)) layer = Labels(data, scale=(2, 2)) layer.brush_size = 20 layer.brush_shape = brush_shape layer.mode = 'paint' layer.selected_label = 3 layer.position = (0, 0) # Simulate click event = ReadOnlyWrapper(Event(type='mouse_press', is_dragging=False)) mouse_press_callbacks(layer, event) layer.position = (39, 39) # Simulate drag event = ReadOnlyWrapper(Event(type='mouse_move', is_dragging=True)) mouse_move_callbacks(layer, event) # Simulate release event = ReadOnlyWrapper(Event(type='mouse_release', is_dragging=False)) mouse_release_callbacks(layer, event) # Painting goes from (0, 0) to (19, 19) with a brush size of 10, changing # all pixels along that path, but none outside it. assert np.unique(layer.data[:8, :8]) == 3 assert np.unique(layer.data[-8:, -8:]) == 3 assert np.unique(layer.data[:5, -5:]) == 1 assert np.unique(layer.data[-5:, :5]) == 1 assert np.sum(layer.data == 3) == expected_sum
def test_pick(Event): """Test picking label.""" data = np.ones((20, 20)) data[:5, :5] = 2 data[-5:, -5:] = 3 layer = Labels(data) assert layer.selected_label == 1 layer.mode = 'pick' layer.position = (0, 0) # Simulate click event = ReadOnlyWrapper(Event(type='mouse_press', is_dragging=False)) mouse_press_callbacks(layer, event) assert layer.selected_label == 2 layer.position = (19, 19) # Simulate click event = ReadOnlyWrapper(Event(type='mouse_press', is_dragging=False)) mouse_press_callbacks(layer, event) assert layer.selected_label == 3