示例#1
0
class TestChannelDialogController(object):
    test_images = pdsview.ImageSet(test_files)
    window = pdsview.PDSViewer(test_images)
    model = channels_dialog.ChannelsDialogModel(window)
    controller = channels_dialog.ChannelsDialogController(model, None)

    def test_init(self):
        assert self.controller.model == self.model
        assert self.controller.view is None

    def test_update_menus_indices(self):
        assert self.model.menu_indices == [0, 1, 2]
        self.model.red_model.update_index(1)
        self.model.green_model.update_index(3)
        self.model.blue_model.update_index(0)
        assert self.model.menu_indices == [0, 1, 2]
        self.controller.update_menu_indices()
        assert self.model.menu_indices == [1, 3, 0]

    def test_update_current_index(self):
        assert self.model.current_index == 0
        self.model.main_window.controller.next_image()
        assert self.model.current_index == 0
        self.controller.update_current_index()
        assert self.model.current_index == 1
        self.model.main_window.controller.previous_image()
        assert self.model.current_index == 1
        self.controller.update_current_index()
        assert self.model.current_index == 0
示例#2
0
def test_model_image_view():
    image_view = window.view_canvas
    model = histogram.HistogramModel(image_view)
    model.image_view == image_view
    model.image_view == model._image_view
    # Test setter method
    image_view2 = pdsview.PDSViewer(pdsview.ImageSet([FILE_3])).view_canvas
    model.image_view = image_view2
    assert model.image_view == image_view2
示例#3
0
 def test_ROI_data(self):
     """Test the ROI_data to cut out the correct region of data"""
     test_set = pdsview.ImageSet([FILE_3])
     width = test_set.current_image[0].width
     height = test_set.current_image[0].height
     test_data_1 = test_set.ROI_data(0, 0, width, height)
     assert test_data_1[0][0] == 23
     assert test_data_1[512][16] == 25
     assert test_data_1[1023][31] == 115
     test_data_2 = test_set.ROI_data(9.5, 18.5, 11.5, 20.5)
     assert test_data_2[0][0] == 22
     assert test_data_2[0][1] == 23
     assert test_data_2[1][0] == 24
     assert test_data_2[1][1] == 24
示例#4
0
 def test_image_set_append_method(self):
     """Test append method with multiple images"""
     filepaths = [FILE_1]
     new_files = [FILE_2, FILE_3]
     test_set = pdsview.ImageSet(filepaths)
     assert test_set.current_image_index == 0
     assert test_set.current_image[0].file_name == FILE_1_NAME
     assert len(test_set.images) == 1
     assert not (test_set.next_prev_enabled)
     # Mimic how append method is used in pdsview
     first_new_image = len(test_set.images)
     test_set.append(new_files, first_new_image)
     assert test_set.current_image_index == 1
     assert test_set.current_image[0].file_name == FILE_2_NAME
     assert FILE_3_NAME in str(test_set.images)
     assert test_set.next_prev_enabled
示例#5
0
class TestChannelsDialogModel(object):
    test_images = pdsview.ImageSet(test_files)
    window = pdsview.PDSViewer(test_images)
    model = channels_dialog.ChannelsDialogModel(window)

    def test_init(self):
        assert self.model._views == set()
        assert self.model.current_index == 0
        assert isinstance(self.model.rgb_models, tuple)
        assert len(self.model.rgb_models) == 3
        for model in self.model.rgb_models:
            assert isinstance(model, band_widget.BandWidgetModel)
        assert self.model.red_model.name == 'Red'
        assert self.model.red_model.rgb_index == 0
        assert self.model.green_model.name == 'Green'
        assert self.model.green_model.rgb_index == 1
        assert self.model.blue_model.name == 'Blue'
        assert self.model.blue_model.rgb_index == 2
        assert isinstance(self.model.menu_indices, list)
        assert self.model.menu_indices == [0, 1, 2]

    def test_images(self):
        images = self.window.image_set.images
        expected_images = [image[0] for image in images]
        assert self.model.images == expected_images

    def test_rgb(self):
        assert self.model.rgb == self.window.image_set.rgb

    def test_image_names(self):
        names = [
            FILE_5_NAME, FILE_3_NAME, FILE_1_NAME, FILE_2_NAME, FILE_4_NAME
        ]
        assert self.model.image_names == names

    def test_rgb_names(self):
        rgb_names = [FILE_5_NAME, FILE_3_NAME, FILE_1_NAME]
        assert self.model.rgb_names == rgb_names

    def test_alphas(self):
        assert self.model.alphas == [1., 1., 1.]
        self.model.red_model.alpha_value = 75
        self.model.green_model.alpha_value = 50
        self.model.blue_model.alpha_value = 25
        assert self.model.alphas == [.75, .5, .25]
示例#6
0
class TestBandWidgetController(object):
    test_images = pdsview.ImageSet(test_files)
    window = pdsview.PDSViewer(test_images)
    channels_model = channels_dialog.ChannelsDialogModel(window)
    model = band_widget.BandWidgetModel(channels_model, 0, 'Test')
    controller = band_widget.BandWidgetController(model, None)

    def test_init(self):
        assert self.controller.model == self.model
        assert self.controller.view is None

    def test_update_index(self):
        assert self.model.index == 0
        new_index = 1
        self.controller.update_index(new_index, True)
        assert self.model.index == new_index
        new_index = 0
        self.controller.update_index(new_index, True)
        assert self.model.index == new_index

    def test_reset_index(self):
        assert self.model.index == 0
        new_index = 1
        self.model._index = new_index
        self.controller.reset_index()
        assert self.model.index == 0

    def test_update_alpha_value(self):
        assert self.model.alpha_value == 100.
        self.controller.update_alpha(50.)
        assert self.model.alpha_value == 50.
        self.controller.update_alpha(75.)
        assert self.model.alpha_value == 75.
        self.controller.update_alpha(-1)
        assert self.model.alpha_value == 0.
        self.controller.update_alpha(-100000)
        assert self.model.alpha_value == 0.
        self.controller.update_alpha(101)
        assert self.model.alpha_value == 100.
        self.controller.update_alpha(10000)
        assert self.model.alpha_value == 100.
        self.controller.update_alpha(0)
        assert self.model.alpha_value == 0.
        self.controller.update_alpha(100)
        assert self.model.alpha_value == 100.
