Пример #1
0
    def test_DocBaseClass_extraction_CPP(self):
        data = load_testdata('data.cpp')

        # No built-in documentation for C++.
        with self.assertRaises(KeyError):
            tuple(DocBaseClass.extract(data, 'CPP', 'default'))

        docstyle_CPP_doxygen = DocstyleDefinition.load('CPP', 'doxygen')

        self.assertEqual(
            tuple(DocBaseClass.extract(data, 'CPP', 'doxygen')),
            (DocumentationComment(
                ('\n'
                 ' This is the main function.\n'
                 ' @returns Exit code.\n'
                 '          Or any other number.\n'), docstyle_CPP_doxygen, '',
                docstyle_CPP_doxygen.markers[0], TextPosition(4, 1)),
             DocumentationComment(
                 (' foobar\n'
                  ' @param xyz\n'), docstyle_CPP_doxygen, '',
                 docstyle_CPP_doxygen.markers[0], TextPosition(15, 1)),
             DocumentationComment(' Some alternate style of documentation\n',
                                  docstyle_CPP_doxygen, '',
                                  docstyle_CPP_doxygen.markers[4],
                                  TextPosition(22, 1)),
             DocumentationComment(' ends instantly', docstyle_CPP_doxygen,
                                  '\t', docstyle_CPP_doxygen.markers[0],
                                  TextPosition(26, 2)),
             DocumentationComment(
                 (' Should work\n'
                  '\n'
                  ' even without a function standing below.\n'
                  '\n'
                  ' @param foo WHAT PARAM PLEASE!?\n'), docstyle_CPP_doxygen,
                 '', docstyle_CPP_doxygen.markers[4], TextPosition(32, 1))))
    def test_python_doxygen(self):
        data = load_testdata('doxygen.py')

        parsed_docs = [doc.parse() for doc in
                       DocBaseClass.extract(data, 'python', 'doxygen')]

        expected = [
            [self.Description(desc=' @package pyexample\n  Documentation for'
                                   ' this module.\n\n  More details.\n')],
            [self.Description(
                desc=' Documentation for a class.\n\n More details.\n')],
            [self.Description(desc=' The constructor.\n')],
            [self.Description(desc=' Documentation for a method.\n'),
             self.Parameter(name='self', desc='The object pointer.\n')],
            [self.Description(desc=' A class variable.\n')],
            [self.Description(desc=' @var _memVar\n  a member variable\n')],
            [self.Description(desc=' This is the best docstring ever!\n\n'),
             self.Parameter(name='param1', desc='Parameter 1\n'),
             self.Parameter(name='param2', desc='Parameter 2\n'),
             self.ReturnValue(desc='Nothing\n')],
            [self.Description(desc=' This is dummy docstring find '
                                   'function.\n\n'),
             self.Parameter(name='filename', desc='contains filename\n'),
             self.ExceptionValue(name='FileNotFoundError',
                                 desc='raises when filename is not found\n'),
             self.ReturnValue(desc='nothing\n')],
                   ]

        self.assertEqual(parsed_docs, expected)
Пример #3
0
    def test_java_default(self):
        data = load_testdata('default.java')

        parsed_docs = [
            doc.parse()
            for doc in DocBaseClass.extract(data, 'java', 'default')
        ]

        expected = [
            [
                self.Description(
                    desc='\n Returns an String that says Hello with the name'
                    ' argument.\n\n'),
                self.Parameter(name='name',
                               desc='the name to which to say hello\n'),
                self.ExceptionValue(name='IOException',
                                    desc='throws IOException\n'),
                self.ReturnValue(desc='     the concatenated string\n')
            ],
            [
                self.Description(desc='\n Returns Area of a square.\n\n'),
                self.Parameter(name='side', desc='side of square\n'),
                self.ReturnValue(desc=' area of a square\n')
            ],
        ]

        self.assertEqual(expected, parsed_docs)
Пример #4
0
    def test_python_doxygen(self):
        data = load_testdata('doxygen.py')

        parsed_docs = [doc.parse() for doc in
                       DocBaseClass.extract(data, 'python', 'doxygen')]

        expected = [
            [self.Description(desc=' @package pyexample\n  Documentation for'
                                   ' this module.\n\n  More details.\n')],
            [self.Description(
                desc=' Documentation for a class.\n\n More details.\n')],
            [self.Description(desc=' The constructor.\n')],
            [self.Description(desc=' Documentation for a method.\n'),
             self.Parameter(name='self', desc='The object pointer.\n')],
            [self.Description(desc=' A class variable.\n')],
            [self.Description(desc=' @var _memVar\n  a member variable\n')],
            [self.Description(desc=' This is the best docstring ever!\n\n'),
             self.Parameter(name='param1', desc='Parameter 1\n'),
             self.Parameter(name='param2', desc='Parameter 2\n'),
             self.ReturnValue(desc='Nothing\n')],
            [self.Description(desc=' This is dummy docstring find '
                                   'function.\n\n'),
             self.Parameter(name='filename', desc='contains filename\n'),
             self.ExceptionValue(name='FileNotFoundError',
                                 desc='raises when filename is not found\n'),
             self.ReturnValue(desc='nothing\n')],
                   ]

        self.assertEqual(parsed_docs, expected)
