Completed
Pull Request — master (#2423)
by
unknown
01:57
created

DocumentationCommentTest.load_testdata()   A

Complexity

Conditions 2

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
c 1
b 0
f 0
dl 0
loc 10
rs 9.4285
1
import unittest
2
3
from coalib.bearlib.languages.documentation.DocstyleDefinition import (
4
    DocstyleDefinition)
5
from coalib.bearlib.languages.documentation.DocumentationComment import (
6
    DocumentationComment)
7
from coalib.bearlib.languages.documentation.DocumentationExtraction import (
8
    extract_documentation)
9
from tests.bearlib.languages.documentation.TestUtils import (
10
    load_testdata)
11
12
13
class DocumentationCommentTest(unittest.TestCase):
14
15
    Description = DocumentationComment.Description
16
    Parameter = DocumentationComment.Parameter
17
    ReturnValue = DocumentationComment.ReturnValue
18
19
20
class GeneralDocumentationCommentTest(DocumentationCommentTest):
21
22
    def test_fields(self):
23
        c_doxygen = DocstyleDefinition.load("C", "doxygen")
24
        uut = DocumentationComment("my doc",
25
                                   c_doxygen,
26
                                   " ",
27
                                   ("/**", "*", "*/"),
28
                                   (25, 45))
29
30
        self.assertEqual(uut.documentation, "my doc")
31
        self.assertEqual(uut.language, "c")
32
        self.assertEqual(uut.docstyle, "doxygen")
33
        self.assertEqual(uut.indent, " ")
34
        self.assertEqual(str(uut), "my doc")
35
        self.assertEqual(uut.marker, ("/**", "*", "*/"))
36
        self.assertEqual(uut.range, (25, 45))
37
38
        python_doxygen = DocstyleDefinition.load("python", "doxygen")
39
40
        uut = DocumentationComment("qwertzuiop",
41
                                   python_doxygen,
42
                                   "\t",
43
                                   ("##", "#", "#"),
44
                                   None)
45
46
        self.assertEqual(uut.documentation, "qwertzuiop")
47
        self.assertEqual(uut.language, "python")
48
        self.assertEqual(uut.docstyle, "doxygen")
49
        self.assertEqual(uut.indent, "\t")
50
        self.assertEqual(str(uut), "qwertzuiop")
51
        self.assertEqual(uut.marker, ("##", "#", "#"))
52
        self.assertEqual(uut.range, None)
53
54
55
class PythonDocumentationCommentTest(DocumentationCommentTest):
56
57
    def check_docstring(self, docstring, expected=[]):
58
        self.assertIsInstance(docstring,
59
                              str,
60
                              "expected needs to be a string for this test.")
61
62
        self.assertIsInstance(expected,
63
                              list,
64
                              "expected needs to be a list for this test.")
65
66
        python_default = DocstyleDefinition.load("python", "default")
67
68
        doc_comment = DocumentationComment(docstring, python_default,
69
                                           None, None, None)
70
        parsed_metadata = doc_comment.parse()
71
        self.assertEqual(parsed_metadata, expected)
72
73
    def test_empty_docstring(self):
74
        self.check_docstring("", [])
75
76
    def test_description(self):
77
        doc = " description only "
78
        self.check_docstring(doc, [self.Description(desc=' description only ')])
79
80
    def test_params_default(self):
81
        self.maxDiff = None
82
        doc = (" :param test:  test description1 \n"
83
               " :param test:  test description2 \n")
84
        expected = [self.Parameter(name='test', desc='  test description1 \n'),
85
                    self.Parameter(name='test', desc='  test description2 \n')]
86
        self.check_docstring(doc, expected)
87
88
    def test_return_values_default(self):
89
        doc = (" :return: something1 \n"
90
               " :return: something2 ")
91
        expected = [self.ReturnValue(desc=' something1 \n'),
92
                    self.ReturnValue(desc=' something2 ')]
93
        self.check_docstring(doc, expected)
94
95 View Code Duplication
    def test_python_default(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
96
        data = load_testdata("default.py")
97
98
        parsed_docs = [doc.parse() for doc in
99
                       extract_documentation(data, "python", "default")]
100
101
        expected = [
102
            [self.Description(desc='\nModule description.\n\n'
103
                                   'Some more foobar-like text.\n')],
104
            [self.Description(desc='\nA nice and neat way of '
105
                                   'documenting code.\n'),
106
             self.Parameter(name='radius', desc=' The explosion radius.\n')],
107
            [self.Description(desc='\nA function that returns 55.\n')],
108
            [self.Description(desc='\nDocstring with layouted text.\n\n    '
109
                                   'layouts inside docs are preserved.'
110
                                   '\nthis is intended.\n')],
111
            [self.Description(desc=' Docstring inline with triple quotes.\n'
112
                                   '    Continues here. ')],
113
            [self.Description(desc='\nThis is the best docstring ever!\n\n'),
114
             self.Parameter(name='param1',
115
                            desc='\n    Very Very Long Parameter '
116
                                 'description.\n'),
117
             self.Parameter(name='param2',
118
                            desc='\n    Short Param description.\n\n'),
119
             self.ReturnValue(desc=' Long Return Description That Makes No '
120
                                   'Sense And Will\n         Cut to the Next'
121
                                   ' Line.\n')]]
122
123
        self.assertEqual(parsed_docs, expected)
124
125 View Code Duplication
    def test_python_doxygen(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
126
        data = load_testdata("doxygen.py")
127
128
        parsed_docs = [doc.parse() for doc in
129
                       extract_documentation(data, "python", "doxygen")]
130
131
        expected = [
132
            [self.Description(desc=' @package pyexample\n  Documentation for'
133
                                   ' this module.\n\n  More details.\n')],
134
            [self.Description(
135
                desc=' Documentation for a class.\n\n More details.\n')],
136
            [self.Description(desc=' The constructor.\n')],
137
            [self.Description(desc=' Documentation for a method.\n'),
138
             self.Parameter(name='self', desc='The object pointer.\n')],
139
            [self.Description(desc=' A class variable.\n')],
140
            [self.Description(desc=' @var _memVar\n  a member variable\n')],
141
            [self.Description(desc=' This is the best docstring ever!\n\n'),
142
             self.Parameter(name='param1', desc='Parameter 1\n'),
143
             self.Parameter(name='param2', desc='Parameter 2\n'),
144
             self.ReturnValue(desc='Nothing\n')]]
145
146
        self.assertEqual(parsed_docs, expected)
147
148
149
class JavaDocumentationCommentTest(DocumentationCommentTest):
150
151
    def test_java_default(self):
152
        data = load_testdata("default.java")
153
154
        parsed_docs = [doc.parse() for doc in
155
                       extract_documentation(data, "java", "default")]
156
157
        expected = [[self.Description(
158
                     desc='\n Returns an String that says Hello with the name'
159
                          ' argument.\n\n'),
160
                     self.Parameter(name='name',
161
                                    desc='the name to which to say hello\n'),
162
                     self.ReturnValue(
163
                         desc='     the concatenated string\n')]]
164
165
        self.assertEqual(expected, parsed_docs)
166