From fbdfc1c0530fd36816b7b2e537905dbcae6615b4 Mon Sep 17 00:00:00 2001 From: thibautbus <310327033+thibautbus@users.noreply.github.com> Date: Mon, 17 Aug 2026 21:44:43 +0200 Subject: [PATCH] Cover the museum 1F ticket clerk's translated lines with a targeted test --- .../museum_1f_clerk_translation_test.lua | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 tests/engine/museum_1f_clerk_translation_test.lua diff --git a/tests/engine/museum_1f_clerk_translation_test.lua b/tests/engine/museum_1f_clerk_translation_test.lua new file mode 100644 index 00000000..5330fdd0 --- /dev/null +++ b/tests/engine/museum_1f_clerk_translation_test.lua @@ -0,0 +1,68 @@ +-- The museum 1F ticket clerk's take-your-time/not-enough-money/come-again +-- lines used to be bare English literals, invisible to game.data.text no +-- matter what a translation mod put there. tests/engine/museum_money_box_ +-- bug1335.lua only ever runs with an empty game.data.text, so it can't +-- tell a properly-wired t._Key or "..." fallback apart from a literal that +-- never looked at t at all -- every assertion there passes either way. +-- This test populates game.data.text with translated values and checks +-- they actually reach the pushed TextBox, for all three lines. +package.path = "./?.lua;./?/init.lua;" .. package.path + +local T = require("tests.harness") + +package.loaded["src.render.TextBox"] = { + new = function(_, text, onDone, opts) + return { text = text, onDone = onDone, opts = opts } + end, +} + +local M = assert(loadfile("data/scripts/story2.lua"))() +local clerk = M.MUSEUM_1F.talk.TEXT_MUSEUM1F_SCIENTIST1 + +local TRANSLATED = { + _Museum1FScientist1TakePlentyOfTimeText = "Prends ton temps\net profite bien !", + _Museum1FScientist1DontHaveEnoughMoneyText = "Tu n'as pas assez\nd'argent.", + _Museum1FScientist1ComeAgainText = "Reviens vite !", +} + +local pushed +local function mkGame(cash) + pushed = {} + return { + data = { text = TRANSLATED }, + save = { money = cash, flags = {} }, + stack = { push = function(_, box) pushed[#pushed + 1] = box end }, + } +end + +-- already ticketed: take-your-time line +local g = mkGame(3000) +g.save.flags.EVENT_BOUGHT_MUSEUM_TICKET = true +clerk(g, nil, nil, function() end) +T.eq(pushed[1].text, TRANSLATED._Museum1FScientist1TakePlentyOfTimeText, + "an existing ticket holder gets the translated take-your-time line") + +-- YES but short on cash: not-enough-money line +g = mkGame(20) +clerk(g, nil, nil, function() end) +pushed[1].opts.choice(true) +T.eq(pushed[2].text, TRANSLATED._Museum1FScientist1DontHaveEnoughMoneyText, + "short on cash opens the translated not-enough-money box") + +-- NO: come-again line +g = mkGame(3000) +clerk(g, nil, nil, function() end) +pushed[1].opts.choice(false) +T.eq(pushed[2].text, TRANSLATED._Museum1FScientist1ComeAgainText, + "declining opens the translated come-again box") + +-- unpopulated game.data.text still falls back to the English literal +g = { data = { text = {} }, save = { money = 3000, flags = {} }, + stack = { push = function(_, box) pushed[#pushed + 1] = box end } } +pushed = {} +g.save.flags.EVENT_BOUGHT_MUSEUM_TICKET = true +clerk(g, nil, nil, function() end) +T.check(tostring(pushed[1].text):find("Take your time", 1, true) ~= nil, + "an empty catalog still falls back to the English take-your-time line") + +T.finish("museum_1f_clerk_translation_test")