Пример #5
0
    def test_python_assembly(self):
        data = load_testdata('default.py')
        docs = ''.join(data)

        for doc in DocBaseClass.extract(data, 'python', 'default'):
            doc.bottom_padding = 2
            doc.assemble.cache_clear()
            self.assertIn(doc.assemble(), docs)
Пример #6
0
    def test_c_assembly(self):
        data = load_testdata('default.c')
        docs = ''.join(data)

        for doc in DocBaseClass.extract(data, 'c', 'doxygen'):
            doc.top_padding = 1
            doc.assemble.cache_clear()
            self.assertIn(doc.assemble(), docs)
    def test_c_assembly(self):
        data = load_testdata('default.c')
        docs = ''.join(data)

        for doc in DocBaseClass.extract(data, 'c', 'doxygen'):
            doc.top_padding = 1
            doc.assemble.cache_clear()
            self.assertIn(doc.assemble(), docs)
    def test_python_default_padding_amend_assembly_2(self):
        data = ['""" documentation in single line """\n']

        for doc in DocBaseClass.extract(data, 'python', 'default'):
            doc.top_padding = 2
            doc.bottom_padding = 3
            doc.assemble.cache_clear()
            self.assertEqual(doc.assemble(),
                             '\n\n""" documentation in single line """\n\n\n')
    def test_python_default_padding_amend_assembly_2(self):
        data = ['""" documentation in single line """\n']

        for doc in DocBaseClass.extract(data, 'python', 'default'):
            doc.top_padding = 2
            doc.bottom_padding = 3
            doc.assemble.cache_clear()
            self.assertEqual(doc.assemble(),
                             '\n\n""" documentation in single line """\n\n\n')
Пример #10
0
    def test_DocBaseClass_extraction_C(self):
        data = load_testdata('data.c')

        # No built-in documentation for C.
        with self.assertRaises(KeyError):
            tuple(DocBaseClass.extract(data, 'C', 'default'))

        docstyle_C_doxygen = DocstyleDefinition.load('C', 'doxygen')

        expected_results = (DocumentationComment(
                                ('\n'
                                 ' This is the main function.\n'
                                 '\n'
                                 ' @returns Your favorite number.\n'),
                                docstyle_C_doxygen, '',
                                docstyle_C_doxygen.markers[0],
                                TextPosition(3, 1)),
                            DocumentationComment(
                                ('\n'
                                 ' Preserves alignment\n'
                                 ' - Main item\n'
                                 '   - sub item\n'
                                 '     - sub sub item\n'),
                                docstyle_C_doxygen, '',
                                docstyle_C_doxygen.markers[2],
                                TextPosition(15, 1)),
                            DocumentationComment(
                                (' ABC\n'
                                 '    Another type of comment\n'
                                 '\n'
                                 '    ...'),
                                docstyle_C_doxygen, '',
                                docstyle_C_doxygen.markers[1],
                                TextPosition(23, 1)),
                            DocumentationComment(
                                (' foobar = barfoo.\n'
                                 ' @param x whatever...\n'),
                                docstyle_C_doxygen, '',
                                docstyle_C_doxygen.markers[0],
                                TextPosition(28, 1)))

        self.assertEqual(tuple(
            DocBaseClass.extract(data, 'C', 'doxygen')),
            expected_results)
Пример #11
0
    def test_DocBaseClass_extraction_C(self):
        data = load_testdata('data.c')

        # No built-in documentation for C.
        with self.assertRaises(KeyError):
            tuple(DocBaseClass.extract(data, 'C', 'default'))

        docstyle_C_doxygen = DocstyleDefinition.load('C', 'doxygen')

        expected_results = (DocumentationComment(
                                ('\n'
                                 ' This is the main function.\n'
                                 '\n'
                                 ' @returns Your favorite number.\n'),
                                docstyle_C_doxygen, '',
                                docstyle_C_doxygen.markers[0],
                                TextPosition(3, 1)),
                            DocumentationComment(
                                ('\n'
                                 ' Preserves alignment\n'
                                 ' - Main item\n'
                                 '   - sub item\n'
                                 '     - sub sub item\n'),
                                docstyle_C_doxygen, '',
                                docstyle_C_doxygen.markers[2],
                                TextPosition(15, 1)),
                            DocumentationComment(
                                (' ABC\n'
                                 '    Another type of comment\n'
                                 '\n'
                                 '    ...'),
                                docstyle_C_doxygen, '',
                                docstyle_C_doxygen.markers[1],
                                TextPosition(23, 1)),
                            DocumentationComment(
                                (' foobar = barfoo.\n'
                                 ' @param x whatever...\n'),
                                docstyle_C_doxygen, '',
                                docstyle_C_doxygen.markers[0],
                                TextPosition(28, 1)))

        self.assertEqual(tuple(
            DocBaseClass.extract(data, 'C', 'doxygen')),
            expected_results)
