DazedTL/tests/test_mvmz_script_patterns.py
DazedAnon 68e07adeb3 feat(translation): expand RPG Maker and image handling
- support CBR status text and update script/plugin defaults
- require skipped image reports to include recovery options
2026-07-27 19:35:11 -05:00

170 lines
6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""Regression tests for RPG Maker code-355/655 script patterns."""
from __future__ import annotations
import copy
import os
import re
import sys
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
os.chdir(ROOT)
sys.path.insert(0, str(ROOT))
import modules.rpgmakermvmz as mvmz # noqa: E402
class TestMVMZScriptPatterns(unittest.TestCase):
def test_cbr_erotic_status_pattern_definition(self):
regex, multiline = mvmz.PATTERNS_355655["CBR-エロステータス"]
self.assertEqual(regex, r"テキスト-(.+)")
self.assertTrue(multiline)
def test_cbr_erotic_status_multiline_integration(self):
source_statuses = ["", ""]
translated_statuses = ["times", "people"]
page = {
"list": [
{
"code": 355,
"indent": 0,
"parameters": ["CBR-エロステータス"],
},
{
"code": 655,
"indent": 0,
"parameters": ["コマンド-表示"],
},
*[
{
"code": 655,
"indent": 0,
"parameters": [f"テキスト-{status}"],
}
for status in source_statuses
],
{
"code": 655,
"indent": 0,
"parameters": ["テキスト-"],
},
]
}
captured = []
def translate(text, history, batch=False):
captured.append(copy.deepcopy(text))
return [copy.deepcopy(translated_statuses), [0, 0]]
original_translate = mvmz.translateAI
original_code355655 = mvmz.CODE355655
original_enabled = mvmz.ENABLED_PATTERNS_355655
mvmz.translateAI = translate
mvmz.CODE355655 = True
mvmz.ENABLED_PATTERNS_355655 = {"CBR-エロステータス"}
try:
translated_page = copy.deepcopy(page)
mvmz.searchCodes(translated_page, None, [], "TestMap.json")
finally:
mvmz.translateAI = original_translate
mvmz.CODE355655 = original_code355655
mvmz.ENABLED_PATTERNS_355655 = original_enabled
self.assertEqual(captured, [source_statuses])
self.assertEqual(translated_page["list"][0], page["list"][0])
self.assertEqual(translated_page["list"][1], page["list"][1])
self.assertEqual(
[entry["parameters"][0] for entry in translated_page["list"][2:4]],
[f"テキスト-{status}" for status in translated_statuses],
)
self.assertEqual(translated_page["list"][4], page["list"][4])
def test_battle_manager_can_escape_pattern_definition(self):
regex, multiline = mvmz.PATTERNS_355655["if (BattleManager.canEscape())"]
self.assertEqual(
regex,
r'\$gameMessage\.add\(\s*"((?:\\.|[^"\\])*)"\s*\)',
)
self.assertTrue(multiline)
def test_battle_manager_can_escape_extracts_only_message_text(self):
regex, _ = mvmz.PATTERNS_355655["if (BattleManager.canEscape())"]
script = r'$gameMessage.add("この戦闘では逃げることはできない!")'
match = re.search(regex, script)
self.assertIsNotNone(match)
self.assertEqual(match.group(1), "この戦闘では逃げることはできない!")
def test_battle_manager_can_escape_multiline_integration(self):
source_message = "この戦闘では逃げることはできない!"
translated_message = "You cannot escape from this battle!"
page = {
"list": [
{
"code": 355,
"indent": 0,
"parameters": ["if (BattleManager.canEscape()) {"],
},
{
"code": 655,
"indent": 0,
"parameters": ["// このコメントは翻訳しない"],
},
{
"code": 655,
"indent": 0,
"parameters": [f'$gameMessage.add("{source_message}");'],
},
{
"code": 655,
"indent": 0,
"parameters": ['const command = "内部CBRコマンド";'],
},
{
"code": 655,
"indent": 0,
"parameters": ['const filename = "日本語画像.png";'],
},
{"code": 655, "indent": 0, "parameters": ["}"]},
]
}
captured = []
def translate(text, history, batch=False):
captured.append(copy.deepcopy(text))
if isinstance(text, list):
return [[translated_message for _ in text], [0, 0]]
return [translated_message, [0, 0]]
original_translate = mvmz.translateAI
original_code355655 = mvmz.CODE355655
original_enabled = mvmz.ENABLED_PATTERNS_355655
mvmz.translateAI = translate
mvmz.CODE355655 = True
mvmz.ENABLED_PATTERNS_355655 = {"if (BattleManager.canEscape())"}
try:
translated_page = copy.deepcopy(page)
mvmz.searchCodes(translated_page, None, [], "TestMap.json")
finally:
mvmz.translateAI = original_translate
mvmz.CODE355655 = original_code355655
mvmz.ENABLED_PATTERNS_355655 = original_enabled
self.assertEqual(captured, [[source_message]])
self.assertEqual(
translated_page["list"][2]["parameters"][0],
f'$gameMessage.add("{translated_message}");',
)
self.assertEqual(translated_page["list"][1], page["list"][1])
self.assertEqual(translated_page["list"][3], page["list"][3])
self.assertEqual(translated_page["list"][4], page["list"][4])
if __name__ == "__main__":
unittest.main()