diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-21 22:57:50 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-21 22:57:50 +0800 |
| commit | 60bbc83d9a1d047933e4128e7b48e1c61c925a14 (patch) | |
| tree | c41b351535add285f8644d8703fa6c4f1799eeb3 /src/LivingVillage.Desktop.Tests/M6bTests.fs | |
| parent | e1d8d45cf08b4f30e33299eb40e865729e7adfd2 (diff) | |
| download | living-village-60bbc83d9a1d047933e4128e7b48e1c61c925a14.tar.gz | |
feat(desktop): P15 开局职业选择页——新档四选一+暂不选择,接入 v3 存档与当日任务
- MenuState:新增 OccupationSelect 页与 StartNewGameWith 命令;occupationOptions=农夫/渔夫/货郎/书生/暂不选择,
默认高亮「暂不选择」= 不写职业的旧行为;四选一确认后发 StartNewGameWith,ESC 返回主菜单(既有 MainMenu
行为与测试不变)。
- WorldBootstrap.occupationStateFor/refreshOccupationToday:按 seed+职业种子生成/跨日刷新当日 Offered 任务。
- Game:主菜单「开始新游戏」→ 职业选择页;选定后 initialWorldWithOccupation 注入 Money/Energy 与 Today,
m5View.Task 随之写入 v3 存档;游玩中按日刷新;autoplay/flow 默认走「暂不选择」保持旧演示行为;DrawMenu 渲染职业页。
- 测试 Desktop 93(新增 6):职业页选项顺序/默认 None/标签、确认命令与返回、bootstrap 四职业 Money/Energy+当日池内
Offered 任务、四职业 v3 round-trip(职业+任务逐字段)、T 面板显示所选职业的模板名与「待接受」、跨日刷新保持同日。
Diffstat (limited to 'src/LivingVillage.Desktop.Tests/M6bTests.fs')
| -rw-r--r-- | src/LivingVillage.Desktop.Tests/M6bTests.fs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/LivingVillage.Desktop.Tests/M6bTests.fs b/src/LivingVillage.Desktop.Tests/M6bTests.fs index 6ae0634..5aea9bd 100644 --- a/src/LivingVillage.Desktop.Tests/M6bTests.fs +++ b/src/LivingVillage.Desktop.Tests/M6bTests.fs @@ -80,3 +80,33 @@ type M6bMenuTests () = Assert.AreEqual<string option>(Some "missing save", failed.Error) Assert.AreEqual<MenuPage>(MainMenu, returned.Page) Assert.AreEqual<MenuCommand>(NoCommand, command) + + // ---- P15 开局职业选择页 ---- + + [<TestMethod>] + member _.OccupationSelectOffersFourKindsThenNoneAndDefaultsToNone () = + let page = MenuState.openOccupationSelect (MenuState.create SimulationControl.initial false) + + Assert.AreEqual<MenuPage>(OccupationSelect, page.Page) + Assert.AreEqual<Occupation.Kind option list>( + [ Some Occupation.Farmer; Some Occupation.Fisher; Some Occupation.Peddler; Some Occupation.Scholar; None ], + MenuState.occupationOptions) + Assert.AreEqual<Occupation.Kind option>(None, MenuState.selectedOccupation page) + Assert.AreEqual<string>("暂不选择", MenuState.occupationLabel None) + Assert.AreEqual<string>("农夫", MenuState.occupationLabel (Some Occupation.Farmer)) + Assert.AreEqual<string>("书生", MenuState.occupationLabel (Some Occupation.Scholar)) + + [<TestMethod>] + member _.OccupationSelectConfirmEmitsChosenKindAndBackReturnsToMenu () = + let page = MenuState.openOccupationSelect (MenuState.create SimulationControl.initial false) + let _, defaultCommand = MenuState.update Confirm page + Assert.AreEqual<MenuCommand>(StartNewGameWith None, defaultCommand) + + let picked = MenuState.move Up (MenuState.move Up page) + Assert.AreEqual<Occupation.Kind option>(Some Occupation.Peddler, MenuState.selectedOccupation picked) + let _, command = MenuState.update Confirm picked + Assert.AreEqual<MenuCommand>(StartNewGameWith (Some Occupation.Peddler), command) + + let back, backCommand = MenuState.update Back page + Assert.AreEqual<MenuPage>(MainMenu, back.Page) + Assert.AreEqual<MenuCommand>(NoCommand, backCommand) |
