def test_row_block_recalculate_bounds(self): rb = RowBlock([Change(5, pn) for pn in ['3', '1', '5']]) self.assertRaises(IndexError, lambda: rb.recalculate(-1)) rb.recalculate(0) rb.recalculate(3) self.assertRaises(IndexError, lambda: rb.recalculate(4))
def test_row_block_set_changes(self): rb = RowBlock([Change(5, pn) for pn in ['3', '1', '5']], '54321') new_changes = [Change(5, pn) for pn in ['5', '3']] rb.changes = new_changes self.assertEqual(rb.changes, new_changes) self.assertEqual(rb.size, 3) self.assertEqual(list(rb), ['54321', '45231', '54213'])
def test_row_block_set_changes(self): rb = RowBlock(*[Change(5, pn) for pn in ['3', '1', '5']], starting_row='54321') new_changes = [Change(5, pn) for pn in ['5', '3']] rb.changes = new_changes self.assertEqual(rb.changes, new_changes) self.assertEqual(rb.size, 3) self.assertEqual(list(rb), ['54321', '45231', '54213'])
def test_row_block_set_start(self): changes = [] changes.append(Change(5, '3')) changes.append(Change(5, '1')) changes.append(Change(5, '5')) rb = RowBlock(changes) rb.set_start('54321') rb.recalculate() self.assertEqual(rb[2], '43521')
def test_row_block_subscript_bounds(self): rb = RowBlock([Change(5, pn) for pn in ['3', '1', '5']]) self.assertRaises(IndexError, lambda: rb[-1]) self.assertEqual(rb[0], '12345') self.assertEqual(rb[3], '32415') self.assertRaises(IndexError, lambda: rb[4]) self.assertRaises(IndexError, lambda: rb.__setitem__(-1, Row(5))) rb[0] = Row(5) # Should succeed rb[3] = Row(5) self.assertRaises(IndexError, lambda: rb.__setitem__(4, Row(5)))
def test_row_block_subscript_bounds(self): rb = RowBlock(*[Change(5, pn) for pn in ['3', '1', '5']]) self.assertRaises(IndexError, lambda: rb[-1]) self.assertEqual(rb[0], '12345') self.assertEqual(rb[3], '32415') self.assertRaises(IndexError, lambda: rb[4]) self.assertRaises(IndexError, lambda: rb.__setitem__(-1, Row(5))) rb[0] = Row(5) # Should succeed rb[3] = Row(5) self.assertRaises(IndexError, lambda: rb.__setitem__(4, Row(5)))
def test_row_block_constructors(self): changes = [] changes.append(Change(5, '3')) changes.append(Change(5, '1')) changes.append(Change(5, '5')) rb = RowBlock(*changes) self.assertEqual(rb.size, 4) self.assertEqual(rb[0], '12345') self.assertEqual(rb[1], '21354') self.assertEqual(rb[2], '23145') self.assertEqual(rb[3], '32415') rb = RowBlock(*changes, starting_row='54321') self.assertEqual(rb[2], '43521')
def test_row_block_recalculate(self): changes = [] changes.append(Change(5, '3')) changes.append(Change(5, '1')) changes.append(Change(5, '5')) rb = RowBlock(*changes) rb[2] = '54321' rb.recalculate(2) self.assertEqual(rb.size, 4) self.assertEqual(rb[0], '12345') self.assertEqual(rb[1], '21354') self.assertEqual(rb[2], '54321') self.assertEqual(rb[3], '45231')
def test_row_block_recalculate(self): changes = [] changes.append(Change(5, '3')) changes.append(Change(5, '1')) changes.append(Change(5, '5')) rb = RowBlock(changes) rb[2] = '54321' rb.recalculate(2) self.assertEqual(rb.size, 4) self.assertEqual(rb[0], '12345') self.assertEqual(rb[1], '21354') self.assertEqual(rb[2], '54321') self.assertEqual(rb[3], '45231')
def test_row_block_set_changes_exceptions(self): rb = RowBlock() def assign_changes(changes): rb.changes = changes self.assertRaises(TypeError, lambda: assign_changes(self)) self.assertRaises(TypeError, lambda: assign_changes([self]))
def test_row_block_changes_not_directly_mutable(self): changes_in = [Change(5, pn) for pn in ['3', '1', '5']] rb = RowBlock(*changes_in) # Make a local reference to rb.changes, and modify it... changes_out = rb.changes changes_out.pop() # ... then make sure the original hasn't changed self.assertEqual(len(changes_in), 3) self.assertEqual(len(rb.changes), 3) self.assertEqual(rb.changes, changes_in)
def test_row_block_recalculate_bounds(self): rb = RowBlock(*[Change(5, pn) for pn in ['3', '1', '5']]) self.assertRaises(IndexError, lambda: rb.recalculate(-1)) rb.recalculate(0) rb.recalculate(3) self.assertRaises(IndexError, lambda: rb.recalculate(4))
def __init__(self, method_name, method_object, call_symbol, call_object, starting_lead_head): self.method_name = method_name self.method_object = method_object self.call_symbol = call_symbol self.call_object = call_object places = list(method_object) if call_object is not None: places[-1] = call_object self.rows = RowBlock(places, starting_row=starting_lead_head) self.lead_head = self.rows[self.rows.size - 1]
def test_row_block_set_start(self): changes = [] changes.append(Change(5, '3')) changes.append(Change(5, '1')) changes.append(Change(5, '5')) rb = RowBlock(*changes) rb.set_start('54321') rb.recalculate() self.assertEqual(rb[2], '43521')
def test_row_block_get_changes(self): changes = [] rb = RowBlock(*changes) self.assertEqual(rb.changes, changes)
def test_row_block_iterator(self): rb = RowBlock(*[Change(5, pn) for pn in ['3', '1', '5']]) self.assertEqual(list(rb), ['12345', '21354', '23145', '32415'])
def test_row_block_constructor_exceptions(self): self.assertRaises(TypeError, lambda: RowBlock(self)) self.assertRaises(TypeError, lambda: RowBlock(starting_row=self))