* [unittest] add forEachDocBlockTest method to docTest class and update tests to use it.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user