forked from lucaswerkmeister/tool-lexeme-forms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_translations.py
148 lines (115 loc) · 4.8 KB
/
test_translations.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import builtins
import pytest
import re
import formatters
from language import lang_int2babel
import translations
@pytest.fixture(scope="module", params=translations.translations.keys())
def language_code(request):
return request.param
@pytest.fixture(scope="module", params=translations.translations['en'].keys())
def message_key(request):
return request.param
@pytest.fixture(scope="module", params=['m', 'f', 'n'])
def gender(request):
return request.param
@pytest.fixture(scope="module", params=[0, 1, 2, 3, 5, 1000])
def number(request):
return request.param
@pytest.fixture(scope="module", params=[[], ["list item 1"], ["list item 1", "list item 2"]])
def list(request):
return request.param
def unused(*args, **kwargs):
raise RuntimeError('This function should not be called!')
allowed_html_element_names = {
'abbr',
'kbd',
'q',
}
def test_message_keys(language_code: str):
language_keys = set(translations.translations[language_code].keys())
english_keys = set(translations.translations['en'].keys())
extra_keys = language_keys.difference(english_keys)
assert not extra_keys
def test_message_html_elements(language_code: str, message_key: str):
message = translations.translations[language_code].get(message_key)
if message is None:
return
html_element_names = {tag_name.lower()
for tag_name in re.findall('</?([0-9A-Za-z]*)', message)}
html_element_names.difference_update(allowed_html_element_names)
assert not html_element_names
def test_message_syntax_valid_duplicates_warning(language_code: str, number: int):
if 'duplicates_warning' in translations.translations[language_code]:
message = translations.translations[language_code]['duplicates_warning']
formatters.I18nFormatter(
locale_identifier=lang_int2babel(language_code),
get_gender=unused,
).format(
message,
lexemes=number,
)
def test_message_syntax_valid_duplicates_instructions(language_code: str, number: int):
if 'duplicates_instructions' in translations.translations[language_code]:
message = translations.translations[language_code]['duplicates_instructions']
formatters.I18nFormatter(
locale_identifier=lang_int2babel(language_code),
get_gender=unused,
).format(
message,
lexemes=number,
)
def test_message_syntax_valid_description_with_forms_and_senses(language_code: str, number: int):
if 'description_with_forms_and_senses' in translations.translations[language_code]:
message = translations.translations[language_code]['description_with_forms_and_senses']
formatters.I18nFormatter(
locale_identifier=lang_int2babel(language_code),
get_gender=unused,
).format(
message,
description='description',
forms=number,
senses=number,
)
def test_message_syntax_valid_edit_ambiguous_warning(language_code: str, number: int):
if 'edit_ambiguous_warning' in translations.translations[language_code]:
message = translations.translations[language_code]['edit_ambiguous_warning']
formatters.I18nFormatter(
locale_identifier=lang_int2babel(language_code),
get_gender=unused,
).format(
message,
forms=number,
)
def test_message_syntax_valid_edit_unmatched_warning(language_code: str, number: int):
if 'edit_unmatched_warning' in translations.translations[language_code]:
message = translations.translations[language_code]['edit_unmatched_warning']
formatters.I18nFormatter(
locale_identifier=lang_int2babel(language_code),
get_gender=unused,
).format(
message,
forms=number,
)
def test_message_syntax_valid_edit_form_list_item(language_code: str, list: builtins.list[str], number: int):
if 'edit_form_list_item' in translations.translations[language_code]:
message = translations.translations[language_code]['edit_form_list_item']
formatters.I18nFormatter(
locale_identifier=lang_int2babel(language_code),
get_gender=unused,
).format(
message,
form_link='',
grammatical_feature_labels=list,
statements=number,
)
def test_message_syntax_valid_bulk_not_allowed(language_code: str, gender: str):
if 'bulk_not_allowed' in translations.translations[language_code]:
message = translations.translations[language_code]['bulk_not_allowed']
formatters.I18nFormatter(
locale_identifier=lang_int2babel(language_code),
get_gender=lambda value: gender,
).format(
message,
user='some user',
)