def setUp(self): mainhdu = Mock() mainhdu.data.shape = (100, 100) self.hdulist = [mainhdu] self.figure = Mock() with patch.object(ImageSinglet, "_create_axes"): self.image = ImageSinglet(self.hdulist, self.figure, [0, 0, 1, 1]) self.image.axes = Mock() self.interaction_context = InteractionContext(self.image)
def show_image(self, colorbar=False): # start xpans if needed ds9.ds9_xpans() # start ds9 if need, or connect to existing display = ds9.ds9(target='validate') if self.frame_number is None: # display.set('frame delete all') display.set('frame new') display.set('scale zscale') display.set('cmap invert yes') f = StringIO() self.hdulist.writeto(f) f.flush() f.seek(0) hdulist = fits.open(f) for hdu in hdulist: del(hdu.header['PV*']) display.set_pyfits(hdulist) f.close() del(hdulist) self.frame_number = display.get('frame frameno') display.set('frame center {}'.format(self.frame_number)) display.set('zoom to fit') display.set('wcs align yes') display.set('frame frameno {}'.format(self.frame_number)) self._interaction_context = InteractionContext(self) self.number_of_images_displayed += 1
def setUp(self): mainhdu = Mock() mainhdu.data.shape = (100, 100) self.hdulist = [mainhdu] self.figure = Mock() with patch.object(ImageSinglet, "_create_axes"): self.image = ImageSinglet(self.hdulist, self.figure, [0, 0, 1, 1]) self.image.axes = Mock() self.interaction_context = InteractionContext(self.image)
class InteractionTest(unittest.TestCase): def setUp(self): mainhdu = Mock() mainhdu.data.shape = (100, 100) self.hdulist = [mainhdu] self.figure = Mock() with patch.object(ImageSinglet, "_create_axes"): self.image = ImageSinglet(self.hdulist, self.figure, [0, 0, 1, 1]) self.image.axes = Mock() self.interaction_context = InteractionContext(self.image) def _create_mouse_event(self, x, y, button, inaxes=True): event = Mock(spec=MPLMouseEvent) event.x = x event.xdata = x event.y = y event.ydata = y event.button = button if inaxes: event.inaxes = self.image.axes else: event.inaxes = Mock() # a new, different axes return event def fire_press_event(self, x, y, button=InteractionContext.MOUSE_BUTTON_LEFT, inaxes=True): self.interaction_context.on_press( self._create_mouse_event(x, y, button, inaxes)) def fire_release_event(self, button=InteractionContext.MOUSE_BUTTON_LEFT): event = Mock(spec=MPLMouseEvent) event.button = button self.interaction_context.on_release(event) def fire_motion_event(self, x, y, inaxes=True): self.interaction_context.on_motion( self._create_mouse_event(x, y, inaxes)) def test_state_click_in_circle(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) self.fire_press_event(x + 2, y + 2) assert_that(self.interaction_context.state, instance_of(MoveMarkerState)) def test_press_release(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) assert_that(not self.interaction_context.state.pressed) self.fire_press_event(x + 2, y + 2) assert_that(self.interaction_context.state.pressed) self.fire_release_event() assert_that(not self.interaction_context.state.pressed) def test_state_click_outside_marker(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) self.fire_press_event(x + 2, y + 2) assert_that(self.interaction_context.state, instance_of(MoveMarkerState)) self.fire_release_event() assert_that(self.interaction_context.state, instance_of(MoveMarkerState)) self.fire_press_event(x + 6, y + 6) assert_that(self.interaction_context.state, instance_of(CreateMarkerState)) def test_state_right_click(self): x = 10 y = 10 self.fire_press_event(x, y, button=InteractionContext.MOUSE_BUTTON_LEFT) assert_that(self.interaction_context.state, instance_of(CreateMarkerState)) self.fire_release_event(button=InteractionContext.MOUSE_BUTTON_LEFT) self.fire_press_event(x, y, button=InteractionContext.MOUSE_BUTTON_RIGHT) assert_that(self.interaction_context.state, instance_of(AdjustColormapState)) self.fire_release_event(button=InteractionContext.MOUSE_BUTTON_RIGHT) self.fire_press_event(x, y, button=InteractionContext.MOUSE_BUTTON_LEFT) assert_that(self.interaction_context.state, instance_of(CreateMarkerState)) self.fire_release_event(button=InteractionContext.MOUSE_BUTTON_LEFT) def test_drag_marker(self): x0 = 10 y0 = 10 radius = 5 xclick = x0 + 2 yclick = y0 + 2 dx = 10 dy = 5 self.image.place_marker(x0, y0, radius) assert_that(self.interaction_context.get_marker().center, equal_to((x0, y0))) self.fire_press_event(xclick, yclick) self.fire_motion_event(xclick + dx, yclick + dy) assert_that(self.interaction_context.get_marker().center, equal_to((x0 + dx, y0 + dy))) assert_that(self.interaction_context.get_marker().radius, equal_to(radius)) def test_create_marker(self): x0 = 10 y0 = 10 dx = 10 dy = 30 assert_that(self.interaction_context.get_marker(), none()) self.fire_press_event(x0, y0) self.fire_motion_event(x0 + dx, y0 + dy) assert_that(self.interaction_context.get_marker().center, equal_to((15, 25))) assert_that(self.interaction_context.get_marker().radius, equal_to(15)) def test_motion_not_pressed(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) self.interaction_context.state = CreateMarkerState( self.interaction_context) self.fire_motion_event(x + 2, y + 2) assert_that(self.interaction_context.get_marker().center, equal_to((x, y))) assert_that(self.interaction_context.get_marker().radius, equal_to(radius)) self.interaction_context.state = MoveMarkerState( self.interaction_context) self.fire_motion_event(x + 2, y + 2) assert_that(self.interaction_context.get_marker().center, equal_to((x, y))) assert_that(self.interaction_context.get_marker().radius, equal_to(radius)) def test_click_no_drag_inside_marker(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) click_x = 12 click_y = 13 self.fire_press_event(click_x, click_y) self.fire_release_event() assert_that(self.interaction_context.get_marker().center, equal_to((click_x, click_y))) def test_click_no_drag_outside_marker(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) click_x = 20 click_y = 21 self.fire_press_event(click_x, click_y) self.fire_release_event() assert_that(self.interaction_context.get_marker().center, equal_to((click_x, click_y))) def test_xy_changed_event_on_click(self): handler = Mock() self.image.xy_changed.connect(handler) self.image.place_marker(10, 10, 5) x_click = 20 y_click = 30 self.fire_press_event(x_click, y_click) self.fire_release_event() handler.assert_called_once_with(x_click, y_click) def test_xy_changed_event_on_drag(self): handler = Mock() self.image.xy_changed.connect(handler) x0 = 10 y0 = 10 radius = 5 self.image.place_marker(x0, y0, radius) xclick = x0 + 2 yclick = y0 + 2 dx = 10 dy = 20 self.fire_press_event(xclick, yclick) self.fire_motion_event(xclick + dx, yclick + dy) handler.assert_called_once_with(x0 + dx, y0 + dy)
class InteractionTest(unittest.TestCase): def setUp(self): mainhdu = Mock() mainhdu.data.shape = (100, 100) self.hdulist = [mainhdu] self.figure = Mock() with patch.object(ImageSinglet, "_create_axes"): self.image = ImageSinglet(self.hdulist, self.figure, [0, 0, 1, 1]) self.image.axes = Mock() self.interaction_context = InteractionContext(self.image) def _create_mouse_event(self, x, y, button, inaxes=True): event = Mock(spec=MPLMouseEvent) event.x = x event.xdata = x event.y = y event.ydata = y event.button = button if inaxes: event.inaxes = self.image.axes else: event.inaxes = Mock() # a new, different axes return event def fire_press_event(self, x, y, button=InteractionContext.MOUSE_BUTTON_LEFT, inaxes=True): self.interaction_context.on_press( self._create_mouse_event(x, y, button, inaxes)) def fire_release_event(self, button=InteractionContext.MOUSE_BUTTON_LEFT): event = Mock(spec=MPLMouseEvent) event.button = button self.interaction_context.on_release(event) def fire_motion_event(self, x, y, inaxes=True): self.interaction_context.on_motion( self._create_mouse_event(x, y, inaxes)) def test_state_click_in_circle(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) self.fire_press_event(x + 2, y + 2) assert_that(self.interaction_context.state, instance_of(MoveMarkerState)) def test_press_release(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) assert_that(not self.interaction_context.state.pressed) self.fire_press_event(x + 2, y + 2) assert_that(self.interaction_context.state.pressed) self.fire_release_event() assert_that(not self.interaction_context.state.pressed) def test_state_click_outside_marker(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) self.fire_press_event(x + 2, y + 2) assert_that(self.interaction_context.state, instance_of(MoveMarkerState)) self.fire_release_event() assert_that(self.interaction_context.state, instance_of(MoveMarkerState)) self.fire_press_event(x + 6, y + 6) assert_that(self.interaction_context.state, instance_of(CreateMarkerState)) def test_state_right_click(self): x = 10 y = 10 self.fire_press_event(x, y, button=InteractionContext.MOUSE_BUTTON_LEFT) assert_that(self.interaction_context.state, instance_of(CreateMarkerState)) self.fire_release_event(button=InteractionContext.MOUSE_BUTTON_LEFT) self.fire_press_event(x, y, button=InteractionContext.MOUSE_BUTTON_RIGHT) assert_that(self.interaction_context.state, instance_of(AdjustColormapState)) self.fire_release_event(button=InteractionContext.MOUSE_BUTTON_RIGHT) self.fire_press_event(x, y, button=InteractionContext.MOUSE_BUTTON_LEFT) assert_that(self.interaction_context.state, instance_of(CreateMarkerState)) self.fire_release_event(button=InteractionContext.MOUSE_BUTTON_LEFT) def test_drag_marker(self): x0 = 10 y0 = 10 radius = 5 xclick = x0 + 2 yclick = y0 + 2 dx = 10 dy = 5 self.image.place_marker(x0, y0, radius) assert_that(self.interaction_context.get_marker().center, equal_to((x0, y0))) self.fire_press_event(xclick, yclick) self.fire_motion_event(xclick + dx, yclick + dy) assert_that(self.interaction_context.get_marker().center, equal_to((x0 + dx, y0 + dy))) assert_that(self.interaction_context.get_marker().radius, equal_to(radius)) def test_create_marker(self): x0 = 10 y0 = 10 dx = 10 dy = 30 assert_that(self.interaction_context.get_marker(), none()) self.fire_press_event(x0, y0) self.fire_motion_event(x0 + dx, y0 + dy) assert_that(self.interaction_context.get_marker().center, equal_to((15, 25))) assert_that(self.interaction_context.get_marker().radius, equal_to(15)) def test_motion_not_pressed(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) self.interaction_context.state = CreateMarkerState(self.interaction_context) self.fire_motion_event(x + 2, y + 2) assert_that(self.interaction_context.get_marker().center, equal_to((x, y))) assert_that(self.interaction_context.get_marker().radius, equal_to(radius)) self.interaction_context.state = MoveMarkerState(self.interaction_context) self.fire_motion_event(x + 2, y + 2) assert_that(self.interaction_context.get_marker().center, equal_to((x, y))) assert_that(self.interaction_context.get_marker().radius, equal_to(radius)) def test_click_no_drag_inside_marker(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) click_x = 12 click_y = 13 self.fire_press_event(click_x, click_y) self.fire_release_event() assert_that(self.interaction_context.get_marker().center, equal_to((click_x, click_y))) def test_click_no_drag_outside_marker(self): x = 10 y = 10 radius = 5 self.image.place_marker(x, y, radius) click_x = 20 click_y = 21 self.fire_press_event(click_x, click_y) self.fire_release_event() assert_that(self.interaction_context.get_marker().center, equal_to((click_x, click_y))) def test_xy_changed_event_on_click(self): handler = Mock() self.image.xy_changed.connect(handler) self.image.place_marker(10, 10, 5) x_click = 20 y_click = 30 self.fire_press_event(x_click, y_click) self.fire_release_event() handler.assert_called_once_with(x_click, y_click) def test_xy_changed_event_on_drag(self): handler = Mock() self.image.xy_changed.connect(handler) x0 = 10 y0 = 10 radius = 5 self.image.place_marker(x0, y0, radius) xclick = x0 + 2 yclick = y0 + 2 dx = 10 dy = 20 self.fire_press_event(xclick, yclick) self.fire_motion_event(xclick + dx, yclick + dy) handler.assert_called_once_with(x0 + dx, y0 + dy)