示例#7
0
    def test_next_prev_enabled(self):
        assert self.test_set.next_prev_enabled

        test_set2 = pdsview.ImageSet([])
        assert not test_set2.next_prev_enabled
示例#8
0
class TestImageSet(object):
    filepaths = [FILE_1, FILE_2, FILE_3, FILE_4, FILE_5]
    test_set = pdsview.ImageSet(filepaths)

    def test_init(self):
        assert self.test_set._views == set()
        assert len(self.test_set.images) == len(self.filepaths)
        filepaths = sorted(self.filepaths)
        for image, filepath in zip(self.test_set.images, filepaths):
            assert image[0].file_name == os.path.basename(filepath)

        assert self.test_set._current_image_index == 0
        assert self.test_set._channel == 0
        # assert self.test_set._last_channel is None
        assert self.test_set._x_value == 0
        assert self.test_set._y_value == 0
        assert self.test_set._pixel_value == (0, )
        assert self.test_set.use_default_text
        assert self.test_set.rgb == []
        assert self.test_set.current_image is not None

    def test_next_prev_enabled(self):
        assert self.test_set.next_prev_enabled

        test_set2 = pdsview.ImageSet([])
        assert not test_set2.next_prev_enabled

    @pytest.mark.parametrize("index, expected, channel", [(1, 1, 1), (5, 0, 4),
                                                          (11, 1, -1),
                                                          (-1, 4, 7),
                                                          (-13, 2, 42),
                                                          (0, 0, 0)])
    def test_current_image_index(self, index, expected, channel):
        self.test_set.channel = channel
        self.test_set.current_image_index = index
        assert self.test_set.current_image_index == expected
        assert self.test_set.current_image == self.test_set.images[expected]
        assert self.test_set.channel == 0

    def test_channel(self):
        assert self.test_set._channel == self.test_set.channel
        assert len(self.test_set.current_image) == 1
        self.test_set.channel = 42
        # When the current image only has one band, don't change the channel
        assert self.test_set.channel == 0
        assert self.test_set._channel == self.test_set.channel
        # TODO: When an rgb image is in the default test_mission_data, test
        # actually chaning the channel

    def test_x_value(self):
        assert self.test_set.x_value == self.test_set._x_value
        self.test_set.x_value = 42.123456789
        assert isinstance(self.test_set.x_value, int)
        assert self.test_set.x_value == 42
        assert self.test_set.x_value == self.test_set._x_value
        self.test_set.x_value = 0
        assert self.test_set.x_value == 0
        assert self.test_set.x_value == self.test_set._x_value

    def test_y_value(self):
        assert self.test_set.y_value == self.test_set._y_value
        self.test_set.y_value = 42.123456789
        assert isinstance(self.test_set.y_value, int)
        assert self.test_set.y_value == 42
        assert self.test_set.y_value == self.test_set._y_value
        self.test_set.y_value = 0
        assert self.test_set.y_value == 0
        assert self.test_set.y_value == self.test_set._y_value

    def test_pixel_value(self):
        def check_pixel_value(new_pixel, expected):
            self.test_set.pixel_value = new_pixel
            assert self.test_set.pixel_value == expected
            assert isinstance(self.test_set.pixel_value, tuple)
            for val in self.test_set.pixel_value:
                assert isinstance(val, float)

        assert self.test_set.pixel_value == (0.0, )
        check_pixel_value((2.3456, 3.4567, 4.5678), (2.346, 3.457, 4.568))
        check_pixel_value([2.3456, 3.4567, 4.5678], (2.346, 3.457, 4.568))
        check_pixel_value(np.array([2.3456, 3.4567, 4.5678]),
                          (2.346, 3.457, 4.568))
        check_pixel_value(42.1234, (42.123, ))
        check_pixel_value(int(42), (42.0, ))
        check_pixel_value(0, (0, ))

    def test_pixel_value_text(self):
        assert self.test_set.pixel_value_text == 'Value: 0.000'
        # TODO: TEST WITH RGB IMAGE

    def test_image_set_append_method(self):
        """Test append method with multiple images"""
        filepaths = [FILE_1]
        new_files = [FILE_2, FILE_3]
        test_set = pdsview.ImageSet(filepaths)
        assert test_set.current_image_index == 0
        assert test_set.current_image[0].file_name == FILE_1_NAME
        assert len(test_set.images) == 1
        assert not (test_set.next_prev_enabled)
        # Mimic how append method is used in pdsview
        first_new_image = len(test_set.images)
        test_set.append(new_files, first_new_image)
        assert test_set.current_image_index == 1
        assert test_set.current_image[0].file_name == FILE_2_NAME
        assert FILE_3_NAME in str(test_set.images)
        assert test_set.next_prev_enabled

    def test_bands_are_composite(self):
        self.test_set.rgb = [image[0] for image in self.test_set.images[:3]]
        assert not self.test_set.bands_are_composite
        # TODO: TEST WITH RGB IMAGE

    # TODO: TEST create_rgb_image WHEN RGB IMAGE IN TEST DATA

    def test_ROI_data(self):
        """Test the ROI_data to cut out the correct region of data"""
        test_set = pdsview.ImageSet([FILE_3])
        width = test_set.current_image[0].width
        height = test_set.current_image[0].height
        test_data_1 = test_set.ROI_data(0, 0, width, height)
        assert test_data_1[0][0] == 23
        assert test_data_1[512][16] == 25
        assert test_data_1[1023][31] == 115
        test_data_2 = test_set.ROI_data(9.5, 18.5, 11.5, 20.5)
        assert test_data_2[0][0] == 22
        assert test_data_2[0][1] == 23
        assert test_data_2[1][0] == 24
        assert test_data_2[1][1] == 24

    def test_ROI_pixels(self):
        """Test ROI_pixels to return the correct number of pixels for a ROI"""
        test_set = pdsview.ImageSet([FILE_3])
        test_pixels = test_set.ROI_pixels(9.5, 18.5, 11.5, 20.5)
        assert test_pixels == 4

    def test_ROI_std_dev(self):
        """Test ROI_std_dev to return the correct standard deviation for ROI"""
        test_set = pdsview.ImageSet([FILE_3])
        test_std_dev = test_set.ROI_std_dev(9.5, 18.5, 11.5, 20.5)
        assert test_std_dev == 0.829156

    def test_ROI_mean(self):
        """Test ROI_mean to return the correct mean value of pixels for ROI"""
        test_set = pdsview.ImageSet([FILE_3])
        test_mean = test_set.ROI_mean(9.5, 18.5, 11.5, 20.5)
        assert test_mean == 23.25

    def test_ROI_median(self):
        """Test ROI_median to return the correct median value for a ROI"""
        test_set = pdsview.ImageSet([FILE_3])
        test_median = test_set.ROI_median(9.5, 18.5, 11.5, 20.5)
        assert test_median == 23.5

    def test_ROI_min(self):
        """Test ROI_min to return the correct minimum pixel value for a ROI"""
        test_set = pdsview.ImageSet([FILE_3])
        test_min = test_set.ROI_min(9.5, 18.5, 11.5, 20.5)
        assert test_min == 22

    def test_ROI_max(self):
        """Test ROI_mx to return the correct maximum pixel value for a ROI"""
        test_set = pdsview.ImageSet([FILE_3])
        test_max = test_set.ROI_max(9.5, 18.5, 11.5, 20.5)
        assert test_max == 24
