class TestTableAddRemoveRows: '''Test append, extend, insert, pop, del, remove''' def setUp(self): self.headers = ['x', 'y', 'z'] self.t = Table(self.headers) def test_append(self): r = self.t.Row((1, 2, 3)) self.t.append(r) self.t.append((4, 5, 6)) self.t.append({'x': 7, 'y': 8, 'z': 9}) assert len(self.t) == 3 assert self.t[0] is r assert self.t[1] == (4, 5, 6) assert self.t[2] == (7, 8, 9) def test_extend(self): self.t.append((0, 0, 0)) rows = [[1, 2, 3], {'x': 4, 'y': 5, 'z': 6}, [7, 8]] self.t.extend(rows) assert len(self.t) == 4 assert self.t[0] == (0, 0, 0) assert self.t[1] == (1, 2, 3) assert self.t[2] == (4, 5, 6) assert self.t[3] == (7, 8, None) def test_insert(self): self.t.append((1, 2, 3)) self.t.append((4, 5, 6)) self.t.append((7, 8, 9)) self.t.insert(1, (-1, -1, -1)) assert len(self.t) == 4 assert self.t[0] == (1, 2, 3) assert self.t[1] == (-1, -1, -1) assert self.t[2] == (4, 5, 6) assert self.t[3] == (7, 8, 9) def test_insert_same_behavior_as_list_index(self): self.t.append((1, 2, 3)) self.t.insert(10, (4, 5, 6)) self.t.insert(-10, (7, 8, 9)) assert len(self.t) == 3 assert self.t[0] == (7, 8, 9) assert self.t[1] == (1, 2, 3) assert self.t[2] == (4, 5, 6) def test_pop(self): self.t.append((1, 2, 3)) self.t.append((4, 5, 6)) assert len(self.t) == 2 q = self.t.pop() assert len(self.t) == 1 assert q == (4, 5, 6) self.t.append(q) y = self.t.pop(0) assert len(self.t) == 1 assert y == (1, 2, 3) assert self.t[0] == q @raises(IndexError) def test_pop_bad_index(self): self.t.append((1, 2, 3)) q = self.t.pop(10) def test_del(self): self.t.append((1, 2, 3)) self.t.append((4, 5, 6)) self.t.append((7, 8, 9)) assert len(self.t) == 3 del self.t[1] assert len(self.t) == 2 assert self.t[0] == (1, 2, 3) assert self.t[-1] == (7, 8, 9) @raises(IndexError) def test_del_bad_index(self): self.t.append((1, 2, 3)) del self.t[10] def test_remove(self): self.t.append((1, 2, 3)) self.t.append((2, 3, 4)) self.t.append((1, 2, 3)) self.t.remove((1, 2, 3)) assert len(self.t) == 2 assert self.t[0] == (2, 3, 4) assert self.t[1] == (1, 2, 3) self.t.remove((1, 2, 3)) assert len(self.t) == 1 assert self.t[0] == (2, 3, 4) @raises(ValueError) def test_remove_invalid(self): self.t.append((1, 2, 3)) self.t.remove((2, 3, 4))
class TestTableUpdate: '''Test __setitem__''' def setUp(self): self.headers = ['x', 'y', 'z'] self.t = Table(self.headers) self.t.append((1, 2, 3)) self.t.append((4, 5, 6)) self.t.append((7, 8, 9)) self.t.append((10, 11, 12)) self.t.append((13, 14, 15)) self.t.append((16, 17, 18)) def test_set_row_by_index(self): row = self.t.Row((0, 0, 0)) self.t[0] = row self.t[1] = (-1, -1) self.t[2] = {'x': 10, 'z': 10} assert self.t[0] == (0, 0, 0) assert self.t[1] == (-1, -1, None) assert self.t[2] == (10, None, 10) def test_set_row_by_reverse_index(self): self.t[-2] = (100, 100, 100) assert self.t[4] == (100, 100, 100) @raises(IndexError) def test_set_row_bad_index(self): self.t[15] = (1, 1, 1) @raises(IndexError) def test_set_row_bad_reverse_index(self): self.t[-15] = (1, 1, 1) def test_set_row_slice(self): t2 = Table(self.headers) t2.extend([[-1, -1, -1], [-2, -2, -2], [-3, -3, -3]]) self.t[1::2] = t2 assert self.t[1] == (-1, -1, -1) assert self.t[3] == (-2, -2, -2) assert self.t[5] == (-3, -3, -3) assert self.t[1::2] == t2 def test_set_row_empty_slice(self): t2 = Table(self.headers) t2.extend([[-1, -1, -1], [-2, -2, -2], [-3, -3, -3]]) self.t[0:0] = t2 assert len(self.t) == 9 assert self.t[0] == (-1, -1, -1) assert self.t[1] == (-2, -2, -2) assert self.t[2] == (-3, -3, -3) @raises(TypeError) def test_set_row_slice_not_table(self): self.t[1::2] = [[-1, -1, -1], [-2, -2, -2], [-3, -3, -3]] @raises(TypeError) def test_set_row_slice_wrong_table_rows(self): t2 = Table(['p', 'd', 'q']) t2.extend([[-1, -1, -1], [-2, -2, -2], [-3, -3, -3]]) self.t[1::2] = t2 def test_set_cell_by_row_index(self): self.t[1, 1] = -99 assert self.t[1] == (4, -99, 6) def test_set_cell_by_row_reverse_index(self): self.t[-1, -1] = -99 assert self.t[5] == (16, 17, -99) def test_set_cell_by_row_name(self): self.t[0, 'y'] = -99 assert self.t[0] == (1, -99, 3) @raises(IndexError) def test_set_cell_by_row_bad_index(self): self.t[0, 25] = -99 @raises(IndexError) def test_set_cell_by_row_bad_reverse_index(self): self.t[0, -25] = -99 @raises(KeyError) def test_set_cell_by_row_bad_name(self): self.t[0, 'unknown'] = -99 @raises(TypeError) def test_set_cell_by_bad_tuple(self): self.t[0, 1, 2] = (1, 1, 1)