diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-29 08:56:42 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-29 08:56:42 +0800 |
| commit | a578791b0dd8ca95fba3af6f3c2f39c816bd7e52 (patch) | |
| tree | af71c5a7d69087a59f5f5116134c602f65960ae0 /src/LivingVillage.Desktop.Tests/P67TaskTargetUiTests.fs | |
| parent | 8cfdb2aa8b19595f5fa7870c4ad3e6c4c20c421e (diff) | |
| download | living-village-a578791b0dd8ca95fba3af6f3c2f39c816bd7e52.tar.gz | |
p67: 每日任务面板展示目标(TargetNpc/TargetTile 可见化)
- TaskRuntime.targetText/taskLine:帮工→「村民 N」、翻土→「自家地块」,
无目标时与旧任务行文案逐字节一致(不加箭头/目标名)
- Interaction TaskPanel 任务行改用 taskLine(其余面板/文案不动)
- 字形表新增 地 块 →(343 字,图集重生成);ChineseText.requiredUiLabels 增补
- P67TaskTargetUiTests(5 例,红先)+ PrototypeTests 计数同步 340→343
- LV_P67_SHOT 证据钩子(有目标/无目标各一帧)+ scripts/analyze-p67.py
- Desktop 333/333、Kernel 119/119;digest 953775FA…7F6C ×3 PASS;未动 Kernel/Sim
Diffstat (limited to 'src/LivingVillage.Desktop.Tests/P67TaskTargetUiTests.fs')
| -rw-r--r-- | src/LivingVillage.Desktop.Tests/P67TaskTargetUiTests.fs | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/LivingVillage.Desktop.Tests/P67TaskTargetUiTests.fs b/src/LivingVillage.Desktop.Tests/P67TaskTargetUiTests.fs new file mode 100644 index 0000000..f6e7168 --- /dev/null +++ b/src/LivingVillage.Desktop.Tests/P67TaskTargetUiTests.fs @@ -0,0 +1,74 @@ +namespace LivingVillage.Desktop.Tests + +open Microsoft.VisualStudio.TestTools.UnitTesting +open LivingVillage.Kernel +open LivingVillage.Kernel.Sim +open LivingVillage.Desktop + +/// P67(设计 §2.4-3 收口后的可见化):把 P66 定点的 TargetNpc/TargetTile +/// 展示到玩家可见的每日任务面板;无目标时文案逐字节不变;新字形(地/块/→)有覆盖断言。 +[<TestClass>] +type P67TaskTargetUiTests () = + + let world = + WorldBootstrap.initialWorldWithOccupation false 42UL 30 (Some(Occupation.stateOf Occupation.Farmer)) + + let task template npc tile state : Occupation.DailyTask = + { TemplateId = template + TargetNpc = npc + TargetTile = tile + OfferedTick = 0L + DueTick = 0L + State = state } + + let farmerState = Occupation.stateOf Occupation.Farmer + + let taskPanelView (state: Occupation.State option) : M5View = + { M5Interaction.initial with Panel = TaskPanel; Task = state; Status = "ready" } + + [<TestMethod>] + member _.HelpWorkTargetShowsVillagerName () = + let target = task Occupation.HelpWork (Some(Sim.NpcId 9)) None Occupation.Active + Assert.AreEqual<string>("帮工:进行中 → 村民 9", TaskRuntime.taskLine target "进行中") + + [<TestMethod>] + member _.TillSoilTargetShowsHomePlot () = + let target = task Occupation.TillSoil None (Some(33, 25)) Occupation.Offered + Assert.AreEqual<string>("翻土:待接受 → 自家地块", TaskRuntime.taskLine target "待接受") + + [<TestMethod>] + member _.NoTargetKeepsLegacyCopy () = + let helpWildcard = task Occupation.HelpWork None None Occupation.Active + Assert.AreEqual<string>("帮工:进行中", TaskRuntime.taskLine helpWildcard "进行中") + let nightWildcard = task Occupation.NightCatch None None Occupation.Offered + Assert.AreEqual<string>("夜捕:待接受", TaskRuntime.taskLine nightWildcard "待接受") + let tillWildcard = task Occupation.TillSoil None None Occupation.Done + Assert.AreEqual<string>("翻土:已完成", TaskRuntime.taskLine tillWildcard "已完成") + + [<TestMethod>] + member _.TaskPanelShowsTargetLineAndKeepsWildcardCopy () = + let targeted = + { farmerState with + Today = Some(task Occupation.HelpWork (Some(Sim.NpcId 7)) None Occupation.Active) } + let targetedLines = M5Interaction.panelLines world (taskPanelView (Some targeted)) + CollectionAssert.Contains( + ResizeArray(targetedLines), + "帮工:进行中 → 村民 7", + sprintf "目标面板行缺失:%A" targetedLines) + let wildcard = + { farmerState with Today = Some(task Occupation.HelpWork None None Occupation.Active) } + let wildcardLines = M5Interaction.panelLines world (taskPanelView (Some wildcard)) + CollectionAssert.Contains(ResizeArray(wildcardLines), "帮工:进行中") + Assert.IsFalse( + wildcardLines |> List.exists (fun line -> line.Contains '→'), + sprintf "无目标面板不应出现目标箭头:%A" wildcardLines) + + [<TestMethod>] + member _.TargetLinesAreFullyRenderableIncludingArrow () = + let lines = + [ TaskRuntime.taskLine (task Occupation.HelpWork (Some(Sim.NpcId 9)) None Occupation.Active) "进行中" + TaskRuntime.taskLine (task Occupation.TillSoil None (Some(34, 25)) Occupation.Offered) "待接受" + TaskRuntime.taskLine (task Occupation.HelpWork None None Occupation.Active) "进行中" ] + for line in lines do + Assert.IsTrue(PixelText.isRenderable line, sprintf "任务面板文案有缺字/不可渲染:%s" line) + Assert.IsTrue(CjkGlyphAtlas.contains '→', "箭头字形 → 未入图集") |
