gh-104400: Add more tests to pygettext (GH-108173) · python/cpython@dcae5cd

GitHub

Original file line numberDiff line numberDiff line change@@ -0,0 +1,40 @@

1+# SOME DESCRIPTIVE TITLE.

2+# Copyright (C) YEAR ORGANIZATION

3+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.

4+#

5+msgid ""

6+msgstr ""

7+"Project-Id-Version: PACKAGE VERSION\n"

8+"POT-Creation-Date: 2000-01-01 00:00+0000\n"

9+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"

10+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"

11+"Language-Team: LANGUAGE <[email protected]>\n"

12+"MIME-Version: 1.0\n"

13+"Content-Type: text/plain; charset=UTF-8\n"

14+"Content-Transfer-Encoding: 8bit\n"

15+"Generated-By: pygettext.py 1.5\n"

16+17+18+#:docstrings.py:7

19+#, docstring

20+msgid""

21+msgstr""

22+23+#:docstrings.py:18

24+#, docstring

25+msgid""

26+"multiline\n"

27+" docstring\n"

28+" "

29+msgstr""

30+31+#:docstrings.py:25

32+#, docstring

33+msgid"docstring1"

34+msgstr""

35+36+#:docstrings.py:30

37+#, docstring

38+msgid"Hello, {}!"

39+msgstr""

40+Original file line numberDiff line numberDiff line change@@ -0,0 +1,41 @@

1+# Test docstring extraction

2+fromgettextimportgettextas_

3+4+5+# Empty docstring

6+deftest(x):

7+""""""

8+9+10+# Leading empty line

11+deftest2(x):

12+13+"""docstring"""# XXX This should be extracted but isn't.

14+15+16+# XXX Multiline docstrings should be cleaned with `inspect.cleandoc`.

17+deftest3(x):

18+"""multiline

19+ docstring

20+ """

21+22+23+# Multiple docstrings - only the first should be extracted

24+deftest4(x):

25+"""docstring1"""

26+"""docstring2"""

27+28+29+deftest5(x):

30+"""Hello, {}!""".format("world!") # XXX This should not be extracted.

31+32+33+# Nested docstrings

34+deftest6(x):

35+definner(y):

36+"""nested docstring"""# XXX This should be extracted but isn't.

37+38+39+classOuter:

40+classInner:

41+"nested class docstring"# XXX This should be extracted but isn't.

Original file line numberDiff line numberDiff line change@@ -0,0 +1,35 @@

1+# SOME DESCRIPTIVE TITLE.

2+# Copyright (C) YEAR ORGANIZATION

3+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.

4+#

5+msgid ""

6+msgstr ""

7+"Project-Id-Version: PACKAGE VERSION\n"

8+"POT-Creation-Date: 2000-01-01 00:00+0000\n"

9+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"

10+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"

11+"Language-Team: LANGUAGE <[email protected]>\n"

12+"MIME-Version: 1.0\n"

13+"Content-Type: text/plain; charset=UTF-8\n"

14+"Content-Transfer-Encoding: 8bit\n"

15+"Generated-By: pygettext.py 1.5\n"

16+17+18+#:fileloc.py:5fileloc.py:6

19+msgid"foo"

20+msgstr""

21+22+#:fileloc.py:9

23+msgid"bar"

24+msgstr""

25+26+#:fileloc.py:14fileloc.py:18

27+#, docstring

28+msgid"docstring"

29+msgstr""

30+31+#:fileloc.py:22fileloc.py:26

32+#, docstring

33+msgid"baz"

34+msgstr""

35+Original file line numberDiff line numberDiff line change@@ -0,0 +1,26 @@

1+# Test file locations

2+fromgettextimportgettextas_

3+4+# Duplicate strings

5+_('foo')

6+_('foo')

7+8+# Duplicate strings on the same line should only add one location to the output

9+_('bar'), _('bar')

10+11+12+# Duplicate docstrings

13+classA:

14+"""docstring"""

15+16+17+deff():

18+"""docstring"""

19+20+21+# Duplicate message and docstring

22+_('baz')

23+24+25+defg():

26+"""baz"""

Original file line numberDiff line numberDiff line change@@ -0,0 +1,67 @@

1+# SOME DESCRIPTIVE TITLE.

2+# Copyright (C) YEAR ORGANIZATION

3+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.

4+#

5+msgid ""

6+msgstr ""

7+"Project-Id-Version: PACKAGE VERSION\n"

8+"POT-Creation-Date: 2000-01-01 00:00+0000\n"

9+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"

10+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"

11+"Language-Team: LANGUAGE <[email protected]>\n"

12+"MIME-Version: 1.0\n"

13+"Content-Type: text/plain; charset=UTF-8\n"

14+"Content-Transfer-Encoding: 8bit\n"

15+"Generated-By: pygettext.py 1.5\n"

16+17+18+#:messages.py:5

19+msgid""

20+msgstr""

21+22+#:messages.py:8messages.py:9

23+msgid"parentheses"

24+msgstr""

25+26+#:messages.py:12

27+msgid"Hello, world!"

28+msgstr""

29+30+#:messages.py:15

31+msgid""

32+"Hello,\n"

33+" multiline!\n"

34+msgstr""

35+36+#:messages.py:29

37+msgid"Hello, {}!"

38+msgstr""

39+40+#:messages.py:33

41+msgid"1"

42+msgstr""

43+44+#:messages.py:33

45+msgid"2"

46+msgstr""

47+48+#:messages.py:34messages.py:35

49+msgid"A"

50+msgstr""

51+52+#:messages.py:34messages.py:35

53+msgid"B"

54+msgstr""

55+56+#:messages.py:36

57+msgid"set"

58+msgstr""

59+60+#:messages.py:42

61+msgid"nested string"

62+msgstr""

63+64+#:messages.py:47

65+msgid"baz"

66+msgstr""

67+Original file line numberDiff line numberDiff line change@@ -0,0 +1,64 @@

1+# Test message extraction

2+fromgettextimportgettextas_

3+4+# Empty string

5+_("")

6+7+# Extra parentheses

8+(_("parentheses"))

9+((_("parentheses")))

10+11+# Multiline strings

12+_("Hello, "

13+"world!")

14+15+_("""Hello,

16+ multiline!

17+""")

18+19+# Invalid arguments

20+_()

21+_(None)

22+_(1)

23+_(False)

24+_(x="kwargs are not allowed")

25+_("foo", "bar")

26+_("something", x="something else")

27+28+# .format()

29+_("Hello, {}!").format("world") # valid

30+_("Hello, {}!".format("world")) # invalid

31+32+# Nested structures

33+_("1"), _("2")

34+arr= [_("A"), _("B")]

35+obj= {'a': _("A"), 'b': _("B")}

36+{{{_('set')}}}

37+38+39+# Nested functions and classes

40+deftest():

41+_("nested string") # XXX This should be extracted but isn't.

42+ [_("nested string")]

43+44+45+classFoo:

46+defbar(self):

47+return_("baz")

48+49+50+defbar(x=_('default value')): # XXX This should be extracted but isn't.

51+pass

52+53+54+defbaz(x=[_('default value')]): # XXX This should be extracted but isn't.

55+pass

56+57+58+# Shadowing _()

59+def_(x):

60+pass

61+62+63+def_(x="don't extract me"):

64+pass