53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
"""工程量清单本地分析单元测试。"""
|
|
import unittest
|
|
|
|
from utils.bill_analysis import (
|
|
analyze_boq_pages,
|
|
filter_bill_pages,
|
|
parse_bill_text,
|
|
)
|
|
|
|
|
|
class TestParseBillText(unittest.TestCase):
|
|
def test_code_name_unit_qty(self):
|
|
text = '010101001001 挖土方 m3 100.5 土壤类别:三类土'
|
|
r = parse_bill_text(text)
|
|
self.assertIn('categories', r)
|
|
self.assertTrue(r['categories'])
|
|
cat = r['categories'][0]
|
|
self.assertEqual(cat['name'], '未分类')
|
|
self.assertEqual(len(cat['items']), 1)
|
|
it = cat['items'][0]
|
|
self.assertEqual(it['code'], '010101001001')
|
|
self.assertIn('挖土', it['name'])
|
|
self.assertEqual(it['unit'], 'm3')
|
|
self.assertEqual(it['quantity'], '100.5')
|
|
|
|
def test_hierarchical_line_prefix(self):
|
|
text = '1.1 010101001001 基础开挖 m3 50'
|
|
r = parse_bill_text(text)
|
|
it = r['categories'][0]['items'][0]
|
|
self.assertEqual(it['code'], '010101001001')
|
|
|
|
|
|
class TestFilterBillPages(unittest.TestCase):
|
|
def test_two_pages_gap_fill(self):
|
|
p0 = '目录 前言'
|
|
p1 = '分部分项工程量清单\n项目编码 项目名称 工程量\n010101001001 项 m3 1'
|
|
p2 = '续表无表头\n010101002001 土 m2 2'
|
|
p3 = '规费 税金 社会保险费 住房公积金 其他说明'
|
|
pages, meta = filter_bill_pages([p0, p1, p2, p3])
|
|
self.assertEqual(meta['total_pages'], 4)
|
|
self.assertGreaterEqual(len(pages), 2)
|
|
merged = '\n'.join(pages)
|
|
self.assertIn('010101001001', merged)
|
|
self.assertIn('010101002001', merged)
|
|
|
|
def test_analyze_scanned_empty(self):
|
|
r = analyze_boq_pages(['', ' ', ''])
|
|
self.assertTrue(r.get('scanned'))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|