From c29e1f85dea137cd3974c52fdd8093d79a73d779 Mon Sep 17 00:00:00 2001 From: sunhao Date: Mon, 22 Dec 2025 10:48:02 +0800 Subject: [PATCH] * [unittest] add forEachDocBlockTest method to docTest class and update tests to use it. --- module/doc/test/lib/doc.unittest.class.php | 5 +++++ module/doc/test/model/foreachblock.php | 26 +++++++++++----------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/module/doc/test/lib/doc.unittest.class.php b/module/doc/test/lib/doc.unittest.class.php index fbb0b07286..f7f9ad8300 100755 --- a/module/doc/test/lib/doc.unittest.class.php +++ b/module/doc/test/lib/doc.unittest.class.php @@ -5597,4 +5597,9 @@ class docTest if(dao::isError()) return dao::getError(); return $result; } + + public function forEachDocBlockTest(array $rawContent, callable $callback, mixed $data = null, string $flavours = '', string $types = 'block', ?array $props = null, int $level = 0, int $index = 0): mixed + { + return docModel::forEachDocBlock($rawContent, $callback, $data, $flavours, $types, $props, $level, $index); + } } diff --git a/module/doc/test/model/foreachblock.php b/module/doc/test/model/foreachblock.php index c7b2e1a73c..cfc1ad1c5b 100644 --- a/module/doc/test/model/foreachblock.php +++ b/module/doc/test/model/foreachblock.php @@ -3,7 +3,7 @@ /** -title=测试 docModel::forEachDocBlock(); +title=测试 $doc->forEachDocBlockTest(); timeout=0 cid=16080 @@ -29,7 +29,7 @@ su('admin'); // 3. 加载模型 global $tester; -$docModel = $tester->loadModel('doc'); +$doc = new docTest(); // 5. 准备测试数据 $testDocContent = json_decode('{"type":"page","meta":{"id":"gv59xPh7Ss","title":"Test doc 2","createDate":1735009861666,"tags":[]},"blocks":{"type":"block","id":"bFt3Zebq4C","flavour":"affine:page","version":2,"props":{"title":{"$blocksuite:internal:text$":true,"delta":[{"insert":"Test doc 2"}]}},"children":[{"type":"block","id":"3ZDtESrTwV","flavour":"affine:surface","version":5,"props":{"elements":{}},"children":[]},{"type":"block","id":"2uKZ34xemh","flavour":"affine:note","version":1,"props":{"xywh":"[0,0,498,92]","background":"--affine-note-background-white","index":"a0","lockedBySelf":false,"hidden":false,"displayMode":"both","edgeless":{"style":{"borderRadius":8,"borderSize":4,"borderStyle":"none","shadowType":"--affine-note-shadow-box"}}},"children":[{"type":"block","id":"YUKg2P9jRd","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"h1","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"总标题"}]},"collapsed":false},"children":[]},{"type":"block","id":"57fqsxdUPx","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"h2","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"标题 1"}]},"collapsed":false},"children":[]},{"type":"block","id":"8K8dPj1sCM","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"text","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"test"}]},"collapsed":false},"children":[]},{"type":"block","id":"t2QW0-7wjo","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"h3","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"标题 1.1"}]},"collapsed":false},"children":[]},{"type":"block","id":"cSxIMNwE5r","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"text","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"test2"}]},"collapsed":false},"children":[]},{"type":"block","id":"OLPb8QmDkm","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"h2","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"标题 2"}]},"collapsed":false},"children":[]},{"type":"block","id":"UtmatxoW-t","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"text","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"test3"}]},"collapsed":false},"children":[]},{"type":"block","id":"6dnzn0y_X0","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"h3","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"标题 2.1"}]},"collapsed":false},"children":[]},{"type":"block","id":"J7tikZIhh0","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"text","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"test3"}]},"collapsed":false},"children":[]},{"type":"block","id":"FUUm-Oy6iC","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"h3","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"标题 2.2"}]},"collapsed":false},"children":[]},{"type":"block","id":"AGXLCs2K9D","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"h4","text":{"$blocksuite:internal:text$":true,"delta":[{"insert":"标题 2.2.1"}]},"collapsed":false},"children":[]},{"type":"block","id":"PWCMwmaZqD","flavour":"affine:paragraph","version":1,"props":{"align":"left","type":"text","text":{"$blocksuite:internal:text$":true,"delta":[]},"collapsed":false},"children":[]}]}]}}', true); @@ -60,20 +60,20 @@ $getHeadingTextCallback = function($block, $data, $depth, $level, $index) // 7. 🔴 强制要求:必须包含至少5个测试步骤 // 步骤1:正常情况-遍历所有区块并计数 -$result1 = docModel::forEachDocBlock($testDocContent, $countCallback, 0); +$result1 = $doc->forEachDocBlockTest($testDocContent, $countCallback, 0); r($result1) && p() && e('15'); // 步骤2:正常情况-过滤特定flavour(affine:paragraph)获取区块数量 -$result2 = docModel::forEachDocBlock($testDocContent, $countCallback, 0, 'affine:paragraph'); +$result2 = $doc->forEachDocBlockTest($testDocContent, $countCallback, 0, 'affine:paragraph'); r($result2) && p() && e('12'); // 步骤3:正常情况-过滤标题类型(h1)获取区块数量 -$result3 = docModel::forEachDocBlock($testDocContent, $countCallback, 0, 'affine:paragraph', 'block', array('type' => 'h1')); +$result3 = $doc->forEachDocBlockTest($testDocContent, $countCallback, 0, 'affine:paragraph', 'block', array('type' => 'h1')); r($result3) && p() && e('1'); // 步骤4:正常情况-过滤多个标题类型(h2,h3)获取区块数量 -$result4H2 = docModel::forEachDocBlock($testDocContent, $countCallback, 0, 'affine:paragraph', 'block', array('type' => 'h2')); -$result4H3 = docModel::forEachDocBlock($testDocContent, $countCallback, 0, 'affine:paragraph', 'block', array('type' => 'h3')); +$result4H2 = $doc->forEachDocBlockTest($testDocContent, $countCallback, 0, 'affine:paragraph', 'block', array('type' => 'h2')); +$result4H3 = $doc->forEachDocBlockTest($testDocContent, $countCallback, 0, 'affine:paragraph', 'block', array('type' => 'h3')); $result4 = $result4H2 + $result4H3; r($result4) && p() && e('5'); @@ -82,28 +82,28 @@ $headingTypes = array('h1', 'h2', 'h3', 'h4'); $allHeadings = array(); foreach($headingTypes as $type) { - $headings = docModel::forEachDocBlock($testDocContent, $getHeadingTextCallback, array(), 'affine:paragraph', 'block', array('type' => $type)); + $headings = $doc->forEachDocBlockTest($testDocContent, $getHeadingTextCallback, array(), 'affine:paragraph', 'block', array('type' => $type)); $allHeadings = array_merge($allHeadings, $headings); } r(implode(',', $allHeadings)) && p() && e('总标题,标题 1,标题 2,标题 1.1,标题 2.1,标题 2.2,标题 2.2.1'); // 步骤6:边界值-空内容返回初始数据 $emptyContent = array(); -$result6 = docModel::forEachDocBlock($emptyContent, $countCallback, 0); +$result6 = $doc->forEachDocBlockTest($emptyContent, $countCallback, 0); r($result6) && p() && e('0'); // 步骤7:边界值-无匹配flavour返回初始数据 -$result7 = docModel::forEachDocBlock($testDocContent, $countCallback, 0, 'non:existent:flavour'); +$result7 = $doc->forEachDocBlockTest($testDocContent, $countCallback, 0, 'non:existent:flavour'); r($result7) && p() && e('0'); // 步骤8:正常情况-获取h4标题内容 -$h4Headings = docModel::forEachDocBlock($testDocContent, $getHeadingTextCallback, array(), 'affine:paragraph', 'block', array('type' => 'h4')); +$h4Headings = $doc->forEachDocBlockTest($testDocContent, $getHeadingTextCallback, array(), 'affine:paragraph', 'block', array('type' => 'h4')); r(implode(',', $h4Headings)) && p() && e('标题 2.2.1'); // 步骤9:正常情况-过滤affine:note获取区块数量 -$result9 = docModel::forEachDocBlock($testDocContent, $countCallback, 0, 'affine:note'); +$result9 = $doc->forEachDocBlockTest($testDocContent, $countCallback, 0, 'affine:note'); r($result9) && p() && e('1'); // 步骤10:正常情况-过滤affine:surface获取区块数量 -$result10 = docModel::forEachDocBlock($testDocContent, $countCallback, 0, 'affine:surface'); +$result10 = $doc->forEachDocBlockTest($testDocContent, $countCallback, 0, 'affine:surface'); r($result10) && p() && e('1');