Skip to content

Commit db0f5e4

Browse files
committed
test: add comprehensive tests for Translatable and Language
1 parent 51bdc0e commit db0f5e4

File tree

1 file changed

+178
-0
lines changed

1 file changed

+178
-0
lines changed
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
import pytest
2+
3+
from endstone import Server
4+
from endstone.lang import Language, Translatable
5+
6+
7+
# =============================================================================
8+
# Section 1: Translatable Construction Tests
9+
# =============================================================================
10+
11+
12+
def test_translatable_with_text_only() -> None:
13+
"""Verify Translatable can be created with text only."""
14+
translatable = Translatable("test.message")
15+
assert translatable.text == "test.message"
16+
assert translatable.params == []
17+
18+
19+
def test_translatable_with_text_and_params() -> None:
20+
"""Verify Translatable can be created with text and params."""
21+
translatable = Translatable("test.message", ["param1", "param2"])
22+
assert translatable.text == "test.message"
23+
assert translatable.params == ["param1", "param2"]
24+
25+
26+
def test_translatable_with_empty_params() -> None:
27+
"""Verify Translatable can be created with explicit empty params."""
28+
translatable = Translatable("test.message", [])
29+
assert translatable.text == "test.message"
30+
assert translatable.params == []
31+
32+
33+
def test_translatable_with_empty_text() -> None:
34+
"""Verify Translatable can be created with empty text."""
35+
translatable = Translatable("")
36+
assert translatable.text == ""
37+
assert translatable.params == []
38+
39+
40+
# =============================================================================
41+
# Section 2: Translatable Properties Tests
42+
# =============================================================================
43+
44+
45+
def test_translatable_text_readonly() -> None:
46+
"""Verify text property is read-only."""
47+
translatable = Translatable("test.message")
48+
with pytest.raises(AttributeError):
49+
translatable.text = "new.message" # type: ignore
50+
51+
52+
def test_translatable_params_readonly() -> None:
53+
"""Verify params property is read-only."""
54+
translatable = Translatable("test.message", ["param1"])
55+
with pytest.raises(AttributeError):
56+
translatable.params = ["new_param"] # type: ignore
57+
58+
59+
def test_translatable_preserves_param_order() -> None:
60+
"""Verify params maintain their order."""
61+
params = ["first", "second", "third"]
62+
translatable = Translatable("test.message", params)
63+
assert translatable.params == params
64+
65+
66+
# =============================================================================
67+
# Section 3: Language Access Tests
68+
# =============================================================================
69+
70+
71+
def test_language_accessible(server: Server) -> None:
72+
"""Verify language interface is accessible from server."""
73+
language = server.language
74+
assert language is not None
75+
assert isinstance(language, Language)
76+
77+
78+
def test_language_locale(server: Server) -> None:
79+
"""Verify locale property returns a non-empty string."""
80+
language = server.language
81+
locale = language.locale
82+
assert isinstance(locale, str)
83+
assert len(locale) > 0
84+
85+
86+
# =============================================================================
87+
# Section 4: Language Translation Tests (Simple Text)
88+
# =============================================================================
89+
90+
91+
def test_translate_simple_text(server: Server) -> None:
92+
"""Verify translation with simple text returns a string."""
93+
language = server.language
94+
result = language.translate("commands.help.description")
95+
assert isinstance(result, str)
96+
97+
98+
def test_translate_unknown_key_returns_key(server: Server) -> None:
99+
"""Verify translating an unknown key returns the key itself."""
100+
language = server.language
101+
unknown_key = "this.key.does.not.exist.xyz123"
102+
result = language.translate(unknown_key)
103+
assert result == unknown_key
104+
105+
106+
def test_translate_with_params(server: Server) -> None:
107+
"""Verify translation with params returns a string."""
108+
language = server.language
109+
result = language.translate("commands.give.success", ["apple", "1", "player"])
110+
assert isinstance(result, str)
111+
112+
113+
def test_translate_with_explicit_locale(server: Server) -> None:
114+
"""Verify translation with explicit locale returns a string."""
115+
language = server.language
116+
result = language.translate("commands.help.description", locale="en_US")
117+
assert isinstance(result, str)
118+
assert result == "Provides help/list of commands."
119+
120+
121+
def test_translate_with_params_and_locale(server: Server) -> None:
122+
"""Verify translation with params and locale returns a string."""
123+
language = server.language
124+
result = language.translate(
125+
"commands.give.success", ["apple", "1", "player"], locale="en_US"
126+
)
127+
assert isinstance(result, str)
128+
assert result == "Gave apple * 1 to player"
129+
130+
131+
# =============================================================================
132+
# Section 5: Language Translation Tests (Translatable)
133+
# =============================================================================
134+
135+
136+
def test_translate_translatable_object(server: Server) -> None:
137+
"""Verify translating a Translatable object returns a string."""
138+
language = server.language
139+
translatable = Translatable("commands.help.description")
140+
result = language.translate(translatable)
141+
assert isinstance(result, str)
142+
143+
144+
def test_translate_translatable_with_params(server: Server) -> None:
145+
"""Verify translating a Translatable with params returns a string."""
146+
language = server.language
147+
translatable = Translatable("commands.give.success", ["apple", "1", "player"])
148+
result = language.translate(translatable)
149+
assert isinstance(result, str)
150+
151+
152+
def test_translate_translatable_with_locale(server: Server) -> None:
153+
"""Verify translating a Translatable with explicit locale returns a string."""
154+
language = server.language
155+
translatable = Translatable("commands.help.description")
156+
result = language.translate(translatable, locale="en_US")
157+
assert isinstance(result, str)
158+
159+
160+
def test_translate_text_and_translatable_match(server: Server) -> None:
161+
"""Verify text translation and Translatable translation produce same result."""
162+
language = server.language
163+
text = "commands.help.description"
164+
translatable = Translatable(text)
165+
text_result = language.translate(text)
166+
translatable_result = language.translate(translatable)
167+
assert text_result == translatable_result
168+
169+
170+
def test_translate_with_params_text_and_translatable_match(server: Server) -> None:
171+
"""Verify parameterized translations match between text and Translatable."""
172+
language = server.language
173+
text = "commands.give.success"
174+
params = ["apple", "1", "player"]
175+
translatable = Translatable(text, params)
176+
text_result = language.translate(text, params)
177+
translatable_result = language.translate(translatable)
178+
assert text_result == translatable_result

0 commit comments

Comments
 (0)