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: 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@446: cmlenz@522: def test_ignore_tag_with_fixed_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(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: Example cmlenz@528: cmlenz@528: cmlenz@528:

Example

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')