cmlenz@446: # -*- coding: utf-8 -*-
cmlenz@446: #
cmlenz@446: # Copyright (C) 2007 Edgewall Software
cmlenz@446: # All rights reserved.
cmlenz@446: #
cmlenz@446: # This software is licensed as described in the file COPYING, which
cmlenz@446: # you should have received as part of this distribution. The terms
cmlenz@446: # are also available at http://genshi.edgewall.org/wiki/License.
cmlenz@446: #
cmlenz@446: # This software consists of voluntary contributions made by many
cmlenz@446: # individuals. For the exact contribution history, see the revision
cmlenz@446: # history and logs, available at http://genshi.edgewall.org/log/.
cmlenz@446:
cmlenz@446: import doctest
cmlenz@485: from StringIO import StringIO
cmlenz@446: import unittest
cmlenz@446:
cmlenz@485: from genshi.template import MarkupTemplate
cmlenz@528: from genshi.filters.i18n import Translator, extract
cmlenz@446:
cmlenz@446:
cmlenz@446: class TranslatorTestCase(unittest.TestCase):
cmlenz@485:
cmlenz@485: def test_extract_plural_form(self):
cmlenz@485: tmpl = MarkupTemplate("""
cmlenz@485: ${ngettext("Singular", "Plural", num)}
cmlenz@485: """)
cmlenz@485: translator = Translator()
cmlenz@485: messages = list(translator.extract(tmpl.stream))
cmlenz@485: self.assertEqual(1, len(messages))
cmlenz@485: self.assertEqual((2, 'ngettext', (u'Singular', u'Plural')), messages[0])
cmlenz@485:
cmlenz@485: def test_extract_included_attribute_text(self):
cmlenz@485: tmpl = MarkupTemplate("""
cmlenz@485:
cmlenz@485: """)
cmlenz@485: translator = Translator()
cmlenz@485: messages = list(translator.extract(tmpl.stream))
cmlenz@485: self.assertEqual(1, len(messages))
cmlenz@485: self.assertEqual((2, None, u'Foo'), messages[0])
cmlenz@485:
cmlenz@485: def test_extract_attribute_expr(self):
cmlenz@485: tmpl = MarkupTemplate("""
cmlenz@485:
cmlenz@485: """)
cmlenz@485: translator = Translator()
cmlenz@485: messages = list(translator.extract(tmpl.stream))
cmlenz@485: self.assertEqual(1, len(messages))
cmlenz@485: self.assertEqual((2, '_', u'Save'), messages[0])
cmlenz@485:
cmlenz@485: def test_extract_non_included_attribute_interpolated(self):
cmlenz@485: tmpl = MarkupTemplate("""
cmlenz@485: Foo
cmlenz@485: """)
cmlenz@485: translator = Translator()
cmlenz@485: messages = list(translator.extract(tmpl.stream))
cmlenz@485: self.assertEqual(1, len(messages))
cmlenz@485: self.assertEqual((2, None, u'Foo'), messages[0])
cmlenz@485:
cmlenz@485: def test_extract_text_from_sub(self):
cmlenz@485: tmpl = MarkupTemplate("""
cmlenz@485:
(c) 2007 Edgewall Software
cmlenz@522: """) cmlenz@522: translator = Translator() cmlenz@522: messages = list(translator.extract(tmpl.stream)) cmlenz@522: self.assertEqual(0, len(messages)) cmlenz@522: cmlenz@522: def test_extract_tag_with_variable_xml_lang(self): cmlenz@522: tmpl = MarkupTemplate(""" cmlenz@522:(c) 2007 Edgewall Software
cmlenz@522: """) cmlenz@522: translator = Translator() cmlenz@522: messages = list(translator.extract(tmpl.stream)) cmlenz@522: self.assertEqual(1, len(messages)) cmlenz@522: self.assertEqual((2, None, u'(c) 2007 Edgewall Software'), messages[0]) cmlenz@522: cmlenz@535: def test_ignore_attribute_with_expression(self): cmlenz@535: tmpl = MarkupTemplate(""" cmlenz@535: cmlenz@535: """) cmlenz@535: translator = Translator() cmlenz@535: messages = list(translator.extract(tmpl.stream)) cmlenz@535: self.assertEqual(0, len(messages)) cmlenz@535: cmlenz@446: cmlenz@528: class ExtractTestCase(unittest.TestCase): cmlenz@528: cmlenz@528: def test_markup_template_extraction(self): cmlenz@528: buf = StringIO(""" cmlenz@528: cmlenz@528:${_("Hello, %(name)s") % dict(name=username)}
cmlenz@528:${ngettext("You have %d item", "You have %d items", num)}
cmlenz@528: cmlenz@528: """) cmlenz@528: results = list(extract(buf, ['_', 'ngettext'], [], {})) cmlenz@528: self.assertEqual([ cmlenz@528: (3, None, u'Example', []), cmlenz@528: (6, None, u'Example', []), cmlenz@528: (7, '_', u'Hello, %(name)s', []), cmlenz@528: (8, 'ngettext', (u'You have %d item', u'You have %d items'), []), cmlenz@528: ], results) cmlenz@528: cmlenz@528: def test_text_template_extraction(self): cmlenz@528: buf = StringIO("""${_("Dear %(name)s") % {'name': name}}, cmlenz@528: cmlenz@528: ${ngettext("Your item:", "Your items", len(items))} cmlenz@528: #for item in items cmlenz@528: * $item cmlenz@528: #end cmlenz@528: cmlenz@528: All the best, cmlenz@528: Foobar""") cmlenz@528: results = list(extract(buf, ['_', 'ngettext'], [], { cmlenz@528: 'template_class': 'genshi.template:TextTemplate' cmlenz@528: })) cmlenz@528: self.assertEqual([ cmlenz@528: (1, '_', u'Dear %(name)s', []), cmlenz@528: (3, 'ngettext', (u'Your item:', u'Your items'), []), cmlenz@528: (7, None, u'All the best,\n Foobar', []) cmlenz@528: ], results) cmlenz@528: cmlenz@549: def test_extraction_inside_ignored_tags(self): cmlenz@549: buf = StringIO(""" cmlenz@549: cmlenz@549: """) cmlenz@549: results = list(extract(buf, ['_'], [], {})) cmlenz@549: self.assertEqual([ cmlenz@549: (5, '_', u'Please wait...', []), cmlenz@549: ], results) cmlenz@549: cmlenz@549: def test_extraction_inside_ignored_tags_with_directives(self): cmlenz@549: buf = StringIO(""" cmlenz@549: cmlenz@549: """) cmlenz@549: self.assertEqual([], list(extract(buf, ['_'], [], {}))) cmlenz@549: cmlenz@528: cmlenz@446: def suite(): cmlenz@446: suite = unittest.TestSuite() cmlenz@528: suite.addTests(doctest.DocTestSuite(Translator.__module__)) cmlenz@485: suite.addTest(unittest.makeSuite(TranslatorTestCase, 'test')) cmlenz@528: suite.addTest(unittest.makeSuite(ExtractTestCase, 'test')) cmlenz@446: return suite cmlenz@446: cmlenz@446: if __name__ == '__main__': cmlenz@446: unittest.main(defaultTest='suite')