示例#9
0
class TestPDSViewer(object):
    filepaths = [FILE_1, FILE_2, FILE_3, FILE_4, FILE_5]
    test_set = pdsview.ImageSet(filepaths)
    viewer = pdsview.PDSViewer(test_set)
    viewer.show()

    def test_init(self):
        assert self.viewer.image_set == self.test_set
        assert self.viewer in self.test_set._views
        assert self.viewer._label_window is None
        assert self.viewer._label_window_pos is None
        assert self.viewer.channels_window is None
        assert not self.viewer.channels_window_is_open
        assert self.viewer.channels_window_pos is None
        assert isinstance(self.viewer.view_canvas, ImageViewCanvas)
        assert isinstance(self.viewer.next_image_btn, QtWidgets.QPushButton)
        assert isinstance(self.viewer.previous_image_btn,
                          QtWidgets.QPushButton)
        assert isinstance(self.viewer.open_label, QtWidgets.QPushButton)
        assert isinstance(self.viewer.next_channel_btn, QtWidgets.QPushButton)
        assert isinstance(self.viewer.previous_channel_btn,
                          QtWidgets.QPushButton)
        assert isinstance(self.viewer.restore_defaults, QtWidgets.QPushButton)
        assert isinstance(self.viewer.channels_button, QtWidgets.QPushButton)
        assert isinstance(self.viewer.x_value_lbl, QtWidgets.QLabel)
        assert isinstance(self.viewer.y_value_lbl, QtWidgets.QLabel)
        assert isinstance(self.viewer.pixel_value_lbl, QtWidgets.QLabel)
        assert isinstance(self.viewer.pixels, QtWidgets.QLabel)
        assert isinstance(self.viewer.std_dev, QtWidgets.QLabel)
        assert isinstance(self.viewer.mean, QtWidgets.QLabel)
        assert isinstance(self.viewer.median, QtWidgets.QLabel)
        assert isinstance(self.viewer.min, QtWidgets.QLabel)
        assert isinstance(self.viewer.max, QtWidgets.QLabel)
        assert isinstance(self.viewer.histogram, HistogramModel)
        assert isinstance(self.viewer.histogram_widget, HistogramWidget)
        assert isinstance(self.viewer.rgb_check_box, QtWidgets.QCheckBox)
        assert self.viewer.windowTitle() == FILE_5_NAME

        assert self.viewer.pixels.text() == '#Pixels: 32768'
        assert self.viewer.std_dev.text() == 'Std Dev: 16.100793'
        assert self.viewer.mean.text() == 'Mean: 24.6321'
        assert self.viewer.median.text() == 'Median: 22.0'
        assert self.viewer.min.text() == 'Min: 17'
        assert self.viewer.max.text() == 'Max: 114'
        assert self.viewer.x_value_lbl.text() == 'X: ????'
        assert self.viewer.y_value_lbl.text() == 'Y: ????'
        assert self.viewer.pixel_value_lbl.text() == 'Value: ????'
        assert not self.viewer.rgb_check_box.isChecked()

    def test_current_image(self):
        expected = self.test_set.current_image[self.test_set.channel]
        assert self.viewer.current_image == expected

    def test_refresh_ROI_text(self):
        self.viewer.min.setText("Min: 0")
        self.viewer.max.setText("Max: 100")
        self.viewer._refresh_ROI_text()
        assert self.viewer.min.text() == 'Min: 17'
        assert self.viewer.max.text() == 'Max: 114'

    def test_reset_ROI(self):
        self.viewer.min.setText("Min: 0")
        self.viewer.max.setText("Max: 100")
        self.viewer._reset_ROI()
        assert self.viewer.min.text() == 'Min: 17'
        assert self.viewer.max.text() == 'Max: 114'

    # TODO: When have RGB Image Test _disable_next_previous

    def test_reset_display_values(self):
        self.viewer.x_value_lbl.setText("X: 42")
        self.viewer.y_value_lbl.setText("Y: 42")
        self.viewer.pixel_value_lbl.setText("Value: 42")
        self.viewer._reset_display_values()
        assert self.viewer.x_value_lbl.text() == 'X: ????'
        assert self.viewer.y_value_lbl.text() == 'Y: ????'
        assert self.viewer.pixel_value_lbl.text() == 'Value: ????'

    def test_window_cascade(self, qtbot):
        """Tests the window cascade."""

        # Initial checks
        assert self.viewer._label_window is None
        assert self.viewer.open_label.isEnabled()

        # Open the label window and run appropriate checks
        qtbot.mouseClick(self.viewer.open_label, QtCore.Qt.LeftButton)
        qtbot.add_widget(self.viewer._label_window)
        assert self.viewer._label_window is not None
        assert self.viewer._label_window._finder_window is None
        assert self.viewer._label_window.is_open

        # Open the finder window and run appropriate checks
        qtbot.mouseClick(self.viewer._label_window.find_button,
                         QtCore.Qt.LeftButton)
        assert self.viewer._label_window._finder_window is not None
        qtbot.add_widget(self.viewer._label_window._finder_window)
        assert not (self.viewer._label_window._finder_window.query_edit)

        # Hide windows and check to make sure they are hidden
        qtbot.mouseClick(self.viewer._label_window._finder_window.ok_button,
                         QtCore.Qt.LeftButton)
        assert self.viewer._label_window._finder_window.isHidden()
        qtbot.mouseClick(self.viewer._label_window.cancel_button,
                         QtCore.Qt.LeftButton)
        assert self.viewer._label_window.isHidden()

        # Test the ability for the parent (label) to hide the child (finder)
        qtbot.mouseClick(self.viewer.open_label, QtCore.Qt.LeftButton)
        qtbot.mouseClick(self.viewer._label_window.find_button,
                         QtCore.Qt.LeftButton)
        assert not (self.viewer._label_window.isHidden())
        assert not (self.viewer._label_window._finder_window.isHidden())
        qtbot.mouseClick(self.viewer._label_window.cancel_button,
                         QtCore.Qt.LeftButton)
        assert self.viewer._label_window.isHidden()
        assert self.viewer._label_window._finder_window.isHidden()

    def test_label_refresh(self, qtbot):
        """Tests the label display and refresh features."""
        qtbot.mouseClick(self.viewer.open_label, QtCore.Qt.LeftButton)
        qtbot.add_widget(self.viewer._label_window)
        label_contents = self.viewer._label_window.label_contents
        assert label_contents.toPlainText()[233:236] == "341"
        qtbot.mouseClick(self.viewer.next_image_btn, QtCore.Qt.LeftButton)
        label_contents = self.viewer._label_window.label_contents
        assert label_contents.toPlainText()[228:231] == "338"
        qtbot.mouseClick(self.viewer.previous_image_btn, QtCore.Qt.LeftButton)
        label_contents = self.viewer._label_window.label_contents
        assert label_contents.toPlainText()[233:236] == "341"

    def test_channels_dialog(self, qtbot):
        assert self.viewer.channels_window is None
        assert not self.viewer.channels_window_is_open
        assert self.viewer.channels_window_pos is None
        qtbot.add_widget(self.viewer)
        qtbot.mouseClick(self.viewer.channels_button, QtCore.Qt.LeftButton)
        assert self.viewer.channels_window is not None
        assert self.viewer.channels_window_is_open
        assert isinstance(self.viewer.channels_window, ChannelsDialog)
        assert self.viewer.channels_window_pos is None
        qtbot.add_widget(self.viewer.channels_window)
        new_pos = QtCore.QPoint(42, 24)
        self.viewer.channels_window.move(new_pos)
        qtbot.mouseClick(self.viewer.channels_window.close_button,
                         QtCore.Qt.LeftButton)
        assert self.viewer.channels_window_pos is not None
        assert self.viewer.channels_window_pos == new_pos
        qtbot.mouseClick(self.viewer.channels_button, QtCore.Qt.LeftButton)
        self.viewer.channels_window.pos() == new_pos

    def test_apply_parameters(self, qtbot):
        """Test that images maintain their parameters"""
        self.viewer.save_parameters()
        image1 = self.viewer.current_image
        assert image1.sarr[0] == 0
        assert image1.sarr[255] == 255
        # assert image1.zoom == 1.0
        assert image1.rotation == 0.0
        assert image1.transforms == (False, False, False)
        assert image1.cuts == (17, 25)
        # Change parameters
        image1.sarr[0] = 42
        image1.sarr[255] = 13
        self.viewer.view_canvas.get_rgbmap().set_sarr(image1.sarr)
        # self.viewer.view_canvas.zoom_to(3)
        self.viewer.view_canvas.rotate(45)
        self.viewer.view_canvas.transform(False, True, False)
        self.viewer.view_canvas.cut_levels(24, 95)
        qtbot.mouseClick(self.viewer.next_image_btn, QtCore.Qt.LeftButton)
        # Test the second image parameters are None by defualt
        image2 = self.viewer.current_image
        # Test the view was reset to defualt paramters for the image
        assert self.viewer.view_canvas.get_rgbmap().get_sarr()[0] == 0
        assert self.viewer.view_canvas.get_rgbmap().get_sarr()[255] == 255
        # assert self.viewer.view_canvas.get_zoom() == 1.0
        assert self.viewer.view_canvas.get_rotation() == 0.0
        assert self.viewer.view_canvas.get_transforms() == (False, False,
                                                            False)
        assert self.viewer.view_canvas.get_cut_levels() == (22, 26)
        # Test changing back to the first image maintains image1's parameters
        qtbot.mouseClick(self.viewer.previous_image_btn, QtCore.Qt.LeftButton)
        image1 = self.viewer.image_set.current_image[0]
        assert image1.sarr[0] == 42
        assert image1.sarr[255] == 13
        # assert image1.zoom == 3.0
        assert image1.rotation == 45.0
        assert image1.transforms == (False, True, False)
        assert image1.cuts == (24, 95)
        # Test that image2 stored its parameters
        image2 = self.viewer.image_set.images[1][0]
        assert image2.sarr[0] == 0
        assert image2.sarr[255] == 255
        # assert image2.zoom == 4.746031746031746
        assert image2.rotation == 0.0
        assert image2.transforms == (False, False, False)
        assert image2.cuts == (22, 26)

    def test_restore(self, qtbot):
        image1 = self.viewer.image_set.current_image[0]
        image1.sarr[0] = 42
        image1.sarr[255] = 13
        self.viewer.view_canvas.get_rgbmap().set_sarr(image1.sarr)
        # self.viewer.view_canvas.zoom_to(3)
        self.viewer.view_canvas.rotate(45)
        self.viewer.view_canvas.transform(False, True, False)
        self.viewer.view_canvas.cut_levels(24, 95)
        assert image1.sarr[0] == 42
        assert image1.sarr[255] == 13
        # assert image1.zoom == 3.0
        assert image1.rotation == 45.0
        assert image1.transforms == (False, True, False)
        assert image1.cuts == (24, 95)
        qtbot.mouseClick(self.viewer.restore_defaults, QtCore.Qt.LeftButton)
        self.viewer.save_parameters()
        assert image1.sarr[0] == 0
        assert image1.sarr[255] == 255
        # assert image1.zoom == 1.0
        assert image1.rotation == 0.0
        assert image1.transforms == (False, False, False)
        assert image1.cuts == (17, 25)

    def test_set_ROI_text(self, qtbot):
        """Test the ROI text to contain the correct values"""
        # Test Whole image ROI
        assert self.viewer.pixels.text() == '#Pixels: 32768'
        assert self.viewer.std_dev.text() == 'Std Dev: 16.100793'
        assert self.viewer.mean.text() == 'Mean: 24.6321'
        assert self.viewer.median.text() == 'Median: 22.0'
        assert self.viewer.min.text() == 'Min: 17'
        assert self.viewer.max.text() == 'Max: 114'
        # Test 2x2 random ROI
        # .5 values because these are the edge of the ROI pixels
        self.viewer.set_ROI_text(14.5, 512.5, 16.5, 514.5)
        assert self.viewer.pixels.text() == '#Pixels: 4'
        assert self.viewer.std_dev.text() == 'Std Dev: 1.000000'
        assert self.viewer.mean.text() == 'Mean: 23.0000'
        assert self.viewer.median.text() == 'Median: 23.0'
        assert self.viewer.min.text() == 'Min: 22'
        assert self.viewer.max.text() == 'Max: 24'

    def test_top_right_pixel_snap(self):
        test_snap_1 = self.viewer.top_right_pixel_snap(10, 5)
        assert test_snap_1[0] == 5.5
        assert test_snap_1[1]
        test_snap_2 = self.viewer.top_right_pixel_snap(-5, 5)
        assert not test_snap_2[1]
        test_snap_3 = self.viewer.top_right_pixel_snap(5.4, 10)
        assert test_snap_3[0] == 5.5
        assert test_snap_3[1]
        test_snap_4 = self.viewer.top_right_pixel_snap(5.5, 10)
        assert test_snap_4[0] == 5.5
        assert test_snap_4[1]
        test_snap_5 = self.viewer.top_right_pixel_snap(5.6, 10)
        assert test_snap_5[0] == 6.5
        assert test_snap_5[1]

    def test_bottom_left_pixel_snap(self):
        test_snap_1 = self.viewer.bottom_left_pixel_snap(-5, 5)
        assert test_snap_1[0] == -0.5
        assert test_snap_1[1]
        test_snap_2 = self.viewer.bottom_left_pixel_snap(10, 5)
        assert not test_snap_2[1]
        test_snap_3 = self.viewer.bottom_left_pixel_snap(5.4, 10)
        assert test_snap_3[0] == 4.5
        assert test_snap_3[1]
        test_snap_4 = self.viewer.bottom_left_pixel_snap(5.5, 10)
        assert test_snap_4[0] == 5.5
        assert test_snap_4[1]

    def test_left_right_bottom_top(self):
        test_coords_1 = self.viewer.left_right_bottom_top(1, 2, 1, 2)
        assert test_coords_1[0:4] == (1, 2, 1, 2)
        assert test_coords_1[4]
        assert test_coords_1[5]
        test_coords_2 = self.viewer.left_right_bottom_top(2, 1, 1, 2)
        assert test_coords_2[0:4] == (1, 2, 1, 2)
        assert not test_coords_2[4]
        assert test_coords_2[5]
        test_coords_3 = self.viewer.left_right_bottom_top(1, 2, 2, 1)
        assert test_coords_3[0:4] == (1, 2, 1, 2)
        assert test_coords_3[4]
        assert not test_coords_3[5]
        test_coords_4 = self.viewer.left_right_bottom_top(2, 1, 2, 1)
        assert test_coords_4[0:4] == (1, 2, 1, 2)
        assert not test_coords_4[4]
        assert not test_coords_4[5]
