def test_changing_modes(): """Test changing modes.""" np.random.seed(0) data = 20 * np.random.random((10, 4, 2)) layer = Shapes(data) assert layer.mode == 'pan_zoom' assert layer.interactive == True layer.mode = 'select' assert layer.mode == 'select' assert layer.interactive == False layer.mode = 'direct' assert layer.mode == 'direct' assert layer.interactive == False layer.mode = 'vertex_insert' assert layer.mode == 'vertex_insert' assert layer.interactive == False layer.mode = 'vertex_remove' assert layer.mode == 'vertex_remove' assert layer.interactive == False layer.mode = 'add_rectangle' assert layer.mode == 'add_rectangle' assert layer.interactive == False layer.mode = 'add_ellipse' assert layer.mode == 'add_ellipse' assert layer.interactive == False layer.mode = 'add_line' assert layer.mode == 'add_line' assert layer.interactive == False layer.mode = 'add_path' assert layer.mode == 'add_path' assert layer.interactive == False layer.mode = 'add_polygon' assert layer.mode == 'add_polygon' assert layer.interactive == False layer.mode = 'pan_zoom' assert layer.mode == 'pan_zoom' assert layer.interactive == True
def test_delete(): # Test on three four corner rectangle layer = Shapes(20 * np.random.random((3, 4, 2))) layer.mode = 'direct' assert len(layer.data) == 3 layer.selected_data = {0, 1} key_bindings.delete_selected(layer) assert len(layer.data) == 1
def test_select_all(): # Test on three four corner rectangle layer = Shapes(20 * np.random.random((3, 4, 2))) layer.mode = 'direct' assert len(layer.data) == 3 assert len(layer.selected_data) == 0 key_bindings.select_all(layer) assert len(layer.selected_data) == 3
def test_copy_paste(): # Test on three four corner rectangle layer = Shapes(20 * np.random.random((3, 4, 2))) layer.mode = 'direct' assert len(layer.data) == 3 assert layer._clipboard == {} layer.selected_data = {0, 1} key_bindings.copy(layer) assert len(layer.data) == 3 assert len(layer._clipboard) == 5 key_bindings.paste(layer) assert len(layer.data) == 5 assert len(layer._clipboard) == 5
def test_properties(properties): shape = (10, 4, 2) np.random.seed(0) data = 20 * np.random.random(shape) layer = Shapes(data, properties=copy(properties)) np.testing.assert_equal(layer.properties, properties) current_prop = {'shape_type': np.array(['B'])} assert layer.current_properties == current_prop # test removing shapes layer.selected_data = {0, 1} layer.remove_selected() remove_properties = properties['shape_type'][2::] assert len(layer.properties['shape_type']) == (shape[0] - 2) assert np.all(layer.properties['shape_type'] == remove_properties) # test selection of properties layer.selected_data = {0} selected_annotation = layer.current_properties['shape_type'] assert len(selected_annotation) == 1 assert selected_annotation[0] == 'A' # test adding shapes with properties new_data = np.random.random((1, 4, 2)) new_shape_type = ['rectangle'] layer.add(new_data, shape_type=new_shape_type) add_properties = np.concatenate((remove_properties, ['A']), axis=0) assert np.all(layer.properties['shape_type'] == add_properties) # test copy/paste layer.selected_data = {0, 1} layer._copy_data() assert np.all(layer._clipboard['properties']['shape_type'] == ['A', 'B']) layer._paste_data() paste_properties = np.concatenate((add_properties, ['A', 'B']), axis=0) assert np.all(layer.properties['shape_type'] == paste_properties) # test updating a property layer.mode = 'select' layer.selected_data = {0} new_property = {'shape_type': np.array(['B'])} layer.current_properties = new_property updated_properties = layer.properties assert updated_properties['shape_type'][0] == 'B'
def test_value(): """Test getting the value of the data at the current coordinates.""" shape = (10, 4, 2) np.random.seed(0) data = 20 * np.random.random(shape) data[-1, :] = [[0, 0], [0, 10], [10, 0], [10, 10]] layer = Shapes(data) value = layer.get_value((0, 0)) assert value == (9, None) layer.mode = 'select' layer.selected_data = [9] value = layer.get_value((0, 0)) assert value == (9, 7) layer = Shapes(data + 5) value = layer.get_value((0, 0)) assert value == (None, None)
def test_hold_to_pan_zoom(): # Test a single four corner rectangle layer = Shapes(20 * np.random.random((1, 4, 2))) layer.mode = 'direct' # need to go through the generator _ = list(key_bindings.hold_to_pan_zoom(layer))