Пример #12
0
    def test_python_doxygen_padding_amend_assembly(self):
        data = ['## documentation in single line without return at end.']

        for doc in DocBaseClass.extract(data, 'python', 'doxygen'):
            doc.top_padding = 0
            doc.bottom_padding = 2
            doc.assemble.cache_clear()
            self.assertEqual(doc.assemble(),
                             '## documentation in single line '
                             'without return at end.\n\n')
Пример #13
0
    def test_DocBaseClass_extraction_CPP(self):
        data = load_testdata('data.cpp')

        # No built-in documentation for C++.
        with self.assertRaises(KeyError):
            tuple(DocBaseClass.extract(data, 'CPP', 'default'))

        docstyle_CPP_doxygen = DocstyleDefinition.load('CPP', 'doxygen')

        self.assertEqual(tuple(DocBaseClass.extract(data, 'CPP', 'doxygen')),
                         (DocumentationComment(
                              ('\n'
                               ' This is the main function.\n'
                               ' @returns Exit code.\n'
                               '          Or any other number.\n'),
                              docstyle_CPP_doxygen, '',
                              docstyle_CPP_doxygen.markers[0],
                              TextPosition(4, 1)),
                          DocumentationComment(
                              (' foobar\n'
                               ' @param xyz\n'),
                              docstyle_CPP_doxygen, '',
                              docstyle_CPP_doxygen.markers[0],
                              TextPosition(15, 1)),
                          DocumentationComment(
                              ' Some alternate style of documentation\n',
                              docstyle_CPP_doxygen, '',
                              docstyle_CPP_doxygen.markers[4],
                              TextPosition(22, 1)),
                          DocumentationComment(
                              ' ends instantly',
                              docstyle_CPP_doxygen, '\t',
                              docstyle_CPP_doxygen.markers[0],
                              TextPosition(26, 2)),
                          DocumentationComment(
                              (' Should work\n'
                               '\n'
                               ' even without a function standing below.\n'
                               '\n'
                               ' @param foo WHAT PARAM PLEASE!?\n'),
                              docstyle_CPP_doxygen, '',
                              docstyle_CPP_doxygen.markers[4],
                              TextPosition(32, 1))))
    def test_python_doxygen_padding_amend_assembly(self):
        data = ['## documentation in single line without return at end.']

        for doc in DocBaseClass.extract(data, 'python', 'doxygen'):
            doc.top_padding = 0
            doc.bottom_padding = 2
            doc.assemble.cache_clear()
            self.assertEqual(
                doc.assemble(), '## documentation in single line '
                'without return at end.\n\n')
Пример #15
0
    def test_DocBaseClass_extraction_C_2(self):
        data = ['/** my main description\n', ' * continues here */']

        docstyle_C_doxygen = DocstyleDefinition.load('C', 'doxygen')

        self.assertEqual(list(DocBaseClass.extract(data, 'C', 'doxygen')), [
            DocumentationComment(
                ' my main description\n continues here ', docstyle_C_doxygen,
                '', docstyle_C_doxygen.markers[0], TextPosition(1, 1))
        ])
Пример #16
0
    def test_DocBaseClass_CPP_2(self):
        data = load_testdata('data2.cpp')

        docstyle_CPP_doxygen = DocstyleDefinition.load('CPP', 'doxygen')

        self.assertEqual(tuple(DocBaseClass.extract(
            data, 'CPP', 'doxygen')), (DocumentationComment(
                ('module comment\n'
                 ' hello world\n'), docstyle_CPP_doxygen, '',
                docstyle_CPP_doxygen.markers[0], TextPosition(1, 1)), ))
