def test_that_process_selected_only_processes_selected_rows(self): # Naive test. Doesn't check that we are processing the correct processed rows, # just that we are processing the same number of rows as we have selected. # This would only really fail if on_process_selected_clicked and on_process_all_clicked # get muddled-up view = mock.MagicMock() view.get_selected_rows = mock.MagicMock(return_value=[0, 2, 3]) self.presenter.set_view(view) self.presenter._process_rows = mock.Mock() table_model = TableModel() for i in range(5): table_model.append_table_entry(RowEntries(sample_scatter='74040')) self.presenter._table_model = table_model self.presenter.on_process_selected_clicked() expected = [ table_model.get_row(0), table_model.get_row(2), table_model.get_row(3) ] self.presenter._process_rows.assert_called_with(expected)
def test_copy_paste_single_appends_to_end(self): table_model = TableModel() table_model.append_table_entry(RowEntries(sample_transmission="1")) table_model.append_table_entry(RowEntries(sample_transmission="2")) table_model.copy_rows([0]) table_model.paste_rows([]) self.assertEqual(3, table_model.get_number_of_rows()) self.assertEqual(table_model.get_row(0), table_model.get_row(2))
def test_copy_paste_modify_append(self): table_model = TableModel() table_model.append_table_entry(RowEntries(sample_transmission="1")) table_model.copy_rows([0]) table_model.paste_rows([]) row_1 = table_model.get_row(1) self.assertEqual(table_model.get_row(0), row_1) row_1.sample_transmission = 2 self.assertNotEqual(table_model.get_row(0), row_1)
def test_copy_paste_overwrite(self): for paste_location in [0, 1]: table_model = TableModel() for entry_i in range(3): table_model.append_table_entry( RowEntries(sample_transmission=entry_i)) table_model.copy_rows([2]) table_model.paste_rows([paste_location]) self.assertEqual(table_model.get_row(2), table_model.get_row(paste_location))
def test_copy_paste_modify_overwrite(self): # Check we aren't doing a shallow copy, which cause a user to # see two rows get modified at once table_model = TableModel() table_model.append_table_entry(RowEntries(sample_transmission="1")) table_model.append_table_entry(RowEntries(sample_transmission="2")) table_model.copy_rows([0]) table_model.paste_rows([1]) row_1 = table_model.get_row(1) self.assertEqual(table_model.get_row(0), row_1) row_1.sample_transmission = 2 self.assertNotEqual(table_model.get_row(0), row_1)
def test_copy_paste_overwrites_partial(self): table_model = TableModel() num_rows = 6 for entry_i in range(num_rows): table_model.append_table_entry( RowEntries(sample_transmission=entry_i)) # When a partial range of rows is selected that doesn't match the copied length # overwrite to match the behaviour of other spreadsheet tools copied_rows = [0, 1, 2] table_model.copy_rows(copied_rows) table_model.paste_rows([3, 4]) self.assertEqual(num_rows, table_model.get_number_of_rows()) for i in copied_rows: # We pasted to offset 3 self.assertEqual(table_model.get_row(i), table_model.get_row(i + 3))
def test_copy_paste_beyond_table_range(self): table_model = TableModel() num_elements = 4 for entry_i in range(num_elements): table_model.append_table_entry( RowEntries(sample_transmission=entry_i)) copied_indices = [0, 1, 2] table_model.copy_rows(copied_indices) paste_location = 3 table_model.paste_rows([paste_location]) # We override row 4, and should have + rows now too self.assertEqual(num_elements + 2, table_model.get_number_of_rows()) for paste_index in copied_indices: self.assertEqual(table_model.get_row(paste_index), table_model.get_row(paste_index + paste_location))
def test_when_last_row_is_removed_table_is_left_with_one_empty_row(self): table_model = TableModel() table_model.append_table_entry(RowEntries()) table_model.append_table_entry(RowEntries()) self.assertEqual(2, table_model.get_number_of_rows()) table_model.remove_table_entries([0, 1]) self.assertEqual(table_model.get_number_of_rows(), 0) self.assertTrue(table_model.get_row(0).is_empty())
def test_when_table_is_cleared_is_left_with_one_empty_row(self): table_model = TableModel() table_model.append_table_entry(RowEntries()) table_model.append_table_entry(RowEntries()) self.assertEqual(2, table_model.get_number_of_rows()) table_model.clear_table_entries() self.assertEqual(table_model.get_number_of_rows(), 0) self.assertTrue(table_model.get_row(0).is_empty())
def test_that_set_row_to_error_sets_row_to_error_and_tool_tip(self): table_model = TableModel() table_index_model = RowEntries() table_model.replace_table_entry(0, table_index_model) row = 0 tool_tip = 'There was an error' table_model.set_row_to_error(row, tool_tip) row_entry = table_model.get_row(0) self.assertTrue(RowState.ERROR, row_entry.state) self.assertEqual(tool_tip, row_entry.tool_tip)
def test_copy_paste_append_mixed_selection(self): table_model = TableModel() for entry_i in range(4): table_model.append_table_entry( RowEntries(sample_transmission=entry_i)) copied_rows = [0, 1, 3] table_model.copy_rows(copied_rows) table_model.paste_rows([]) # 4 rows + 3 pasted self.assertEqual(7, table_model.get_number_of_rows()) for dest_row, original_row in enumerate(copied_rows): self.assertEqual(table_model.get_row(original_row), table_model.get_row(dest_row + 4))
def test_cut_paste_sorts_order(self): # Qt can give is the order a user selected rows in, ensure it's always in the natural order table_model = TableModel() for entry_i in range(5): table_model.append_table_entry( RowEntries(sample_transmission=entry_i)) input_rows = [4, 0, 2] expected_rows = table_model.get_multiple_rows(sorted(input_rows)) table_model.cut_rows(input_rows) table_model.paste_rows([]) for i, row in enumerate(expected_rows): # 5 original rows - 3 cut rows = 2 rows remaining self.assertEqual(row, table_model.get_row(i + 2))
def test_copy_paste_append_mixed_selection_onto_mixed_selection(self): table_model = TableModel() num_elements = 5 for entry_i in range(num_elements): table_model.append_table_entry( RowEntries(sample_transmission=entry_i)) copied_indices = [0, 1, 3, 4] copied_rows = table_model.get_multiple_rows(copied_indices) table_model.copy_rows(copied_indices) table_model.paste_rows([0, 2, 3]) self.assertEqual(num_elements, table_model.get_number_of_rows()) for paste_index, original_items in enumerate(copied_rows): self.assertEqual(original_items, table_model.get_row(paste_index))
def test_copy_paste_sorts_order(self): # Qt can give is the order a user selected rows in, ensure it's always in the natural order table_model = TableModel() num_rows = 5 for entry_i in range(num_rows): table_model.append_table_entry( RowEntries(sample_transmission=entry_i)) table_model.copy_rows([4, 0, 2]) table_model.paste_rows([]) self.assertEqual(table_model.get_row(0), table_model.get_row(0 + num_rows)) self.assertEqual(table_model.get_row(2), table_model.get_row(1 + num_rows)) self.assertEqual(table_model.get_row(4), table_model.get_row(2 + num_rows))
def test_that_can_get_table_index_model_for_valid_index(self): table_model = TableModel() table_index_model = RowEntries() table_model.replace_table_entry(0, table_index_model) returned_model = table_model.get_row(0) self.assertEqual(table_index_model, returned_model)