示例#10
0
class TestPDSController(object):
    filepaths = [FILE_1, FILE_2, FILE_3, FILE_4, FILE_5]
    test_set = pdsview.ImageSet(filepaths)
    controller = pdsview.PDSController(test_set, None)

    def test_init(self):
        assert self.controller.model == self.test_set
        assert self.controller.view is None

    def test_next_image(self):
        assert self.test_set.current_image_index == 0
        self.controller.next_image()
        assert self.test_set.current_image_index == 1
        self.test_set.current_image_index = len(self.test_set.images) - 1
        self.controller.next_image()
        assert self.test_set.current_image_index == 0

    def test_previous_image(self):
        assert self.test_set.current_image_index == 0
        self.controller.previous_image()
        last = len(self.test_set.images) - 1
        assert self.test_set.current_image_index == last
        self.test_set.current_image_index = 1
        self.controller.previous_image()
        assert self.test_set.current_image_index == 0

    def test_next_channel(self):
        assert self.test_set.channel == 0
        self.controller.next_channel()
        assert self.test_set.channel == 0
        # TODO: TEST MORE WHEN THERE IS AN RGB IMAGE

    def test_previous_channel(self):
        assert self.test_set.channel == 0
        self.controller.previous_channel()
        assert self.test_set.channel == 0
        # TODO: TEST MORE WHEN THERE IS AN RGB IMAGE

    def test_new_x_value(self):
        self.controller.new_x_value(42.123456789)
        assert isinstance(self.test_set.x_value, int)
        assert self.test_set.x_value == 42
        assert self.test_set.x_value == self.test_set._x_value
        self.controller.new_x_value(0)
        assert self.test_set.x_value == 0
        assert self.test_set.x_value == self.test_set._x_value

    def test_new_y_value(self):
        assert self.test_set.y_value == self.test_set._y_value
        self.controller.new_y_value(42.123456789)
        assert isinstance(self.test_set.y_value, int)
        assert self.test_set.y_value == 42
        assert self.test_set.y_value == self.test_set._y_value
        self.controller.new_y_value(0)
        assert self.test_set.y_value == 0
        assert self.test_set.y_value == self.test_set._y_value

    def test_new_pixel_value(self):
        def check_pixel_value(new_pixel, expected):
            self.controller.new_pixel_value(new_pixel)
            assert self.test_set.pixel_value == expected
            assert isinstance(self.test_set.pixel_value, tuple)
            for val in self.test_set.pixel_value:
                assert isinstance(val, float)

        assert self.test_set.pixel_value == (0.0, )
        check_pixel_value((2.3456, 3.4567, 4.5678), (2.346, 3.457, 4.568))
        check_pixel_value([2.3456, 3.4567, 4.5678], (2.346, 3.457, 4.568))
        check_pixel_value(np.array([2.3456, 3.4567, 4.5678]),
                          (2.346, 3.457, 4.568))
        check_pixel_value(42.1234, (42.123, ))
        check_pixel_value(int(42), (42.0, ))
        check_pixel_value(0, (0, ))

    images = test_set.images

    @pytest.mark.parametrize(
        'image_index, expected',
        [(0, [images[0][0], images[1][0], images[2][0]]),
         (1, [images[1][0], images[2][0], images[3][0]]),
         (len(images) - 1, [images[-1][0], images[0][0], images[1][0]])])
    def test_populate_rgb(self, image_index, expected):
        test_rgb = self.controller._populate_rgb(image_index)
        assert test_rgb == expected

    def test_update_rgb(self):
        expected = [self.images[0][0], self.images[1][0], self.images[2][0]]
        self.test_set.rgb = [1, 2, 3]
        self.controller.update_rgb()
        assert self.test_set.rgb != [1, 2, 3]
        assert self.test_set.rgb == expected
