Mercurial > babel > old > mirror
diff 0.8.x/babel/messages/tests/extract.py @ 142:4a7af44e6695 stable
Create branch for 0.8.x releases.
author | cmlenz |
---|---|
date | Wed, 20 Jun 2007 10:09:07 +0000 |
parents | |
children | bdf9b34ed1e4 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/0.8.x/babel/messages/tests/extract.py @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2007 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://babel.edgewall.org/wiki/License. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://babel.edgewall.org/log/. + +import doctest +from StringIO import StringIO +import unittest + +from babel.messages import extract + + +class ExtractPythonTestCase(unittest.TestCase): + + def test_unicode_string_arg(self): + buf = StringIO("msg = _(u'Foo Bar')") + messages = list(extract.extract_python(buf, ('_',), [], {})) + self.assertEqual('Foo Bar', messages[0][2]) + + def test_comment_tag(self): + buf = StringIO(""" +# NOTE: A translation comment +msg = _(u'Foo Bar') +""") + messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {})) + self.assertEqual('Foo Bar', messages[0][2]) + self.assertEqual(['A translation comment'], messages[0][3]) + + def test_comment_tag_multiline(self): + buf = StringIO(""" +# NOTE: A translation comment +# with a second line +msg = _(u'Foo Bar') +""") + messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {})) + self.assertEqual('Foo Bar', messages[0][2]) + self.assertEqual(['A translation comment', 'with a second line'], + messages[0][3]) + + def test_translator_comments_with_previous_non_translator_comments(self): + buf = StringIO(""" +# This shouldn't be in the output +# because it didn't start with a comment tag +# NOTE: A translation comment +# with a second line +msg = _(u'Foo Bar') +""") + messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {})) + self.assertEqual('Foo Bar', messages[0][2]) + self.assertEqual(['A translation comment', 'with a second line'], + messages[0][3]) + + def test_comment_tags_not_on_start_of_comment(self): + buf = StringIO(""" +# This shouldn't be in the output +# because it didn't start with a comment tag +# do NOTE: this will no be a translation comment +# NOTE: This one will be +msg = _(u'Foo Bar') +""") + messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {})) + self.assertEqual('Foo Bar', messages[0][2]) + self.assertEqual(['This one will be'], messages[0][3]) + + def test_multiple_comment_tags(self): + buf = StringIO(""" +# NOTE1: A translation comment for tag1 +# with a second line +msg = _(u'Foo Bar1') + +# NOTE2: A translation comment for tag2 +msg = _(u'Foo Bar2') +""") + messages = list(extract.extract_python(buf, ('_',), + ['NOTE1:', 'NOTE2:'], {})) + self.assertEqual('Foo Bar1', messages[0][2]) + self.assertEqual(['A translation comment for tag1', + 'with a second line'], messages[0][3]) + self.assertEqual('Foo Bar2', messages[1][2]) + self.assertEqual(['A translation comment for tag2'], messages[1][3]) + + def test_two_succeeding_comments(self): + buf = StringIO(""" +# NOTE: one +# NOTE: two +msg = _(u'Foo Bar') +""") + messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {})) + self.assertEqual('Foo Bar', messages[0][2]) + self.assertEqual(['one', 'NOTE: two'], messages[0][3]) + + def test_invalid_translator_comments(self): + buf = StringIO(""" +# NOTE: this shouldn't apply to any messages +hello = 'there' + +msg = _(u'Foo Bar') +""") + messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {})) + self.assertEqual('Foo Bar', messages[0][2]) + self.assertEqual([], messages[0][3]) + + def test_invalid_translator_comments2(self): + buf = StringIO(""" +# NOTE: Hi! +hithere = _('Hi there!') + +# NOTE: you should not be seeing this in the .po +rows = [[v for v in range(0,10)] for row in range(0,10)] + +# this (NOTE:) should not show up either +hello = _('Hello') +""") + messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {})) + self.assertEqual('Hi there!', messages[0][2]) + self.assertEqual(['Hi!'], messages[0][3]) + self.assertEqual('Hello', messages[1][2]) + self.assertEqual([], messages[1][3]) + + def test_invalid_translator_comments3(self): + buf = StringIO(""" +# NOTE: Hi, + +# there! +hithere = _('Hi there!') +""") + messages = list(extract.extract_python(buf, ('_',), ['NOTE:'], {})) + self.assertEqual('Hi there!', messages[0][2]) + self.assertEqual([], messages[0][3]) + +def suite(): + suite = unittest.TestSuite() + suite.addTest(doctest.DocTestSuite(extract)) + suite.addTest(unittest.makeSuite(ExtractPythonTestCase)) + return suite + +if __name__ == '__main__': + unittest.main(defaultTest='suite')