import unittest from pdf_table_to_docx.extractor import _merge_tables from pdf_table_to_docx.table_parser import CellInfo, TableInfo class PdfCrossPageMergeTests(unittest.TestCase): def test_continued_row_does_not_swallow_next_row_label(self): """跨页续行并入上一行后,纵向合并跨度必须收回。""" def cell(text, row_span=1, col_span=1): return CellInfo( text=text, row_span=row_span, col_span=col_span, ) t1 = TableInfo( rows=4, cols=2, cells=[ [cell("项目内容"), cell("要求")], [cell("投标文件内容"), cell("要求1")], [cell("投标有效期"), cell("90天")], [cell("投标报价"), cell("前半段")], ], ) t2 = TableInfo( rows=2, cols=2, cells=[ [cell(""), cell("后半段")], [cell("服务期限"), cell("三年")], ], ) merged = _merge_tables(t1, t2) self.assertEqual(merged.rows, 5) quote_cell = merged.cells[3][0] self.assertEqual(quote_cell.text, "投标报价") self.assertEqual(quote_cell.row_span, 1) self.assertIn("前半段", merged.cells[3][1].text) self.assertIn("后半段", merged.cells[3][1].text) self.assertEqual(merged.cells[4][0].text, "服务期限") for row in merged.cells: for cell in row: self.assertLessEqual(cell.row_span, 1) if __name__ == "__main__": unittest.main()