接续 88dd570,保存 W20–W24 已实现的共享接口、业务入口、迁移、工作台、测试与文档。 W20/W22/W23 保持 in_progress,W21/W24 保持 verified;此提交不宣称方法或规则正式启用、多轮返修、真实角色评测完成。 W25 新增实验、标定、逐调用交付与角色执行及其迁移/测试/索引留在实施工作树,原有私人和旧实现保留项不纳入。 验证:离线 571、前端 33 通过;PG 469 项通过、2 项浏览器未启用,2 项误带入的 W25 用例已移出本提交;最终任务与交付边界 37 项通过。make 检查、最终类型、84 项资源及 diff 检查通过。未重跑浏览器或 Pi 宿主,不以合成调用认证外部模型效果。 独立整体审查四维通过;证据保存在 R2-20260909/提交W20-W24。
57 lines
2.3 KiB
Python
57 lines
2.3 KiB
Python
"""按共同基线组合独立修改;不推测冲突,不丢掉空白和样式。"""
|
|
|
|
import pytest
|
|
|
|
from muse.正式变更.接口 import 变更错误
|
|
from muse.正文写作.接口 import 三方合并, 文本节点, 正文草稿, 段落, 段落差异
|
|
|
|
|
|
def 稿(first="开头", last="结尾"):
|
|
return 正文草稿(
|
|
(
|
|
段落("p1", (文本节点(first, ("emphasis",)),)),
|
|
段落("p2", ()),
|
|
段落("p3", (文本节点(last),)),
|
|
)
|
|
)
|
|
|
|
|
|
def test_部分选择只合并该项且目标独立修改保持__233001():
|
|
base = 稿()
|
|
source = 稿("支线开头", "未选择的支线结尾")
|
|
target = 稿(last="作者主线结尾")
|
|
choices = 段落差异(base, source)
|
|
result = 三方合并(base, source, target, (choices[0]["change_id"],))
|
|
assert result == 稿("支线开头", "作者主线结尾")
|
|
assert result.paragraphs[1] == base.paragraphs[1]
|
|
|
|
|
|
def test_目标插入导致位移仍精确合并原段__233002():
|
|
base, source = 稿(), 稿(last="支线结尾")
|
|
extra = 段落("extra", (文本节点("作者加的前言🙂e\u0301"),))
|
|
target = 正文草稿((extra, *base.paragraphs))
|
|
result = 三方合并(base, source, target, (段落差异(base, source)[0]["change_id"],))
|
|
assert result == 正文草稿((extra, *source.paragraphs))
|
|
assert base == 稿()
|
|
|
|
|
|
@pytest.mark.parametrize("insert", [False, True])
|
|
def test_重叠修改或同位插入冲突不替作者决策__233003(insert):
|
|
base, source, target = 稿(), 稿("支线开头"), 稿("主线开头")
|
|
if insert:
|
|
source = 正文草稿(
|
|
(base.paragraphs[0], 段落("s", (文本节点("支线插入"),)), *base.paragraphs[1:])
|
|
)
|
|
target = 正文草稿(
|
|
(base.paragraphs[0], 段落("t", (文本节点("主线插入"),)), *base.paragraphs[1:])
|
|
)
|
|
with pytest.raises(变更错误, match="冲突"):
|
|
三方合并(base, source, target, (段落差异(base, source)[0]["change_id"],))
|
|
|
|
|
|
def test_相同修改仅保留一次且未知差异拒绝__233004():
|
|
base, edited = 稿(), 稿("两边相同")
|
|
assert 三方合并(base, edited, edited, (段落差异(base, edited)[0]["change_id"],)) == edited
|
|
with pytest.raises(变更错误):
|
|
三方合并(base, edited, base, ("not-a-change",))
|