Example #1
0
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))
Example #2
0
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)