示例#11
0
 def test_ROI_max(self):
     """Test ROI_mx to return the correct maximum pixel value for a ROI"""
     test_set = pdsview.ImageSet([FILE_3])
     test_max = test_set.ROI_max(9.5, 18.5, 11.5, 20.5)
     assert test_max == 24
示例#12
0
 def test_ROI_median(self):
     """Test ROI_median to return the correct median value for a ROI"""
     test_set = pdsview.ImageSet([FILE_3])
     test_median = test_set.ROI_median(9.5, 18.5, 11.5, 20.5)
     assert test_median == 23.5
示例#13
0
class TestBandWidgetModel(object):

    test_images = pdsview.ImageSet(test_files)
    window = pdsview.PDSViewer(test_images)
    channels_model = channels_dialog.ChannelsDialogModel(window)
    model = band_widget.BandWidgetModel(channels_model, 0, 'Test')

    def test_init1(self):
        test_name = 'Test1'
        test_rgb_index = 0
        model = band_widget.BandWidgetModel(self.channels_model,
                                            test_rgb_index, test_name)
        assert isinstance(model.max_alpha, float)
        assert model.max_alpha == 100.
        assert isinstance(model.min_alpha, float)
        assert model.min_alpha == 0.
        assert model._views == set()
        assert model.name == test_name
        assert model.rgb_index == test_rgb_index
        assert model.channels_model == self.channels_model
        assert model._index == 0
        assert model._alpha_value == model.max_alpha

    def test_init2(self):
        test_name = 'Test2'
        test_rgb_index = 2
        model = band_widget.BandWidgetModel(self.channels_model,
                                            test_rgb_index, test_name)
        assert isinstance(model.max_alpha, float)
        assert model.max_alpha == 100.
        assert isinstance(model.min_alpha, float)
        assert model.min_alpha == 0.
        assert model._views == set()
        assert model.name == test_name
        assert model.rgb_index == test_rgb_index
        assert model.channels_model == self.channels_model
        assert model._index == 2
        assert model._alpha_value == model.max_alpha

    def test_index(self):
        assert self.model.index == self.model._index

    def test_selected_image(self):
        expected_selected_image = self.channels_model.images[self.model.index]
        assert self.model.selected_image == expected_selected_image

    def test_update_index(self):
        assert self.model.index == 0
        new_index = 1
        new_selected_image = self.channels_model.images[new_index]
        self.model.update_index(new_index)
        assert self.model.index == new_index
        assert self.model.selected_image == new_selected_image
        new_index = 0
        new_selected_image = self.channels_model.images[new_index]
        self.model.index = new_index
        assert self.model.index == new_index
        assert self.model.selected_image == new_selected_image

    def test_alpha_value(self):
        assert self.model.alpha_value == self.model._alpha_value
        self.model.alpha_value = 50.
        assert self.model.alpha_value == 50.
        self.model.alpha_value = 100.
        assert self.model.alpha_value == 100.
