예제 #1
0
    def test_on_rows_removed_updates_view(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row_0 = [
            '74040', '', '74040', '', '74040', '', '74040', '', '74040', '',
            '74040', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        row_1 = [
            '74041', '', '74041', '', '74041', '', '74041', '', '74041', '',
            '74041', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        row_2 = [
            '74042', '', '74042', '', '74042', '', '74042', '', '74042', '',
            '74042', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        row_3 = [
            '74043', '', '74043', '', '74043', '', '74043', '', '74043', '',
            '74043', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        presenter._table_model.add_table_entry(0, TableIndexModel(*row_0))
        presenter._table_model.add_table_entry(1, TableIndexModel(*row_1))
        presenter._table_model.add_table_entry(2, TableIndexModel(*row_2))
        presenter._table_model.add_table_entry(3, TableIndexModel(*row_3))
        presenter.update_view_from_table_model = mock.MagicMock()
        rows = [0, 2]

        presenter.on_rows_removed(rows)

        presenter.update_view_from_table_model.assert_called_once_with()
예제 #2
0
 def setUp(self):
     self.table_model = TableModel()
     self.state_gui_model = StateGuiModel({})
     table_index_model_0 = TableIndexModel(0, 'LOQ74044', '', '', '', '',
                                           '', '', '', '', '', '', '')
     table_index_model_1 = TableIndexModel(1, 'LOQ74044', '', '', '', '',
                                           '', '', '', '', '', '', '')
     self.table_model.add_table_entry(0, table_index_model_0)
     self.table_model.add_table_entry(1, table_index_model_1)
예제 #3
0
    def test_that_to_batch_list_is_correct_format(self):
        test_row = ['SANS2D00022024  ', '', 'SANS2D00022025 ', '', '   SANS2D00022026 ', '', '', '', '', '', '', '',
                    '    out_file', 'a_user_file ', 1.0, '', '', 'Disc', 'WavelengthMax=5.0']
        table_index_model = TableIndexModel(*test_row)

        actual_list = table_index_model.to_batch_list()
        expected_list = ["SANS2D00022024", "SANS2D00022025", "SANS2D00022026",
                         "", "", "",  "out_file", "a_user_file"]

        self.assertEqual(actual_list, expected_list)
예제 #4
0
 def test_that_incorrect_sample_shape_reverts_to_previous_sampleshape(self):
     try:
         table_index_model = TableIndexModel('0', "", "", "", "", "", "",
                                             "", "", "", "", "", "", "", "",
                                             sample_shape="Disc")
         table_index_model.sample_shape = "not a sample shape"
     except Exception as e:
         self.assertTrue(False, "Did not except incorrect sample shape to raise error")
     else:
         self.assertEqual("Disc", table_index_model.sample_shape_string)
예제 #5
0
    def test_that_empty_string_is_acceptable_sample_shape(self):
        table_index_model = TableIndexModel('0', "", "", "", "", "", "",
                                            "", "", "", "", "", "", "", "",
                                            sample_shape="Disc")
        table_index_model.sample_shape = ""

        sample_shape_enum = table_index_model.sample_shape
        sample_shape_text = table_index_model.sample_shape_string

        self.assertEqual(sample_shape_enum, "")
        self.assertEqual(sample_shape_text, "")
예제 #6
0
    def test_get_number_of_rows_returns_number_of_entries(self):
        table_model = TableModel()
        table_index_model = TableIndexModel('0', "", "", "", "", "", "",
                                            "", "", "", "", "", "")
        table_model.add_table_entry(0, table_index_model)
        table_index_model = TableIndexModel('1', "", "", "", "", "", "",
                                            "", "", "", "", "", "")
        table_model.add_table_entry(1, table_index_model)

        number_of_rows = table_model.get_number_of_rows()

        self.assertEqual(number_of_rows, 2)
예제 #7
0
    def test_when_last_row_is_removed_table_is_left_with_one_empty_row(self):
        table_model = TableModel()
        table_index_model = TableIndexModel(0, "", "", "", "", "", "", "", "",
                                            "", "", "", "")
        table_model.add_table_entry(0, table_index_model)
        table_index_model = TableIndexModel(1, "", "", "", "", "", "", "", "",
                                            "", "", "", "")
        table_model.add_table_entry(1, table_index_model)
        empty_row = table_model.create_empty_row()

        table_model.remove_table_entries([0, 1])

        self.assertEqual(table_model.get_number_of_rows(), 1)
        self.assertEqual(table_model.get_table_entry(0), empty_row)
예제 #8
0
    def test_on_insert_row_updates_table_model(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row = ['74044', '', '74044', '', '74044', '', '74044', '', '74044', '', '74044', '', 'test_reduction'
               , 'user_file', '1.2', '']
        index = 0
        expected_table_index_model = TableIndexModel(*row)
        expected_table_index_model.id = 0
        expected_table_index_model.file_finding = True

        presenter.on_row_inserted(index, row)

        self.assertEqual(presenter._table_model.get_number_of_rows(), 1)
        model_row = presenter._table_model.get_table_entry(0)
        self.assertEqual(model_row, expected_table_index_model)
예제 #9
0
    def test_when_table_is_cleared_is_left_with_one_empty_row(self):
        table_model = TableModel()
        table_index_model = TableIndexModel('0', "", "", "", "", "", "",
                                            "", "", "", "", "", "")
        table_model.add_table_entry(0, table_index_model)
        table_index_model = TableIndexModel('1', "", "", "", "", "", "",
                                            "", "", "", "", "", "")
        table_model.add_table_entry(1, table_index_model)
        empty_row = table_model.create_empty_row()
        empty_row.id = 2

        table_model.clear_table_entries()

        self.assertEqual(table_model.get_number_of_rows(), 1)
        self.assertEqual(table_model.get_table_entry(0), empty_row)
예제 #10
0
 def on_paste_rows_requested(self):
     if self._clipboard:
         selected_rows = self._view.get_selected_rows()
         selected_rows = selected_rows if selected_rows else [self._table_model.get_number_of_rows()]
         replacement_table_index_models = [TableIndexModel(*x) for x in self._clipboard]
         self._table_model.replace_table_entries(selected_rows, replacement_table_index_models)
         self.update_view_from_table_model()
예제 #11
0
 def test_that_can_get_table_index_model_for_valid_index(self):
     table_model = TableModel()
     table_index_model = TableIndexModel(0, "", "", "", "", "", "", "", "",
                                         "", "", "", "")
     table_model.add_table_entry(0, table_index_model)
     returned_model = table_model.get_table_entry(0)
     self.assertTrue(returned_model.index == 0)
예제 #12
0
 def _get_table_model(option_string=""):
     table_index_model = TableIndexModel(0, "SANS2D00022024", "", "", "",
                                         "", "", "", "", "", "", "", "", "",
                                         "", option_string)
     table_model = TableModel()
     table_model.add_table_entry(0, table_index_model)
     return table_model
예제 #13
0
    def test_create_state_from_user_file_if_specified(self,
                                                      create_gui_state_mock):
        create_gui_state_mock.returns = StateGuiModel({})
        table_index_model = TableIndexModel('LOQ74044',
                                            '',
                                            '',
                                            '',
                                            '',
                                            '',
                                            '',
                                            '',
                                            '',
                                            '',
                                            '',
                                            '',
                                            user_file='MaskLOQData.txt')
        table_model = TableModel()
        table_model.add_table_entry(0, table_index_model)

        states, errors = create_states(self.state_gui_model,
                                       table_model,
                                       SANSInstrument.LOQ,
                                       SANSFacility.ISIS,
                                       row_index=[0, 1, 2])

        self.assertEqual(len(states), 1)
        create_gui_state_mock.assert_called_once_with('MaskLOQData.txt',
                                                      self.state_gui_model)
예제 #14
0
 def test_that_can_get_table_index_model_for_valid_index(self):
     table_model = TableModel()
     row_entry = [''] * 16
     table_index_model = TableIndexModel(*row_entry)
     table_model.add_table_entry(0, table_index_model)
     returned_model = table_model.get_table_entry(0)
     self.assertTrue(returned_model.sample_scatter == '')
예제 #15
0
 def test_that_can_retrieve_user_file_from_table_index_model(self):
     table_model = TableModel()
     table_index_model = TableIndexModel('2', "", "", "", "", "", "",
                                         "", "", "", "", "", "", "User_file_name")
     table_model.add_table_entry(2, table_index_model)
     user_file = table_model.get_row_user_file(0)
     self.assertEqual(user_file,"User_file_name")
예제 #16
0
 def _get_table_model(option_string="", sample_thickness=8.0):
     table_index_model = TableIndexModel("SANS2D00022024", "", "", "", "", "", "", "", "",
                                         "", "", "",options_column_string=option_string,
                                         sample_thickness=sample_thickness)
     table_model = TableModel()
     table_model.add_table_entry(0, table_index_model)
     return table_model
예제 #17
0
    def test_that_process_all_ignores_empty_rows(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)

        table_model = TableModel()
        row_entry0 = [''] * 16
        row_entry1 = [
            '74040', '', '74040', '', '74040', '', '74040', '', '74040', '',
            '74040', '', 'test_reduction', 'user_file', '1.2', ''
        ]
        table_model.add_table_entry(0, TableIndexModel(*row_entry0))
        table_model.add_table_entry(1, TableIndexModel(*row_entry1))

        presenter._table_model = table_model
        presenter._process_rows = mock.MagicMock()

        presenter.on_process_all_clicked()
        presenter._process_rows.assert_called_with([1])
예제 #18
0
 def test_that_can_retrieve_sample_thickness_from_table_index_model(self):
     sample_thickness = '8.0'
     table_model = TableModel()
     table_index_model = TableIndexModel("", "", "", "", "", "",
                                         "", "", "", "", "", "", sample_thickness=sample_thickness)
     table_model.add_table_entry(2, table_index_model)
     row_entry = table_model.get_table_entry(0)
     self.assertEqual(row_entry.sample_thickness, sample_thickness)
예제 #19
0
 def test_that_will_raise_when_models_are_incomplete(self):
     table_index_model = TableIndexModel(0, "", "", "", "", "", "",
                                            "", "", "", "", "", "")
     table_model = TableModel()
     table_model.add_table_entry(0, table_index_model)
     state_model = self._get_state_gui_model()
     director = GuiStateDirector(table_model, state_model, SANSFacility.ISIS)
     self.assertRaises(ValueError, director.create_state, 0)
예제 #20
0
    def test_that_sample_shape_can_be_parsed(self):
        table_index_model = TableIndexModel('0', "", "", "", "", "", "",
                                            "", "", "", "", "", "", "", "",
                                            sample_shape="  flatPlate  ")
        sample_shape_enum = table_index_model.sample_shape
        sample_shape_text = table_index_model.sample_shape_string

        self.assertEqual(sample_shape_enum, SampleShape.FlatPlate)
        self.assertEqual(sample_shape_text, "FlatPlate")
예제 #21
0
 def test_that_can_set_the_options_column_model(self):
     table_index_model = TableIndexModel('0', "", "", "", "", "", "",
                                         "", "", "", "", "", "", "", "",
                                         options_column_string="WavelengthMin=1, WavelengthMax=3, NotRegister2=1")
     options_column_model = table_index_model.options_column_model
     options = options_column_model.get_options()
     self.assertTrue(len(options) == 2)
     self.assertTrue(options["WavelengthMin"] == 1.)
     self.assertTrue(options["WavelengthMax"] == 3.)
예제 #22
0
    def test_skips_empty_rows(self, create_row_state_mock):
        table_index_model = TableIndexModel(1, '', '', '', '', '', '', '', '',
                                            '', '', '', '')
        self.table_model.add_table_entry(1, table_index_model)

        states = create_states(self.state_gui_model, self.table_model,
                               SANSInstrument.LOQ, SANSFacility.ISIS)

        self.assertEqual(len(states), 1)
예제 #23
0
    def setUp(self):
        self.qApp = QCoreApplication(['test_app'])
        self.table_model = TableModel()
        self.state_gui_model = StateGuiModel({})
        table_index_model_0 = TableIndexModel('LOQ74044', '', '', '', '', '', '', '', '', '', '', '')
        table_index_model_1 = TableIndexModel('LOQ74044', '', '', '', '', '', '', '', '', '', '', '')
        self.table_model.add_table_entry(0, table_index_model_0)
        self.table_model.add_table_entry(1, table_index_model_1)
        self.table_model.wait_for_file_finding_done()
        self.qApp.processEvents()

        self.fake_state = mock.MagicMock(spec=State)
        self.gui_state_director_instance = mock.MagicMock()
        self.gui_state_director_instance.create_state.return_value = self.fake_state
        self.patcher = mock.patch('sans.gui_logic.models.create_state.GuiStateDirector')
        self.addCleanup(self.patcher.stop)
        self.gui_state_director = self.patcher.start()
        self.gui_state_director.return_value = self.gui_state_director_instance
예제 #24
0
    def setUp(self):
        self.table_model = TableModel()
        self.state_gui_model = StateGuiModel({})
        table_index_model_0 = TableIndexModel('LOQ74044', '', '', '', '', '',
                                              '', '', '', '', '', '')
        table_index_model_1 = TableIndexModel('LOQ74044', '', '', '', '', '',
                                              '', '', '', '', '', '')
        self.table_model.add_table_entry(0, table_index_model_0)
        self.table_model.add_table_entry(1, table_index_model_1)

        self.fake_state = mock.MagicMock(spec=State)
        self.gui_state_director_instance = mock.MagicMock()
        self.gui_state_director_instance.create_state.return_value = self.fake_state
        self.patcher = mock.patch(
            'sans.gui_logic.models.create_state.GuiStateDirector')
        self.addCleanup(self.patcher.stop)
        self.gui_state_director = self.patcher.start()
        self.gui_state_director.return_value = self.gui_state_director_instance
예제 #25
0
    def test_skips_empty_rows(self):
        table_index_model = TableIndexModel('', '', '', '', '', '', '', '', '', '', '', '')
        self.table_model.add_table_entry(1, table_index_model)
        self.table_model.wait_for_file_finding_done()
        self.qApp.processEvents()

        states, errors = create_states(self.state_gui_model, self.table_model, SANSInstrument.LOQ, SANSFacility.ISIS,
                               row_index=[0,1, 2])

        self.assertEqual(len(states), 2)
예제 #26
0
def create_state(state_model_with_view_update, file, period, facility):
    table_row = TableIndexModel(file, period, '', '', '', '', '', '', '', '', '', '')
    table = TableModel()
    table.add_table_entry_no_thread_or_signal(0, table_row)

    gui_state_director = GuiStateDirector(table, state_model_with_view_update, facility)

    state = gui_state_director.create_state(0)

    return state
예제 #27
0
    def test_that_get_non_empty_rows_returns_non_empty_rows(self):
        table_model = TableModel()
        table_index_model = TableIndexModel("", "", "", "", "", "", "",
                                            "", "", "", "", "", "")
        table_model.add_table_entry(0, table_index_model)
        table_index_model = TableIndexModel('0', "", "", "", "", "", "",
                                            "", "", "", "", "", "")
        table_model.add_table_entry(1, table_index_model)
        table_index_model = TableIndexModel('', "", "", "", "", "", "",
                                            "", "", "", "5", "", "")
        table_model.add_table_entry(2, table_index_model)
        table_index_model = TableIndexModel("", "", "", "", "", "", "",
                                            "", "", "", "", "", "")
        table_model.add_table_entry(3, table_index_model)

        non_empty_rows_actual = table_model.get_non_empty_rows([0, 1, 2, 3])
        non_empty_rows_expected = [1, 2]

        self.assertEqual(non_empty_rows_actual, non_empty_rows_expected)
예제 #28
0
    def test_that_table_model_completes_partial_sample_shape(self):
        table_index_model = TableIndexModel('0', "", "", "", "", "", "",
                                            "", "", "", "", "", "", "", "",
                                            sample_shape="cylind")

        sample_shape_enum = table_index_model.sample_shape
        sample_shape_text = table_index_model.sample_shape_string

        self.assertEqual(sample_shape_enum, SampleShape.Cylinder)
        self.assertEqual(sample_shape_text, "Cylinder")
예제 #29
0
    def test_that_sample_shape_can_be_set_as_enum(self):
        # If a batch file contains a sample shape, it is a enum: SampleShape.Disc, Cylinder, FlatPlate
        # So SampleShapeColumnModel must be able to parse this.
        table_index_model = TableIndexModel('0', "", "", "", "", "", "",
                                            "", "", "", "", "", "", "", "",
                                            sample_shape=SampleShape.FlatPlate)
        sample_shape_enum = table_index_model.sample_shape
        sample_shape_text = table_index_model.sample_shape_string

        self.assertEqual(sample_shape_enum, SampleShape.FlatPlate)
        self.assertEqual(sample_shape_text, "FlatPlate")
예제 #30
0
    def test_that_get_thickness_for_rows_updates_table_correctly(self):
        table_model = TableModel()
        table_index_model = TableIndexModel("LOQ74044", "", "", "", "", "", "",
                                            "", "", "", "", "", "")
        table_model.add_table_entry(0, table_index_model)

        table_model.get_thickness_for_rows()
        table_model.work_handler.wait_for_done()
        self.qApp.processEvents()

        self.assertEqual(table_index_model.sample_thickness, 1.0)
    def test_on_data_changed_updates_table_model(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row = ['74044', '', '74044', '', '74044', '', '74044', '', '74044', '', '74044', '', 'test_reduction'
               , 'user_file', '1.2', '']
        expected_row = ['74044', '', '74040', '', '74044', '', '74044', '', '74044', '', '74044', '', 'test_reduction'
                        , 'user_file', '1.2', '']
        presenter._table_model.add_table_entry(0, TableIndexModel(*row))
        row = 0
        column = 2
        value = '74040'
        expected_table_index_model = TableIndexModel(*expected_row)
        expected_table_index_model.id = 0
        expected_table_index_model.file_finding = True

        presenter.on_data_changed(row, column, value, '')

        self.assertEqual(presenter._table_model.get_number_of_rows(), 1)
        model_row = presenter._table_model.get_table_entry(0)
        self.assertEqual(model_row, expected_table_index_model)
    def test_on_row_removed_removes_correct_row(self):
        presenter = RunTabPresenter(SANSFacility.ISIS)
        presenter.set_view(mock.MagicMock())
        row_0 = ['74040', '', '74040', '', '74040', '', '74040', '', '74040', '', '74040', '', 'test_reduction'
                 , 'user_file', '1.2', '']
        row_1 = ['74041', '', '74041', '', '74041', '', '74041', '', '74041', '', '74041', '', 'test_reduction'
                 , 'user_file', '1.2', '']
        row_2 = ['74042', '', '74042', '', '74042', '', '74042', '', '74042', '', '74042', '', 'test_reduction'
                 , 'user_file', '1.2', '']
        row_3 = ['74043', '', '74043', '', '74043', '', '74043', '', '74043', '', '74043', '', 'test_reduction'
                 , 'user_file', '1.2', '']
        presenter._table_model.add_table_entry(0, TableIndexModel(*row_0))
        presenter._table_model.add_table_entry(1, TableIndexModel(*row_1))
        presenter._table_model.add_table_entry(2, TableIndexModel(*row_2))
        presenter._table_model.add_table_entry(3, TableIndexModel(*row_3))
        rows = [0, 2]
        expected_row_0 = TableIndexModel(*row_1)
        expected_row_0.id = 1
        expected_row_0.file_finding = True
        expected_row_1 = TableIndexModel(*row_3)
        expected_row_1.id = 3
        expected_row_1.file_finding = True


        presenter.on_rows_removed(rows)

        self.assertEqual(presenter._table_model.get_number_of_rows(), 2)
        model_row_0 = presenter._table_model.get_table_entry(0)
        self.assertEqual(model_row_0, expected_row_0)
        model_row_1 = presenter._table_model.get_table_entry(1)
        self.assertEqual(model_row_1, expected_row_1)