Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(309)

Side by Side Diff: grit/clique_unittest.py

Issue 7994004: Initial source commit to grit-i18n project. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « grit/clique.py ('k') | grit/constants.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 #!/usr/bin/python2.4
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 '''Unit tests for grit.clique'''
7
8 import os
9 import sys
10 if __name__ == '__main__':
11 sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '..'))
12
13 import re
14 import StringIO
15 import unittest
16
17 from grit import clique
18 from grit import exception
19 from grit import pseudo
20 from grit import tclib
21 from grit import grd_reader
22 from grit import util
23
24 class MessageCliqueUnittest(unittest.TestCase):
25 def testClique(self):
26 factory = clique.UberClique()
27 msg = tclib.Message(text='Hello USERNAME, how are you?',
28 placeholders=[
29 tclib.Placeholder('USERNAME', '%s', 'Joi')])
30 c = factory.MakeClique(msg)
31
32 self.failUnless(c.GetMessage() == msg)
33 self.failUnless(c.GetId() == msg.GetId())
34
35 msg_fr = tclib.Translation(text='Bonjour USERNAME, comment ca va?',
36 id=msg.GetId(), placeholders=[
37 tclib.Placeholder('USERNAME', '%s', 'Joi')])
38 msg_de = tclib.Translation(text='Guten tag USERNAME, wie geht es dir?',
39 id=msg.GetId(), placeholders=[
40 tclib.Placeholder('USERNAME', '%s', 'Joi')])
41
42 c.AddTranslation(msg_fr, 'fr')
43 factory.FindCliqueAndAddTranslation(msg_de, 'de')
44
45 # sort() sorts lists in-place and does not return them
46 for lang in ('en', 'fr', 'de'):
47 self.failUnless(lang in c.clique)
48
49 self.failUnless(c.MessageForLanguage('fr').GetRealContent() ==
50 msg_fr.GetRealContent())
51
52 try:
53 c.MessageForLanguage('zh-CN', False)
54 self.fail('Should have gotten exception')
55 except:
56 pass
57
58 self.failUnless(c.MessageForLanguage('zh-CN', True) != None)
59
60 rex = re.compile('fr|de|bingo')
61 self.failUnless(len(c.AllMessagesThatMatch(rex, False)) == 2)
62 self.failUnless(c.AllMessagesThatMatch(rex, True)[pseudo.PSEUDO_LANG] != Non e)
63
64 def testBestClique(self):
65 factory = clique.UberClique()
66 factory.MakeClique(tclib.Message(text='Alfur', description='alfaholl'))
67 factory.MakeClique(tclib.Message(text='Alfur', description=''))
68 factory.MakeClique(tclib.Message(text='Vaettur', description=''))
69 factory.MakeClique(tclib.Message(text='Vaettur', description=''))
70 factory.MakeClique(tclib.Message(text='Troll', description=''))
71 factory.MakeClique(tclib.Message(text='Gryla', description='ID: IDS_GRYLA'))
72 factory.MakeClique(tclib.Message(text='Gryla', description='vondakerling'))
73 factory.MakeClique(tclib.Message(text='Leppaludi', description='ID: IDS_LL') )
74 factory.MakeClique(tclib.Message(text='Leppaludi', description=''))
75
76 count_best_cliques = 0
77 for c in factory.BestCliquePerId():
78 count_best_cliques += 1
79 msg = c.GetMessage()
80 text = msg.GetRealContent()
81 description = msg.GetDescription()
82 if text == 'Alfur':
83 self.failUnless(description == 'alfaholl')
84 elif text == 'Gryla':
85 self.failUnless(description == 'vondakerling')
86 elif text == 'Leppaludi':
87 self.failUnless(description == 'ID: IDS_LL')
88 self.failUnless(count_best_cliques == 5)
89
90 def testAllInUberClique(self):
91 resources = grd_reader.Parse(util.WrapInputStream(
92 StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?>
93 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_ dir=".">
94 <release seq="3">
95 <messages>
96 <message name="IDS_GREETING" desc="Printed to greet the currently logged i n user">
97 Hello <ph name="USERNAME">%s<ex>Joi</ex></ph>, how are you doing today?
98 </message>
99 </messages>
100 <structures>
101 <structure type="dialog" name="IDD_ABOUTBOX" encoding="utf-16" file="grit/ testdata/klonk.rc" />
102 <structure type="tr_html" name="ID_HTML" file="grit/testdata/simple.html" />
103 </structures>
104 </release>
105 </grit>''')), util.PathFromRoot('.'))
106 resources.RunGatherers(True)
107 content_list = []
108 for clique_list in resources.UberClique().cliques_.values():
109 for clique in clique_list:
110 content_list.append(clique.GetMessage().GetRealContent())
111 self.failUnless('Hello %s, how are you doing today?' in content_list)
112 self.failUnless('Jack "Black" Daniels' in content_list)
113 self.failUnless('Hello!' in content_list)
114
115 def testCorrectExceptionIfWrongEncodingOnResourceFile(self):
116 '''This doesn't really belong in this unittest file, but what the heck.'''
117 resources = grd_reader.Parse(util.WrapInputStream(
118 StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?>
119 <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_ dir=".">
120 <release seq="3">
121 <structures>
122 <structure type="dialog" name="IDD_ABOUTBOX" file="grit/testdata/klonk.rc" />
123 </structures>
124 </release>
125 </grit>''')), util.PathFromRoot('.'))
126 self.assertRaises(exception.SectionNotFound, resources.RunGatherers, True)
127
128 def testSemiIdenticalCliques(self):
129 messages = [
130 tclib.Message(text='Hello USERNAME',
131 placeholders=[tclib.Placeholder('USERNAME', '$1', 'Joi')]),
132 tclib.Message(text='Hello USERNAME',
133 placeholders=[tclib.Placeholder('USERNAME', '%s', 'Joi')]),
134 ]
135 self.failUnless(messages[0].GetId() == messages[1].GetId())
136
137 # Both of the above would share a translation.
138 translation = tclib.Translation(id=messages[0].GetId(),
139 text='Bonjour USERNAME',
140 placeholders=[tclib.Placeholder(
141 'USERNAME', '$1', 'Joi')])
142
143 factory = clique.UberClique()
144 cliques = [factory.MakeClique(msg) for msg in messages]
145
146 for clq in cliques:
147 clq.AddTranslation(translation, 'fr')
148
149 self.failUnless(cliques[0].MessageForLanguage('fr').GetRealContent() ==
150 'Bonjour $1')
151 self.failUnless(cliques[1].MessageForLanguage('fr').GetRealContent() ==
152 'Bonjour %s')
153
154 def testMissingTranslations(self):
155 messages = [ tclib.Message(text='Hello'), tclib.Message(text='Goodbye') ]
156 factory = clique.UberClique()
157 cliques = [factory.MakeClique(msg) for msg in messages]
158
159 cliques[1].MessageForLanguage('fr', False, True)
160
161 self.failUnless(not factory.HasMissingTranslations())
162
163 cliques[0].MessageForLanguage('de', False, False)
164
165 self.failUnless(factory.HasMissingTranslations())
166
167 report = factory.MissingTranslationsReport()
168 self.failUnless(report.count('WARNING') == 1)
169 self.failUnless(report.count('8053599568341804890 "Goodbye" fr') == 1)
170 self.failUnless(report.count('ERROR') == 1)
171 self.failUnless(report.count('800120468867715734 "Hello" de') == 1)
172
173 def testCustomTypes(self):
174 factory = clique.UberClique()
175 message = tclib.Message(text='Bingo bongo')
176 c = factory.MakeClique(message)
177 try:
178 c.SetCustomType(DummyCustomType())
179 self.fail()
180 except:
181 pass # expected case - 'Bingo bongo' does not start with 'jjj'
182
183 message = tclib.Message(text='jjjBingo bongo')
184 c = factory.MakeClique(message)
185 c.SetCustomType(util.NewClassInstance(
186 'grit.clique_unittest.DummyCustomType', clique.CustomType))
187 translation = tclib.Translation(id=message.GetId(), text='Bilingo bolongo')
188 c.AddTranslation(translation, 'fr')
189 self.failUnless(c.MessageForLanguage('fr').GetRealContent().startswith('jjj' ))
190
191
192 class DummyCustomType(clique.CustomType):
193 def Validate(self, message):
194 return message.GetRealContent().startswith('jjj')
195 def ValidateAndModify(self, lang, translation):
196 is_ok = self.Validate(translation)
197 self.ModifyEachTextPart(lang, translation)
198 def ModifyTextPart(self, lang, text):
199 return 'jjj%s' % text
200
201
202 if __name__ == '__main__':
203 unittest.main()
OLDNEW
« no previous file with comments | « grit/clique.py ('k') | grit/constants.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698