blob: f9788762cd883c491f39d507fb163f90d0436ebc [file] [log] [blame]
#!/usr/bin/python2.4
# Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
'''Unit tests for grit.xtb_reader'''
import os
import sys
if __name__ == '__main__':
sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '..'))
import StringIO
import unittest
from grit import xtb_reader
from grit import clique
from grit import grd_reader
from grit import tclib
from grit import util
class XtbReaderUnittest(unittest.TestCase):
def testParsing(self):
xtb_file = StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE translationbundle>
<translationbundle lang="fr">
<translation id="5282608565720904145">Bingo.</translation>
<translation id="2955977306445326147">Bongo longo.</translation>
<translation id="238824332917605038">Hullo</translation>
<translation id="6629135689895381486"><ph name="PROBLEM_REPORT"/> peut <ph name="START_LINK"/>utilisation excessive de majuscules<ph name="END_LINK"/>.</translation>
<translation id="7729135689895381486">Hello
this is another line
and another
and another after a blank line.</translation>
</translationbundle>''')
messages = []
def Callback(id, structure):
messages.append((id, structure))
xtb_reader.Parse(xtb_file, Callback)
self.failUnless(len(messages[0][1]) == 1)
self.failUnless(messages[3][1][0]) # PROBLEM_REPORT placeholder
self.failUnless(messages[4][0] == '7729135689895381486')
self.failUnless(messages[4][1][7][1] == 'and another after a blank line.')
def testParsingIntoMessages(self):
grd = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?>
<messages>
<message name="ID_MEGA">Fantastic!</message>
<message name="ID_HELLO_USER">Hello <ph name="USERNAME">%s<ex>Joi</ex></ph></message>
</messages>'''), dir='.', flexible_root=True)
clique_mega = grd.children[0].GetCliques()[0]
msg_mega = clique_mega.GetMessage()
clique_hello_user = grd.children[1].GetCliques()[0]
msg_hello_user = clique_hello_user.GetMessage()
xtb_file = StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE translationbundle>
<translationbundle lang="is">
<translation id="%s">Meirihattar!</translation>
<translation id="%s">Saelir <ph name="USERNAME"/></translation>
</translationbundle>''' % (msg_mega.GetId(), msg_hello_user.GetId()))
xtb_reader.Parse(xtb_file, grd.UberClique().GenerateXtbParserCallback('is'))
self.failUnless(clique_mega.MessageForLanguage('is').GetRealContent() ==
'Meirihattar!')
self.failUnless(clique_hello_user.MessageForLanguage('is').GetRealContent() ==
'Saelir %s')
def testParseLargeFile(self):
def Callback(id, structure):
pass
xtb = file(util.PathFromRoot('grit/test/data/fr.xtb'))
xtb_reader.Parse(xtb, Callback)
xtb.close()
if __name__ == '__main__':
unittest.main()