示例#14
0
 def test_ROI_pixels(self):
     """Test ROI_pixels to return the correct number of pixels for a ROI"""
     test_set = pdsview.ImageSet([FILE_3])
     test_pixels = test_set.ROI_pixels(9.5, 18.5, 11.5, 20.5)
     assert test_pixels == 4
示例#15
0
class TestChannelsDialog(object):
    test_images = pdsview.ImageSet(test_files)
    window = pdsview.PDSViewer(test_images)
    window.channels_dialog()
    dialog = window.channels_window
    model = dialog.model
    window.show()

    def add_widget_wrapper(func):
        @wraps(func)
        def wrapper(self, qtbot):
            self.dialog.show()
            qtbot.addWidget(self.dialog)
            return func(self, qtbot)
        return wrapper

    @add_widget_wrapper
    def test_init(self, qtbot):
        assert self.dialog.model == self.model
        assert self.dialog in self.model._views
        assert isinstance(
            self.dialog.controller, channels_dialog.ChannelsDialogController
        )
        assert isinstance(self.dialog, QtWidgets.QDialog)
        assert isinstance(self.dialog.image_tree, QtWidgets.QTreeWidget)
        for item in self.dialog.items:
            assert isinstance(item, QtWidgets.QTreeWidgetItem)
        selection_mode = QtWidgets.QAbstractItemView.NoSelection
        assert self.dialog.image_tree.selectionMode() == selection_mode
        assert self.model.image_names == [
            item.text(0) for item in self.dialog.items]
        assert self.dialog.current_item.isSelected()
        assert isinstance(self.dialog.rgb_check_box, QtWidgets.QCheckBox)
        assert isinstance(self.dialog.red_widget, band_widget.BandWidget)
        assert isinstance(self.dialog.green_widget, band_widget.BandWidget)
        assert isinstance(self.dialog.blue_widget, band_widget.BandWidget)

    @add_widget_wrapper
    def test_current_item(self, qtbot):
        assert self.dialog.current_item.text(0) == self.dialog.items[0].text(0)
        qtbot.mouseClick(self.window.next_image_btn, QtCore.Qt.LeftButton)
        assert self.model.current_index == 1
        assert self.dialog.current_item.text(0) == self.dialog.items[1].text(0)
        qtbot.mouseClick(self.window.previous_image_btn, QtCore.Qt.LeftButton)
        assert self.model.current_index == 0
        assert self.dialog.current_item.text(0) == self.dialog.items[0].text(0)

    # TODO: CANNOT TEST RGB UNTIL AN RGB IMAGE IS ADDED TO THE TEST DATA
    # @add_widget_wrapper
    # def test_check_rgb(self, qtbot)

    @add_widget_wrapper
    def test_change_image(self, qtbot):
        def check_selected(index1, index2):
            assert self.dialog.items[index1].isSelected()
            assert not self.dialog.items[index2].isSelected()
        check_selected(0, 1)
        qtbot.mouseClick(self.window.next_image_btn, QtCore.Qt.LeftButton)
        check_selected(1, 0)
        qtbot.mouseClick(self.window.previous_image_btn, QtCore.Qt.LeftButton)
        check_selected(0, 1)
        qtbot.mouseClick(self.window.previous_image_btn, QtCore.Qt.LeftButton)
        check_selected(-1, 0)
        qtbot.mouseClick(self.window.next_image_btn, QtCore.Qt.LeftButton)
        check_selected(0, 1)

    @add_widget_wrapper
    def test_set_menus_index(self, qtbot):
        widgets = [
            self.dialog.red_widget,
            self.dialog.green_widget,
            self.dialog.blue_widget
        ]

        def check_currentIndex():
            for widget, index in zip(widgets, self.model.menu_indices):
                assert widget.menu.currentIndex() == index
        self.model.menu_indices = [0, 1, 2]
        self.dialog.set_menus_index()
        check_currentIndex()
        r, g, b = 4, 0, 2
        self.model.menu_indices = [r, g, b]
        self.dialog.set_menus_index()
        check_currentIndex()
        self.model.menu_indices = [0, 1, 2]
        self.dialog.set_menus_index()
        check_currentIndex()
        assert self.model.menu_indices == [0, 1, 2]

    @add_widget_wrapper
    def test_update_menus_current_item(self, qtbot):
        assert self.test_images.rgb == self.model.images[:3]
        r, g, b = 4, 0, 2
        new_rgb = [
            self.model.images[r], self.model.images[g], self.model.images[b]
        ]
        self.test_images.rgb = new_rgb
        self.dialog.update_menus_current_item()
        assert self.model.red_model.index == r
        assert self.model.green_model.index == g
        assert self.model.blue_model.index == b
        red_text = self.dialog.red_widget.menu.currentText()
        assert red_text == self.model.image_names[r]
        green_text = self.dialog.green_widget.menu.currentText()
        assert green_text == self.model.image_names[g]
        blue_text = self.dialog.blue_widget.menu.currentText()
        assert blue_text == self.model.image_names[b]
        self.test_images.rgb = self.model.images[:3]
        assert self.test_images.rgb == self.model.images[:3]

    @add_widget_wrapper
    def test_close_dialog(self, qtbot):
        assert not self.window.channels_window_is_open
        qtbot.mouseClick(self.window.channels_button, QtCore.Qt.LeftButton)
        assert self.window.channels_window_is_open
        pos = self.dialog.pos()
        x, y = pos.x(), pos.y()
        new_pos = QtCore.QPoint(x + 5, y - 10)
        self.dialog.move(new_pos)
        qtbot.mouseClick(self.dialog.close_button, QtCore.Qt.LeftButton)
        assert not self.window.channels_window_is_open
        assert self.window.channels_window_pos == new_pos
        qtbot.mouseClick(self.window.channels_button, QtCore.Qt.LeftButton)
        assert self.window.channels_window_is_open
        assert self.dialog.pos() == new_pos
