def test_add_rows_rerun(self): rq = ReportQueue() self.assertTrue(rq.is_empty()) rq.enqueue(INIT_MSG) # Simulate rerun for i in range(2): TEXT_DELTA_MSG1.delta.id = 0 rq.enqueue(TEXT_DELTA_MSG1) DF_DELTA_MSG.delta.id = 1 rq.enqueue(DF_DELTA_MSG) ADD_ROWS_MSG.delta.id = 1 rq.enqueue(ADD_ROWS_MSG) queue = rq.flush() self.assertEqual(len(queue), 3) self.assertTrue(queue[0].initialize.config.sharing_enabled) self.assertEqual(queue[1].delta.id, 0) self.assertEqual(queue[1].delta.new_element.text.body, 'text1') self.assertEqual(queue[2].delta.id, 1) col0 = queue[2].delta.new_element.data_frame.data.cols[0].int64s.data col1 = queue[2].delta.new_element.data_frame.data.cols[1].int64s.data self.assertEqual(col0, [0, 1, 2, 3, 4, 5]) self.assertEqual(col1, [10, 11, 12, 13, 14, 15])
def test_simple_add_rows(self): rq = ReportQueue() self.assertTrue(rq.is_empty()) rq.enqueue(INIT_MSG) TEXT_DELTA_MSG1.metadata.delta_id = 0 rq.enqueue(TEXT_DELTA_MSG1) DF_DELTA_MSG.metadata.delta_id = 1 rq.enqueue(DF_DELTA_MSG) ADD_ROWS_MSG.metadata.delta_id = 1 rq.enqueue(ADD_ROWS_MSG) queue = rq.flush() self.assertEqual(len(queue), 3) self.assertTrue(queue[0].initialize.config.sharing_enabled) self.assertEqual(queue[1].metadata.delta_id, 0) self.assertEqual(queue[1].delta.new_element.text.body, "text1") self.assertEqual(queue[2].metadata.delta_id, 1) col0 = queue[2].delta.new_element.data_frame.data.cols[0].int64s.data col1 = queue[2].delta.new_element.data_frame.data.cols[1].int64s.data self.assertEqual(col0, [0, 1, 2, 3, 4, 5]) self.assertEqual(col1, [10, 11, 12, 13, 14, 15])
def test_multiple_containers(self): """Deltas should only be coalesced if they're in the same container""" rq = ReportQueue() self.assertTrue(rq.is_empty()) rq.enqueue(INIT_MSG) def enqueue_deltas(container, path): # We deep-copy the protos because we mutate each one # multiple times. msg = copy.deepcopy(TEXT_DELTA_MSG1) msg.delta.id = 0 msg.delta.parent_block.container = container msg.delta.parent_block.path[:] = path rq.enqueue(msg) msg = copy.deepcopy(DF_DELTA_MSG) msg.delta.id = 1 msg.delta.parent_block.container = container msg.delta.parent_block.path[:] = path rq.enqueue(msg) msg = copy.deepcopy(ADD_ROWS_MSG) msg.delta.id = 1 msg.delta.parent_block.container = container msg.delta.parent_block.path[:] = path rq.enqueue(msg) enqueue_deltas(BlockPath.MAIN, []) enqueue_deltas(BlockPath.SIDEBAR, [0, 0, 1]) def assert_deltas(container, path, idx): self.assertEqual(0, queue[idx].delta.id) self.assertEqual(container, queue[idx].delta.parent_block.container) self.assertEqual(path, queue[idx].delta.parent_block.path) self.assertEqual('text1', queue[idx].delta.new_element.text.body) self.assertEqual(1, queue[idx + 1].delta.id) self.assertEqual(container, queue[idx + 1].delta.parent_block.container) self.assertEqual(path, queue[idx + 1].delta.parent_block.path) col0 = queue[idx + 1] \ .delta.new_element.data_frame.data.cols[0].int64s.data col1 = queue[idx + 1] \ .delta.new_element.data_frame.data.cols[1].int64s.data self.assertEqual([0, 1, 2, 3, 4, 5], col0) self.assertEqual([10, 11, 12, 13, 14, 15], col1) queue = rq.flush() self.assertEqual(5, len(queue)) self.assertTrue(queue[0].initialize.config.sharing_enabled) assert_deltas(BlockPath.MAIN, [], 1) assert_deltas(BlockPath.SIDEBAR, [0, 0, 1], 3)
def test_replace_element(self): rq = ReportQueue() self.assertTrue(rq.is_empty()) rq.enqueue(INIT_MSG) TEXT_DELTA_MSG1.metadata.delta_id = 0 rq.enqueue(TEXT_DELTA_MSG1) TEXT_DELTA_MSG2.metadata.delta_id = 0 rq.enqueue(TEXT_DELTA_MSG2) queue = rq.flush() self.assertEqual(len(queue), 2) self.assertTrue(queue[0].initialize.config.sharing_enabled) self.assertEqual(queue[1].metadata.delta_id, 0) self.assertEqual(queue[1].delta.new_element.text.body, "text2")