5 from nose
.tools
import *
7 from pokedex
.db
import translations
, tables
10 'version_id,local_language_id,name',
11 '1,0,name1', '2,0,name2', '3,0,name3', '3,1,othername3',
14 fake_translation_csv
= (
15 'language_id,table,id,column,source_crc,string',
16 '0,Version,1,name,,name1',
17 '0,Version,2,name,,name2',
18 '0,Version,3,name,,name3',
19 '1,Version,3,name,,othername3',
22 def test_yield_source_csv_messages():
23 check_version_message_stream(translations
.yield_source_csv_messages(
24 tables
.Version
.names_table
,
26 csv
.reader(iter(fake_version_names
)),
29 def test_yield_guessed_csv_messages():
30 check_version_message_stream(translations
.yield_guessed_csv_messages(
31 iter(fake_translation_csv
),
34 def test_yield_translation_csv_messages():
35 check_version_message_stream(translations
.yield_translation_csv_messages(
36 iter(fake_translation_csv
),
39 def check_version_message_stream(messages
):
40 messages
= list(messages
)
41 assert messages
[0].string
== 'name1'
42 assert messages
[1].string
== 'name2'
43 assert messages
[2].string
== 'name3'
44 assert messages
[3].string
== 'othername3'
45 for message
in messages
[:3]:
46 assert message
.language_id
== 0
47 assert messages
[3].language_id
== 1
48 for id, message
in zip((1, 2, 3, 3), messages
):
49 assert message
.merge_key
== ('Version', id, 'name'), message
.key
51 def get_messages(*rows
):
52 return list(translations
.yield_translation_csv_messages(iter(rows
), True))
54 def test_merge_translations():
55 source
= get_messages(
56 '0,Table,1,col,,none',
58 '0,Table,3,col,,existing',
59 '0,Table,4,col,,both',
60 '0,Table,5,col,,(gap)',
61 '0,Table,6,col,,new-bad',
62 '0,Table,7,col,,existing-bad',
63 '0,Table,8,col,,both-bad',
64 '0,Table,9,col,,new-bad-ex-good',
65 '0,Table,10,col,,new-good-ex-bad',
66 '0,Table,11,col,,(gap)',
67 '0,Table,12,col,,"Numbers: 1, 2, and 003"',
68 '0,Table,13,col,,"Numbers: 3, 2, and 001"',
71 '0,Table,2,col,%s,new' % translations
.crc('new'),
72 '0,Table,4,col,%s,new' % translations
.crc('both'),
73 '0,Table,6,col,%s,new' % translations
.crc('----'),
74 '0,Table,8,col,%s,new' % translations
.crc('----'),
75 '0,Table,9,col,%s,new' % translations
.crc('----'),
76 '0,Table,10,col,%s,new' % translations
.crc('new-good-ex-bad'),
77 '0,Table,12,col,%s,{num} {num} {num}' % translations
.crc('Numbers: {num}, {num}, and {num}'),
78 '0,Table,13,col,%s,{num} {num} {num}' % translations
.crc('----'),
79 '0,Table,100,col,%s,unused' % translations
.crc('----'),
81 new
[-3].number_replacement
= True
82 new
[-3].source
= 'Numbers: 1, 2, and 003'
83 new
[-2].number_replacement
= True
84 new
[-2].source
= '----'
85 existing
= get_messages(
86 '0,Table,3,col,%s,existing' % translations
.crc('existing'),
87 '0,Table,4,col,%s,existing' % translations
.crc('both'),
88 '0,Table,7,col,%s,existing' % translations
.crc('----'),
89 '0,Table,8,col,%s,existing' % translations
.crc('----'),
90 '0,Table,9,col,%s,existing' % translations
.crc('new-bad-ex-good'),
91 '0,Table,10,col,%s,existing' % translations
.crc('----'),
92 '0,Table,100,col,%s,unused' % translations
.crc('----'),
97 ('existing', True, 'existing'),
98 ('both', True, 'new'),
99 ('(gap)', None, None),
100 ('new-bad', False, 'new'),
101 ('existing-bad', False, 'existing'),
102 ('both-bad', False, 'new'),
103 ('new-bad-ex-good', True, 'existing'),
104 ('new-good-ex-bad', True, 'new'),
105 ('(gap)', None, None),
106 ('Numbers: 1, 2, and 003', True, '1 2 003'),
107 ('Numbers: 3, 2, and 001', False, '3 2 001'),
110 result_stream
= list(translations
.merge_translations(source
, new
, [], existing
, unused
=unused
.append
))
111 for result
, expected
in zip(result_stream
, expected_list
):
112 res_src
, res_crc
, res_str
, res_match
= result
113 exp_src
, exp_match
, exp_str
= expected
114 print result
, expected
115 assert res_src
.string
== exp_src
116 assert res_str
== exp_str
, (res_str
, exp_str
)
117 if exp_match
is None:
118 assert res_crc
is None
119 elif exp_match
is True:
120 assert res_crc
== translations
.crc(res_src
.string
)
121 elif exp_match
is False:
122 assert res_crc
== translations
.crc('----')
123 assert res_match
== exp_match
124 print 'unused:', unused
125 for message
in unused
:
126 assert message
.string
== 'unused'
127 assert message
.id == 100
130 check_merge((0, 1, 2, 3))
131 check_merge((0, 1), (2, 3))
132 check_merge((2, 3), (0, 1))
133 check_merge((0, 2), (1, 3))
134 check_merge((0, 3), (1, 2))
135 check_merge((0, 1), (2, 3), (2, 3))
137 def check_merge(*sequences
):
138 merged
= list(translations
.Merge(*sequences
))
139 concatenated
= [val
for seq
in sequences
for val
in seq
]
140 assert merged
== sorted(concatenated
)
142 def test_merge_dynamic_add():
143 merge
= translations
.Merge((1, 2, 3))
145 for val
in (1, 2, 3):
147 merge
.add_iterator([4])
148 merge
.add_iterator(adder())
149 assert tuple(merge
) == (1, 1, 2, 2, 3, 3, 4, 4, 4)
151 def test_merge_adjacent():
152 messages
= get_messages(
153 '0,Table,1,col,,strA',
154 '0,Table,2,col,,strB',
155 '0,Table,2,col,,strC',
156 '0,Table,2,col,,strB',
157 '0,Table,2,col,,strD',
158 '0,Table,3,col,,strE',
160 result
= [m
.string
for m
in translations
.merge_adjacent(messages
)]
161 expected
= ['strA', 'strB\n\nstrC\n\nstrD', 'strE']
162 assert result
== expected
165 check_leftjoin([], [], [], [])
166 check_leftjoin([], [1], [], [1])
167 check_leftjoin([], [1, 2], [], [1, 2])
168 check_leftjoin([1], [], [(1, None)], [])
169 check_leftjoin([1], [1], [(1, 1)], [])
170 check_leftjoin([1], [2], [(1, None)], [2])
171 check_leftjoin([1, 2], [1], [(1, 1), (2, None)], [])
172 check_leftjoin([1, 2], [1, 2], [(1, 1), (2, 2)], [])
173 check_leftjoin([1], [1, 2], [(1, 1)], [2])
174 check_leftjoin([1, 2], [1, 3], [(1, 1), (2, None)], [3])
175 check_leftjoin([1, 2, 3], [1, 3], [(1, 1), (2, None), (3, 3)], [])
176 check_leftjoin([1, 2, 2, 3], [1, 3], [(1, 1), (2, None), (2, None), (3, 3)], [])
177 check_leftjoin([1, 2, 2, 3], [2, 2, 2], [(1, None), (2, 2), (2, 2), (3, None)], [2])
179 def check_leftjoin(seqa
, seqb
, expected
, expected_unused
):
181 result
= list(translations
.leftjoin(seqa
, seqb
, unused
=unused
.append
))
182 assert result
== list(expected
)
183 assert unused
== list(expected_unused
)