示例#16
0
import pytest
import numpy as np
from qtpy import QtWidgets, QtCore
from matplotlib.lines import Line2D

from pdsview import pdsview, histogram

FILE_1 = os.path.join('tests', 'mission_data',
                      '1p190678905erp64kcp2600l8c1.img')
FILE_2 = os.path.join('tests', 'mission_data',
                      '2p129641989eth0361p2600r8m1.img')
FILE_3 = os.path.join('tests', 'mission_data',
                      '1p134482118erp0902p2600r8m1.img')

test_images = pdsview.ImageSet([FILE_1, FILE_2])
window = pdsview.PDSViewer(test_images)
image_view = window.view_canvas


def test_model_init():
    model = histogram.HistogramModel(image_view)
    assert model._image_view == image_view
    assert model._views == set()
    assert model._cut_low is None
    assert model._cut_high is None
    assert model._bins == 100


def test_model_image_view():
    image_view = window.view_canvas
示例#17
0
 def test_ROI_std_dev(self):
     """Test ROI_std_dev to return the correct standard deviation for ROI"""
     test_set = pdsview.ImageSet([FILE_3])
     test_std_dev = test_set.ROI_std_dev(9.5, 18.5, 11.5, 20.5)
     assert test_std_dev == 0.829156
示例#18
0
class TestBandWidget(object):
    test_images = pdsview.ImageSet(test_files)
    window = pdsview.PDSViewer(test_images)
    channels_model = channels_dialog.ChannelsDialogModel(window)
    model = band_widget.BandWidgetModel(channels_model, 0, 'Test')
    band = band_widget.BandWidget(model)

    def check_menu_text(self):
        for index, name in enumerate(self.channels_model.image_names):
            assert self.band.menu.itemText(index) == name

    def test_init(self):
        assert self.band.model == self.model
        assert isinstance(self.band.controller,
                          band_widget.BandWidgetController)
        assert isinstance(self.band.menu, QtWidgets.QComboBox)
        assert isinstance(self.band.alpha_slider, QtWidgets.QSlider)
        assert isinstance(self.band.alpha_value, QtWidgets.QLabel)
        assert isinstance(self.band.alpha_label, QtWidgets.QLabel)
        assert isinstance(self.band.layout, QtWidgets.QGridLayout)
        self.check_menu_text()
        assert self.band.alpha_value.text() == str(int(self.model.max_alpha))
        assert self.band.alpha_label.text() == 'Test %'
        assert self.band.alpha_slider.value() == self.model.max_alpha

    def test_add_text_to_menu(self):
        self.check_menu_text()
        test_names = ['foo', 'bar']
        self.band.add_text_to_menu(test_names)
        num_names = len(self.channels_model.image_names)
        assert self.band.menu.itemText(num_names + 0) == test_names[0]
        assert self.band.menu.itemText(num_names + 1) == test_names[1]
        self.band.menu.removeItem(num_names + 0)
        self.band.menu.removeItem(num_names + 1)
        self.check_menu_text()

    def test_set_current_index(self):
        assert self.band.menu.currentIndex() == 0
        self.model.index = 1
        self.band.set_current_index()
        assert self.band.menu.currentIndex() == 1
        self.model.index = 0
        self.band.set_current_index()
        assert self.band.menu.currentIndex() == 0

    def test_image_selected(self):
        assert self.model.index == 0
        new_index = 1
        new_selected_image = self.channels_model.images[new_index]
        self.band.image_selected(new_index)
        assert self.model.index == new_index
        assert self.model.selected_image == new_selected_image
        new_index = 0
        new_selected_image = self.channels_model.images[new_index]
        self.band.image_selected(new_index)
        assert self.model.index == new_index
        assert self.model.selected_image == new_selected_image

    def test_value_changed(self):
        assert self.model.alpha_value == 100.
        assert self.band.alpha_value.text() == '100'
        self.band.alpha_slider.setValue(50.)
        assert self.model.alpha_value == 50.
        assert self.band.alpha_value.text() == '50'
        self.band.alpha_slider.setValue(75.)
        assert self.model.alpha_value == 75.
        assert self.band.alpha_value.text() == '75'
        self.band.alpha_slider.setValue(-1)
        assert self.model.alpha_value == 0.
        assert self.band.alpha_value.text() == '0'
        self.band.alpha_slider.setValue(-100000)
        assert self.model.alpha_value == 0.
        assert self.band.alpha_value.text() == '0'
        self.band.alpha_slider.setValue(101)
        assert self.model.alpha_value == 100.
        assert self.band.alpha_value.text() == '100'
        self.band.alpha_slider.setValue(10000)
        assert self.model.alpha_value == 100.
        self.band.alpha_slider.setValue(0)
        assert self.band.alpha_value.text() == '0'
        assert self.model.alpha_value == 0.
        self.band.alpha_slider.setValue(100)
        assert self.model.alpha_value == 100.
        assert self.band.alpha_value.text() == '100'