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()
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)
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)
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)
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, "")
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)
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)
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)
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)
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()
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)
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
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)
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 == '')
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")
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
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])
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)
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)
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")
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.)
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)
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
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
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)
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
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)
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")
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")
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)