The copy team rewrote ui-strings.yaml with multi-level nesting, renamed sections, and inline comments. Update the YAML parser to use a stack-based approach for arbitrary nesting depth, update HUD and interaction prompt to reference the new key names, and align tests with the new structure. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
129 lines
4.9 KiB
GDScript
129 lines
4.9 KiB
GDScript
class_name TestUIStrings
|
|
extends GdUnitTestSuite
|
|
|
|
# Tests for ticket #409: UI string loading system.
|
|
# Covers YAML parsing, autoload lookup, and fallback behavior.
|
|
|
|
|
|
# -- YAML parser: basic behavior --
|
|
|
|
func test_parse_simple_key_value() -> void:
|
|
var yaml := "section:\n key: value"
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result.has("section.key")).is_true()
|
|
assert_that(result["section.key"]).is_equal("value")
|
|
|
|
func test_parse_quoted_value() -> void:
|
|
var yaml := "section:\n key: \"hello world\""
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result["section.key"]).is_equal("hello world")
|
|
|
|
func test_parse_multiple_sections() -> void:
|
|
var yaml := "hud:\n mode: Mode\ninteraction:\n talk: Talk"
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result.has("hud.mode")).is_true()
|
|
assert_that(result.has("interaction.talk")).is_true()
|
|
assert_that(result["hud.mode"]).is_equal("Mode")
|
|
assert_that(result["interaction.talk"]).is_equal("Talk")
|
|
|
|
func test_parse_skips_comments() -> void:
|
|
var yaml := "# comment\nsection:\n key: value\n # another comment"
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result.size()).is_equal(1)
|
|
|
|
func test_parse_skips_empty_lines() -> void:
|
|
var yaml := "section:\n\n key: value\n\n"
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result["section.key"]).is_equal("value")
|
|
|
|
func test_parse_empty_string() -> void:
|
|
var result := UIStrings._parse_yaml("")
|
|
assert_that(result.size()).is_equal(0)
|
|
|
|
func test_parse_value_with_colon() -> void:
|
|
var yaml := "hud:\n time: \"12:30\""
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result["hud.time"]).is_equal("12:30")
|
|
|
|
func test_parse_multiple_keys_per_section() -> void:
|
|
var yaml := "hud:\n mode: Mode\n time: Time\n health: Health"
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result.size()).is_equal(3)
|
|
assert_that(result["hud.mode"]).is_equal("Mode")
|
|
assert_that(result["hud.time"]).is_equal("Time")
|
|
assert_that(result["hud.health"]).is_equal("Health")
|
|
|
|
|
|
# -- YAML parser: nested sections --
|
|
|
|
func test_parse_nested_sections() -> void:
|
|
var yaml := "states:\n unknown:\n label: \"Unknown\"\n description: \"No prior contact.\""
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result.has("states.unknown.label")).is_true()
|
|
assert_that(result["states.unknown.label"]).is_equal("Unknown")
|
|
assert_that(result["states.unknown.description"]).is_equal("No prior contact.")
|
|
|
|
func test_parse_nested_multiple_subsections() -> void:
|
|
var yaml := "states:\n a:\n x: \"1\"\n b:\n x: \"2\""
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result["states.a.x"]).is_equal("1")
|
|
assert_that(result["states.b.x"]).is_equal("2")
|
|
|
|
func test_parse_mixed_flat_and_nested() -> void:
|
|
var yaml := "hud:\n health: \"Condition\"\n health_values:\n full: \"Normal\"\n critical: \"Critical\""
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result["hud.health"]).is_equal("Condition")
|
|
assert_that(result["hud.health_values.full"]).is_equal("Normal")
|
|
assert_that(result["hud.health_values.critical"]).is_equal("Critical")
|
|
|
|
func test_parse_inline_comment_quoted() -> void:
|
|
var yaml := "hud:\n prefix: \"\" # No prefix"
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result.has("hud.prefix")).is_true()
|
|
assert_that(result["hud.prefix"]).is_equal("")
|
|
|
|
func test_parse_inline_comment_unquoted() -> void:
|
|
var yaml := "hud:\n mode: Standard # default mode"
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result["hud.mode"]).is_equal("Standard")
|
|
|
|
func test_parse_quoted_empty_string() -> void:
|
|
var yaml := "section:\n key: \"\""
|
|
var result := UIStrings._parse_yaml(yaml)
|
|
assert_that(result.has("section.key")).is_true()
|
|
assert_that(result["section.key"]).is_equal("")
|
|
|
|
|
|
# -- Autoload: registration and file loading --
|
|
|
|
func test_autoload_registered() -> void:
|
|
assert_that(UIStrings).is_not_null()
|
|
|
|
func test_autoload_loaded_strings() -> void:
|
|
assert_that(UIStrings.has_key("hud.health")).is_true()
|
|
|
|
func test_get_text_returns_value() -> void:
|
|
assert_that(UIStrings.get_text("hud.health")).is_equal("Condition")
|
|
|
|
func test_get_text_interaction_verb() -> void:
|
|
assert_that(UIStrings.get_text("interaction_verbs.talk")).is_equal("Talk")
|
|
|
|
func test_get_text_missing_key_returns_key() -> void:
|
|
var result := UIStrings.get_text("nonexistent.key")
|
|
assert_that(result).is_equal("nonexistent.key")
|
|
|
|
func test_get_all_keys_not_empty() -> void:
|
|
assert_that(UIStrings.get_all_keys().size()).is_greater(0)
|
|
|
|
func test_has_key_true_for_existing() -> void:
|
|
assert_that(UIStrings.has_key("interaction_verbs.talk")).is_true()
|
|
|
|
func test_has_key_false_for_missing() -> void:
|
|
assert_that(UIStrings.has_key("nonexistent.key")).is_false()
|
|
|
|
func test_nested_key_exists() -> void:
|
|
assert_that(UIStrings.has_key("relationship_states.unknown.label")).is_true()
|
|
|
|
func test_nested_key_value() -> void:
|
|
assert_that(UIStrings.get_text("relationship_states.unknown.label")).is_equal("Unknown")
|