"""按共同基线组合独立修改;不推测冲突,不丢掉空白和样式。""" import pytest from muse.正式变更.接口 import 变更错误 from muse.正文写作.接口 import 三方合并, 文本节点, 正文草稿, 段落, 段落差异 def 稿(first="开头", last="结尾"): return 正文草稿( ( 段落("p1", (文本节点(first, ("emphasis",)),)), 段落("p2", ()), 段落("p3", (文本节点(last),)), ) ) @pytest.mark.case_id( "NC-w23-233001", environment="默认离线", given="有确切共同基线的正文分支", when="选择差异、修改两端或按同命令重放", then=["部分选择只合并该项且目标独立修改保持"], contract="docs/系统架构/新版设计/模块设计/B05-正文写作.md", ) 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] @pytest.mark.case_id( "NC-w23-233002", environment="默认离线", given="有确切共同基线的正文分支", when="选择差异、修改两端或按同命令重放", then=["目标插入导致位移仍精确合并原段"], contract="docs/系统架构/新版设计/模块设计/B05-正文写作.md", ) 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.case_id( "NC-w23-233003", environment="默认离线", given="有确切共同基线的正文分支", when="选择差异、修改两端或按同命令重放", then=["重叠修改或同位插入冲突不替作者决策"], contract="docs/系统架构/新版设计/模块设计/B05-正文写作.md", ) @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"],)) @pytest.mark.case_id( "NC-w23-233004", environment="默认离线", given="有确切共同基线的正文分支", when="选择差异、修改两端或按同命令重放", then=["相同修改仅保留一次且未知差异拒绝"], contract="docs/系统架构/新版设计/模块设计/B05-正文写作.md", ) def test_相同修改仅保留一次且未知差异拒绝__233004(): base, edited = 稿(), 稿("两边相同") assert 三方合并(base, edited, edited, (段落差异(base, edited)[0]["change_id"],)) == edited with pytest.raises(变更错误): 三方合并(base, edited, base, ("not-a-change",))