summaryrefslogtreecommitdiff
path: root/tests/test_pycode.py
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2017-03-18 14:31:29 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2017-03-18 15:00:28 +0900
commit0df0a11cfac651222513bff9426455d449f302c3 (patch)
treef9bf4c8ad192e386a54f54e9d23f040a2af27e7f /tests/test_pycode.py
parent2445b708487a8cbece36e2e58d0520d9e8da4858 (diff)
downloadsphinx-git-0df0a11cfac651222513bff9426455d449f302c3.tar.gz
Add testcode for sphinx.pycode
Diffstat (limited to 'tests/test_pycode.py')
-rw-r--r--tests/test_pycode.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/test_pycode.py b/tests/test_pycode.py
new file mode 100644
index 000000000..710e11341
--- /dev/null
+++ b/tests/test_pycode.py
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+"""
+ test_pycode
+ ~~~~~~~~~~~
+
+ Test pycode.
+
+ :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from sphinx.pycode import ModuleAnalyzer
+
+
+def test_ModuleAnalyzer_find_tags():
+ code = ('class Foo(object):\n' # line: 1
+ ' """class Foo!"""\n'
+ ' def __init__(self):\n'
+ ' pass\n'
+ '\n'
+ ' def bar(self, arg1, arg2=True, *args, **kwargs):\n'
+ ' """method Foo.bar"""\n'
+ ' pass\n'
+ '\n'
+ ' class Baz(object):\n'
+ ' def __init__(self):\n' # line: 11
+ ' pass\n'
+ '\n'
+ 'def qux():\n'
+ ' """function baz"""\n'
+ ' pass\n'
+ '\n'
+ '@decorator\n'
+ 'def quux():\n'
+ ' pass\n')
+ analyzer = ModuleAnalyzer.for_string(code, 'module')
+ tags = analyzer.find_tags()
+ assert set(tags.keys()) == {'Foo', 'Foo.__init__', 'Foo.bar',
+ 'Foo.Baz', 'Foo.Baz.__init__', 'qux', 'quux'}
+ assert tags['Foo'] == ('class', 1, 13) # type, start, end
+ assert tags['Foo.__init__'] == ('def', 3, 5)
+ assert tags['Foo.bar'] == ('def', 6, 9)
+ assert tags['Foo.Baz'] == ('class', 10, 13)
+ assert tags['Foo.Baz.__init__'] == ('def', 11, 13)
+ assert tags['qux'] == ('def', 14, 17)
+ assert tags['quux'] == ('def', 18, 21) # decorator
+
+
+def test_ModuleAnalyzer_find_attr_docs():
+ code = ('class Foo(object):\n'
+ ' """class Foo!"""\n'
+ ' #: comment before attr1\n'
+ ' attr1 = None\n'
+ ' attr2 = None # attribute comment for attr2 (without colon)\n'
+ ' attr3 = None #: attribute comment for attr3\n'
+ ' attr4 = None #: long attribute comment\n'
+ ' #: for attr4\n'
+ ' #: comment before attr5\n'
+ ' attr5 = None #: attribute comment for attr5\n'
+ ' attr6, attr7 = 1, 2 #: this comment is ignored\n'
+ '\n'
+ ' def __init__(self):\n'
+ ' self.attr8 = None #: first attribute comment (ignored)\n'
+ ' self.attr8 = None #: attribute comment for attr8\n'
+ ' #: comment before attr9\n'
+ ' self.attr9 = None #: comment after attr9\n'
+ ' "string after attr9"\n'
+ '\n'
+ ' def bar(self, arg1, arg2=True, *args, **kwargs):\n'
+ ' """method Foo.bar"""\n'
+ ' pass\n'
+ '\n'
+ 'def baz():\n'
+ ' """function baz"""\n'
+ ' pass\n')
+ analyzer = ModuleAnalyzer.for_string(code, 'module')
+ docs = analyzer.find_attr_docs()
+ assert set(docs) == {('Foo', 'attr1'),
+ ('Foo', 'attr3'),
+ ('Foo', 'attr4'),
+ ('Foo', 'attr5'),
+ ('Foo', 'attr8'),
+ ('Foo', 'attr9')}
+ assert docs[('Foo', 'attr1')] == ['comment before attr1', '']
+ assert docs[('Foo', 'attr3')] == ['attribute comment for attr3', '']
+ assert docs[('Foo', 'attr4')] == ['long attribute comment', '']
+ assert docs[('Foo', 'attr4')] == ['long attribute comment', '']
+ assert docs[('Foo', 'attr5')] == ['attribute comment for attr5', '']
+ assert docs[('Foo', 'attr8')] == ['attribute comment for attr8', '']
+ assert docs[('Foo', 'attr9')] == ['string after attr9', '']