Пример #17
0
    def test_DocBaseClass_instantiate_docstring_type_PYTHON3_11(self):
        data = [
            'def xyz:\n', '   """\n',
            '   This docstring is of docstring_type function\n', '   """\n'
        ]

        docstyle_PYTHON3_default = DocstyleDefinition.load(
            'PYTHON3', 'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual(doc.docstring_type, 'function')
    def test_c_default_padding_amend_assembly(self):
        data = ['/**\n', ' * This is the main function.\n', ' */\n']

        for doc in DocBaseClass.extract(data, 'c', 'doxygen'):
            doc.top_padding = 1
            doc.bottom_padding = 2
            doc.assemble.cache_clear()
            self.assertEqual(
                doc.assemble(), '\n/**\n'
                ' * This is the main function.\n'
                ' */\n\n')
Пример #19
0
    def test_DocBaseClass_extraction_C_2(self):
        data = ['/** my main description\n', ' * continues here */']

        docstyle_C_doxygen = DocstyleDefinition.load('C', 'doxygen')

        self.assertEqual(
            list(DocBaseClass.extract(data, 'C', 'doxygen')),
            [DocumentationComment(' my main description\n continues here',
                                  docstyle_C_doxygen, '',
                                  docstyle_C_doxygen.markers[0],
                                  TextPosition(1, 1))])
Пример #20
0
    def test_DocBaseClass_instantiate_padding_PYTHON3_6(self):
        data = [
            'def some_function:\n', '\n',
            '   """ documentation in single line """\n', '\n', '\n', 'print(1)'
        ]

        docstyle_PYTHON3_default = DocstyleDefinition.load(
            'PYTHON3', 'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual([doc.top_padding, doc.bottom_padding], [1, 2])
Пример #21
0
    def test_DocBaseClass_instantiate_docstring_type_PYTHON3_15(self):
        data = [
            'def some_function():\n', '"""\n', 'documentation\n', '"""\n',
            'class myPrivateClass:\n', '    pass'
        ]

        docstyle_PYTHON3_default = DocstyleDefinition.load(
            'PYTHON3', 'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual(doc.docstring_type, 'function')
Пример #22
0
    def test_DocBaseClass_instantiate_docstring_type_PYTHON3_14(self):
        data = [
            '## Documentation for a class.\n', '#\n', '#  More details.\n',
            'class PyClass:\n', '\n'
        ]

        docstyle_PYTHON3_doxygen = DocstyleDefinition.load(
            'PYTHON3', 'doxygen')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'doxygen'):
            self.assertEqual(doc.docstring_type, 'class')
Пример #23
0
    def test_DocBaseClass_instantiate_docstring_type_PYTHON3_11(self):
        data = ['def xyz:\n',
                '   """\n',
                '   This docstring is of docstring_type function\n',
                '   """\n']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual(doc.docstring_type, 'function')
Пример #24
0
    def test_DocBaseClass_extraction_PYTHON3_4(self):
        data = ['\n', 'triple_quote_string_test = """\n',
                'This is not a docstring\n', '"""\n']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        # Nothing is yielded as triple quote string literals are being
        # ignored.
        self.assertEqual(
            list(DocBaseClass.extract(data, 'PYTHON3', 'default')),
            [])
Пример #25
0
    def test_MalformedComment2_CPP(self):
        data = ['\n', '/** Aborts...\n']

        expected = [
            dedent("""\
            Please check the docstring for faulty markers. A starting
            marker has been found, but no instance of DocComment is
            returned."""), 1
        ]

        for doc_comment in DocBaseClass.extract(data, 'CPP', 'doxygen'):
            self.assertEqual([doc_comment.message, doc_comment.line], expected)
Пример #26
0
    def test_DocBaseClass_instantiate_padding_inline_PYTHON3_9(self):
        # Paddings will not be instantiated for docstring_type=others
        data = [
            '\n', '   """\n', '   documentation in single line\n',
            '   """ # This is inline docstring', '\n', '\n', 'print(1)'
        ]

        docstyle_PYTHON3_default = DocstyleDefinition.load(
            'PYTHON3', 'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual([doc.top_padding, doc.bottom_padding], [0, 0])
Пример #27
0
    def test_DocBaseClass_extraction_PYTHON3_5(self):
        data = ['r"""\n', 'This is a raw docstring\n', '"""\n']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        self.assertEqual(
            list(DocBaseClass.extract(data, 'PYTHON3', 'default')),
            [DocumentationComment('\nThis is a raw docstring\n',
                                  docstyle_PYTHON3_default, 'r',
                                  docstyle_PYTHON3_default.markers[0],
                                  TextPosition(1, 2))])
Пример #28
0
    def test_DocBaseClass_extraction_PYTHON3_5(self):
        data = ['r"""\n', 'This is a raw docstring\n', '"""\n']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        self.assertEqual(
            list(DocBaseClass.extract(data, 'PYTHON3', 'default')),
            [DocumentationComment('\nThis is a raw docstring\n',
                                  docstyle_PYTHON3_default, 'r',
                                  docstyle_PYTHON3_default.markers[0],
                                  TextPosition(1, 2))])
Пример #29
0
    def test_DocBaseClass_extraction_PYTHON3_4(self):
        data = ['\n', 'triple_quote_string_test = """\n',
                'This is not a docstring\n', '"""\n']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        # Nothing is yielded as triple quote string literals are being
        # ignored.
        self.assertEqual(
            list(DocBaseClass.extract(data, 'PYTHON3', 'default')),
            [])
Пример #30
0
    def test_DocBaseClass_instantiate_docstring_type_PYTHON3_12(self):
        data = [
            '\n', '   """\n',
            '   This docstring is of docstring_type others\n', '   """\n',
            '\n', 'print(1)'
        ]

        docstyle_PYTHON3_default = DocstyleDefinition.load(
            'PYTHON3', 'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual(doc.docstring_type, 'others')
Пример #31
0
    def test_DocBaseClass_CPP_2(self):
        data = load_testdata('data2.cpp')

        docstyle_CPP_doxygen = DocstyleDefinition.load('CPP', 'doxygen')

        self.assertEqual(tuple(DocBaseClass.extract(data, 'CPP', 'doxygen')),
                         (DocumentationComment(
                          ('module comment\n'
                           ' hello world\n'),
                          docstyle_CPP_doxygen, '',
                          docstyle_CPP_doxygen.markers[0],
                          TextPosition(1, 1)),))
Пример #32
0
    def test_DocBaseClass_extraction_PYTHON3_2(self):
        data = ['\n', '""" documentation in single line  """\n', 'print(1)\n']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        self.assertEqual(
            list(DocBaseClass.extract(data, 'PYTHON3', 'default')),
            [DocumentationComment(' documentation in single line  ',
                                  docstyle_PYTHON3_default, '',
                                  docstyle_PYTHON3_default.markers[0],
                                  TextPosition(2, 1))])
Пример #33
0
    def test_DocBaseClass_instantiate_docstring_type_PYTHON3_14(self):
        data = ['## Documentation for a class.\n',
                '#\n',
                '#  More details.\n',
                'class PyClass:\n',
                '\n']

        docstyle_PYTHON3_doxygen = DocstyleDefinition.load('PYTHON3',
                                                           'doxygen')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'doxygen'):
            self.assertEqual(doc.docstring_type, 'class')
Пример #34
0
    def test_MalformedComment3_JAVA(self):
        data = ['/**\n', '* Markers are faulty\n', '*/']

        expected = [
            dedent("""\
            Please check the docstring for faulty markers. A starting
            marker has been found, but no instance of DocComment is
            returned."""), 0
        ]

        for doc_comment in DocBaseClass.extract(data, 'JAVA', 'default'):
            self.assertEqual([doc_comment.message, doc_comment.line], expected)
Пример #35
0
    def test_DocBaseClass_extraction_PYTHON3_2(self):
        data = ['\n', '""" documentation in single line  """\n', 'print(1)\n']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        self.assertEqual(
            list(DocBaseClass.extract(data, 'PYTHON3', 'default')),
            [DocumentationComment(' documentation in single line  ',
                                  docstyle_PYTHON3_default, '',
                                  docstyle_PYTHON3_default.markers[0],
                                  TextPosition(2, 1))])
Пример #36
0
    def test_DocBaseClass_extraction_PYTHON3_3(self):
        data = ['## documentation in single line without return at end.']

        docstyle_PYTHON3_doxygen = DocstyleDefinition.load('PYTHON3',
                                                           'doxygen')

        self.assertEqual(
            list(DocBaseClass.extract(data, 'PYTHON3', 'doxygen')),
            [DocumentationComment(' documentation in single line without '
                                  'return at end.',
                                  docstyle_PYTHON3_doxygen, '',
                                  docstyle_PYTHON3_doxygen.markers[1],
                                  TextPosition(1, 1))])
Пример #37
0
    def test_c_default_padding_amend_assembly(self):
        data = ['/**\n',
                ' * This is the main function.\n',
                ' */\n']

        for doc in DocBaseClass.extract(data, 'c', 'doxygen'):
            doc.top_padding = 1
            doc.bottom_padding = 2
            doc.assemble.cache_clear()
            self.assertEqual(doc.assemble(),
                             '\n/**\n'
                             ' * This is the main function.\n'
                             ' */\n\n')
Пример #38
0
    def test_DocBaseClass_extraction_PYTHON3_3(self):
        data = ['## documentation in single line without return at end.']

        docstyle_PYTHON3_doxygen = DocstyleDefinition.load(
            'PYTHON3', 'doxygen')

        self.assertEqual(
            list(DocBaseClass.extract(data, 'PYTHON3', 'doxygen')), [
                DocumentationComment(
                    ' documentation in single line without '
                    'return at end.', docstyle_PYTHON3_doxygen, '',
                    docstyle_PYTHON3_doxygen.markers[1], TextPosition(1, 1))
            ])
Пример #39
0
    def test_generate_diff(self):
        data_old = ['\n', '""" documentation in single line  """\n']
        for doc_comment in DocBaseClass.extract(data_old, 'PYTHON3',
                                                'default'):
            old_doc_comment = doc_comment

        old_range = TextRange.from_values(old_doc_comment.range.start.line, 1,
                                          old_doc_comment.range.end.line,
                                          old_doc_comment.range.end.column)

        data_new = ['\n', '"""\n documentation in single line\n"""\n']
        for doc_comment in DocBaseClass.extract(data_new, 'PYTHON3',
                                                'default'):
            new_doc_comment = doc_comment

        diff = DocBaseClass.generate_diff(data_old, old_doc_comment,
                                          new_doc_comment)

        diff_expected = Diff(data_old)
        diff_expected.replace(old_range, new_doc_comment.assemble())

        self.assertEqual(diff, diff_expected)
Пример #40
0
    def test_DocBaseClass_instantiate_docstring_type_PYTHON3_12(self):
        data = ['\n',
                '   """\n',
                '   This docstring is of docstring_type others\n',
                '   """\n',
                '\n',
                'print(1)']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual(doc.docstring_type, 'others')
Пример #41
0
    def test_DocBaseClass_instantiate_docstring_type_PYTHON3_15(self):
        data = ['def some_function():\n',
                '"""\n',
                'documentation\n',
                '"""\n',
                'class myPrivateClass:\n',
                '    pass']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual(doc.docstring_type, 'function')
Пример #42
0
    def test_MalformedComment2_CPP(self):
        data = ['\n',
                '/** Aborts...\n']

        expected = [dedent("""\
            Please check the docstring for faulty markers. A starting
            marker has been found, but no instance of DocComment is
            returned."""), 1]

        for doc_comment in DocBaseClass.extract(data, 'CPP', 'doxygen'):
            self.assertEqual(
                [doc_comment.message, doc_comment.line],
                expected)
Пример #43
0
    def test_DocBaseClass_instantiate_padding_inline_PYTHON3_8(self):
        # To test that bottom_padding sets to nothing if docstring is
        # followed by inline docstring.
        data = [
            'def some_function:\n', '\n', '   """\n',
            '   documentation in single line\n',
            '   """ # This is inline docstring', '\n', '\n', 'print(1)'
        ]

        docstyle_PYTHON3_default = DocstyleDefinition.load(
            'PYTHON3', 'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual([doc.top_padding, doc.bottom_padding], [1, 0])
Пример #44
0
    def test_DocBaseClass_instantiate_padding_PYTHON3_6(self):
        data = ['def some_function:\n',
                '\n',
                '   """ documentation in single line """\n',
                '\n',
                '\n',
                'print(1)']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual([doc.top_padding, doc.bottom_padding],
                             [1, 2])
Пример #45
0
    def test_MalformedComment3_JAVA(self):
        data = ['/**\n',
                '* Markers are faulty\n',
                '*/']

        expected = [dedent("""\
            Please check the docstring for faulty markers. A starting
            marker has been found, but no instance of DocComment is
            returned."""), 0]

        for doc_comment in DocBaseClass.extract(data, 'JAVA', 'default'):
            self.assertEqual(
                [doc_comment.message, doc_comment.line],
                expected)
Пример #46
0
    def test_MalformedComment1_C(self):
        data = ['/**\n',
                '* A doc-comment aborted in the middle of writing\n',
                '* This won\'t get parsed (hopefully...)\n']

        expected = [dedent("""\
            Please check the docstring for faulty markers. A starting
            marker has been found, but no instance of DocComment is
            returned."""), 0]

        for doc_comment in DocBaseClass.extract(data, 'C', 'doxygen'):
            self.assertEqual(
                [doc_comment.message, doc_comment.line],
                expected)
Пример #47
0
    def test_go_default(self):
        data = load_testdata('default.go')

        parsed_docs = [doc.parse() for doc in
                       DocBaseClass.extract(data, 'golang', 'golang')]

        expected = [['\n',
                     'Comments may span\n',
                     'multiple lines\n'],
                    ['A class comment\n',
                     'that also spans\n',
                     'multiple lines\n'],
                    ['More documentation for everyone, but in one line\n']]

        self.assertEqual(expected, parsed_docs)
Пример #48
0
    def test_MalformedComment1_C(self):
        data = [
            '/**\n', '* A doc-comment aborted in the middle of writing\n',
            '* This won\'t get parsed (hopefully...)\n'
        ]

        expected = [
            dedent("""\
            Please check the docstring for faulty markers. A starting
            marker has been found, but no instance of DocComment is
            returned."""), 0
        ]

        for doc_comment in DocBaseClass.extract(data, 'C', 'doxygen'):
            self.assertEqual([doc_comment.message, doc_comment.line], expected)
Пример #49
0
    def test_generate_diff(self):
        data_old = ['\n', '""" documentation in single line  """\n']
        for doc_comment in DocBaseClass.extract(
                                data_old, 'PYTHON3', 'default'):
            old_doc_comment = doc_comment

        old_range = TextRange.from_values(
            old_doc_comment.range.start.line,
            1,
            old_doc_comment.range.end.line,
            old_doc_comment.range.end.column)

        data_new = ['\n', '"""\n documentation in single line\n"""\n']
        for doc_comment in DocBaseClass.extract(
                                data_new, 'PYTHON3', 'default'):
            new_doc_comment = doc_comment

        diff = DocBaseClass.generate_diff(
                        data_old, old_doc_comment, new_doc_comment)

        diff_expected = Diff(data_old)
        diff_expected.replace(old_range, new_doc_comment.assemble())

        self.assertEqual(diff, diff_expected)
Пример #50
0
    def test_from_metadata(self):
        data = load_testdata('default.py')

        original = list(DocBaseClass.extract(data, 'python', 'default'))

        parsed_docs = [(doc.parse(), doc.marker, doc.indent, doc.position)
                       for doc in original]

        docstyle_definition = DocstyleDefinition.load('python', 'default')

        assembled_docs = [DocumentationComment.from_metadata(
                          doc[0], docstyle_definition, doc[1], doc[2], doc[3])
                          for doc in parsed_docs]

        self.assertEqual(assembled_docs, original)
Пример #51
0
    def test_go_default(self):
        data = load_testdata('default.go')

        parsed_docs = [doc.parse() for doc in
                       DocBaseClass.extract(data, 'golang', 'golang')]

        expected = [['\n',
                     'Comments may span\n',
                     'multiple lines\n'],
                    ['A class comment\n',
                     'that also spans\n',
                     'multiple lines\n'],
                    ['More documentation for everyone, but in one line\n']]

        self.assertEqual(expected, parsed_docs)
Пример #52
0
    def test_from_metadata(self):
        data = load_testdata('default.py')

        original = list(DocBaseClass.extract(data, 'python', 'default'))

        parsed_docs = [(doc.parse(), doc.marker, doc.indent, doc.position)
                       for doc in original]

        docstyle_definition = DocstyleDefinition.load('python', 'default')

        assembled_docs = [DocumentationComment.from_metadata(
                          doc[0], docstyle_definition, doc[1], doc[2], doc[3])
                          for doc in parsed_docs]

        self.assertEqual(assembled_docs, original)
    def test_python_default(self):
        data = load_testdata('default.py')

        parsed_docs = [doc.parse() for doc in
                       DocBaseClass.extract(data, 'python', 'default')]

        expected = [
            [self.Description(desc='\nModule description.\n\n'
                                   'Some more foobar-like text.\n')],
            [self.Description(desc='\nA nice and neat way of '
                                   'documenting code.\n'),
             self.Parameter(name='radius', desc=' The explosion radius. ')],
            [self.Description(desc='A function that returns 55.')],
            [self.Description(desc='\nDocstring with layouted text.\n\n    '
                                   'layouts inside docs are preserved.'
                                   '\nthis is intended.\n')],
            [self.Description(desc=' Docstring inline with triple quotes.\n'
                                   '    Continues here. ')],
            [self.Description(desc='\nThis is the best docstring ever!\n\n'),
             self.Parameter(name='param1',
                            desc='\n    Very Very Long Parameter '
                                 'description.\n'),
             self.Parameter(name='param2',
                            desc='\n    Short Param description.\n\n'),
             self.ReturnValue(desc=' Long Return Description That Makes No '
                                   'Sense And Will\n         Cut to the Next'
                                   ' Line.\n')],
            [self.Description(desc='\nThis is dummy docstring find '
                                   'function.\n\n'),
             self.Parameter(name='filename',
                            desc='\n    contains filename\n'),
             self.ExceptionValue(name='FileNotFoundError',
                                 desc='\n    raised when the given '
                                      'file name was not found\n\n'),
             self.ReturnValue(desc=' returns all possible docstrings'
                                   ' in a file\n')],
            [self.Description(desc='\nThis returns perimeter '
                                   'of a triangle.   \n\n'),
             self.Parameter(name='side_A',
                            desc='\n    length of side_A       \n'),
             self.Parameter(name='side_B',
                            desc='\n    length of side_B    \n'),
             self.Parameter(name='side_C',
                            desc='\n    length of side_C  \n\n'),
             self.ReturnValue(desc=' returns perimeter\n')],
                   ]

        self.assertEqual(parsed_docs, expected)
Пример #54
0
    def test_python_default(self):
        data = load_testdata('default.py')

        parsed_docs = [doc.parse() for doc in
                       DocBaseClass.extract(data, 'python', 'default')]

        expected = [
            [self.Description(desc='\nModule description.\n\n'
                                   'Some more foobar-like text.\n')],
            [self.Description(desc='\nA nice and neat way of '
                                   'documenting code.\n'),
             self.Parameter(name='radius', desc=' The explosion radius. ')],
            [self.Description(desc='A function that returns 55.')],
            [self.Description(desc='\nDocstring with layouted text.\n\n    '
                                   'layouts inside docs are preserved.'
                                   '\nthis is intended.\n')],
            [self.Description(desc=' Docstring inline with triple quotes.\n'
                                   '    Continues here. ')],
            [self.Description(desc='\nThis is the best docstring ever!\n\n'),
             self.Parameter(name='param1',
                            desc='\n    Very Very Long Parameter '
                                 'description.\n'),
             self.Parameter(name='param2',
                            desc='\n    Short Param description.\n\n'),
             self.ReturnValue(desc=' Long Return Description That Makes No '
                                   'Sense And Will\n         Cut to the Next'
                                   ' Line.\n')],
            [self.Description(desc='\nThis is dummy docstring find '
                                   'function.\n\n'),
             self.Parameter(name='filename',
                            desc='\n    contains filename\n'),
             self.ExceptionValue(name='FileNotFoundError',
                                 desc='\n    raised when the given '
                                      'file name was not found\n\n'),
             self.ReturnValue(desc=' returns all possible docstrings'
                                   ' in a file\n')],
            [self.Description(desc='\nThis returns perimeter '
                                   'of a triangle.   \n\n'),
             self.Parameter(name='side_A',
                            desc='\n    length of side_A       \n'),
             self.Parameter(name='side_B',
                            desc='\n    length of side_B    \n'),
             self.Parameter(name='side_C',
                            desc='\n    length of side_C  \n\n'),
             self.ReturnValue(desc=' returns perimeter\n')],
                   ]

        self.assertEqual(parsed_docs, expected)
Пример #55
0
    def test_DocBaseClass_instantiate_padding_inline_PYTHON3_9(self):
        # Paddings will not be instantiated for docstring_type=others
        data = ['\n',
                '   """\n',
                '   documentation in single line\n',
                '   """ # This is inline docstring',
                '\n',
                '\n',
                'print(1)']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual([doc.top_padding, doc.bottom_padding],
                             [0, 0])
Пример #56
0
    def test_java_default(self):
        data = load_testdata('default.java')

        parsed_docs = [doc.parse() for doc in
                       DocBaseClass.extract(data, 'java', 'default')]

        expected = [[self.Description(
                     desc='\n Returns an String that says Hello with the name'
                          ' argument.\n\n'),
                     self.Parameter(name='name',
                                    desc='the name to which to say hello\n'),
                     self.ExceptionValue(name='IOException',
                                         desc='throws IOException\n'),
                     self.ReturnValue(
                         desc='     the concatenated string\n')]]

        self.assertEqual(expected, parsed_docs)
Пример #57
0
    def test_DocBaseClass_instantiate_padding_inline_PYTHON3_8(self):
        # To test that bottom_padding sets to nothing if docstring is
        # followed by inline docstring.
        data = ['def some_function:\n',
                '\n',
                '   """\n',
                '   documentation in single line\n',
                '   """ # This is inline docstring',
                '\n',
                '\n',
                'print(1)']

        docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3',
                                                           'default')

        for doc in DocBaseClass.extract(data, 'PYTHON3', 'default'):
            self.assertEqual([doc.top_padding, doc.bottom_padding],
                             [1, 0])
Пример #58
0
    def test_c_assembly(self):
        data = load_testdata('default.c')
        docs = ''.join(data)

        for doc in DocBaseClass.extract(data, 'c', 'doxygen'):
            self.assertIn(doc.assemble(), docs)
Пример #59
0
    def test_DocBaseClass_extraction_invalid_input(self):

        with self.assertRaises(FileNotFoundError):
            tuple(DocBaseClass.extract('', 'PYTHON', 'INVALID'))
Пример #60
0
    def test_doxygen_assembly(self):
        data = load_testdata('doxygen.py')
        docs = ''.join(data)

        for doc in DocBaseClass.extract(data, 'python', 'doxygen'):
            self.assertIn(doc.assemble(), docs)