Beispiel #1
0
    def test_parameter(self):
        input = """/// @param param Begin parameter. Dignissim diam quis enim lobortis
/// scelerisque fermentum dui faucibus. End parameter."""  # noqa
        output = """Parameter ``param``:
    Begin parameter. Dignissim diam quis enim lobortis scelerisque
    fermentum dui faucibus. End parameter."""
        self.assertEqual(process_comment(input), output)

        input = """/// @param[in] param1 Begin first input parameter. Mollis nunc sed id semper
/// risus in hendrerit gravida rutrum. End first input parameter.
/// @param[in] param2 Begin second input parameter. Tristique senectus et
/// netus et malesuada fames ac turpis. End second input parameter."""  # noqa
        output = """Parameter ``param1``:
    Begin first input parameter. Mollis nunc sed id semper risus in
    hendrerit gravida rutrum. End first input parameter.

Parameter ``param2``:
    Begin second input parameter. Tristique senectus et netus et
    malesuada fames ac turpis. End second input parameter."""
        self.assertEqual(process_comment(input), output)

        input = """/// @param[in,out] param Begin input/output parameter. Morbi enim nunc faucibus
/// a pellentesque sit. End input/output parameter."""  # noqa

        output = """Parameter ``param``:
    Begin input/output parameter. Morbi enim nunc faucibus a
    pellentesque sit. End input/output parameter."""
        self.assertEqual(process_comment(input), output)
Beispiel #2
0
    def test_latex_commands(self):
        input = """/// Public method. @f$ A = \\pi r^2 @f$. Condimentum id venenatis a
/// condimentum vitae sapien pellentesque habitant morbi."""  # noqa
        output = """Public method. :math:`A = \\pi r^2`. Condimentum id venenatis a
condimentum vitae sapien pellentesque habitant morbi."""  # noqa
        self.assertEqual(process_comment(input), output)

        input = """/// Public template method. @f[ a^2 + b^2 = c^2. @f] Sagittis id consectetur
/// purus ut faucibus pulvinar."""  # noqa
        output = """Public template method.

.. math:: a^2 + b^2 = c^2.

Sagittis id consectetur purus ut faucibus pulvinar."""
        self.assertEqual(process_comment(input), output)
Beispiel #3
0
    def test_cond(self):
        input = """/// @cond
/// Begin ignored conditional section. Tortor vitae purus faucibus ornare
/// suspendisse. Orci dapibus ultrices in iaculis. End ignored conditional
/// section.
/// @endcond"""
        self.assertEqual(process_comment(input), "")
    def test_doxygen_system_tags(self):
        # First line is required to parse system tags correctly.
        # This line must be non-empty, or reflow logic does not work as
        # intended.
        input = """\
/// Some text.
///
/// @system
/// name: Alchemist
/// input_ports:
/// - lead
/// output_ports:
/// - gold
/// @endsystem
""".rstrip()
        output = """\
Some text.

.. pydrake_system::

    name: Alchemist
    input_ports:
    - lead
    output_ports:
    - gold
""".rstrip()
        self.assertEqual(process_comment(input), output)
Beispiel #5
0
    def test_template_parameter(self):
        input = """/// @tparam T Begin template parameter. acilisi etiam dignissim diam quis. Ut
/// pharetra sit amet aliquam. End template parameter."""  # noqa
        output = """Template parameter ``T``:
    Begin template parameter. acilisi etiam dignissim diam quis. Ut
    pharetra sit amet aliquam. End template parameter."""
        self.assertEqual(process_comment(input), output)
Beispiel #6
0
    def test_deprecated(self):
        input = """/// @deprecated Begin deprecated. Est pellentesque elit ullamcorper dignissim
/// cras tincidunt lobortis. End deprecated."""  # noqa
        output = """Deprecated:
    Begin deprecated. Est pellentesque elit ullamcorper dignissim cras
    tincidunt lobortis. End deprecated."""
        self.assertEqual(process_comment(input), output)
Beispiel #7
0
    def test_todo(self):
        input = """/// @todo Begin TODO. Ut tellus elementum sagittis vitae et leo duis ut diam.
/// Et malesuada fames ac turpis. End TODO."""  # noqa
        output = """Todo:
    Begin TODO. Ut tellus elementum sagittis vitae et leo duis ut
    diam. Et malesuada fames ac turpis. End TODO."""
        self.assertEqual(process_comment(input), output)
Beispiel #8
0
    def test_class(self):
        input = """/// @class Class
/// Class. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
/// eiusmod tempor incididunt ut labore et dolore magna aliqua."""
        output = """Class. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua."""  # noqa
        self.assertEqual(process_comment(input), output)
Beispiel #9
0
    def test_since(self):
        input = """/// @since Begin since. Nullam eget felis eget nunc lobortis mattis aliquam
/// faucibus. End since."""  # noqa
        output = """Since:
    Begin since. Nullam eget felis eget nunc lobortis mattis aliquam
    faucibus. End since."""
        self.assertEqual(process_comment(input), output)
Beispiel #10
0
    def test_note(self):
        input = """/// @note Begin note. Consectetur a erat nam at lectus. Consequat ac felis
/// donec et odio pellentesque diam. End note."""  # noqa
        output = """Note:
    Begin note. Consectetur a erat nam at lectus. Consequat ac felis
    donec et odio pellentesque diam. End note."""
        self.assertEqual(process_comment(input), output)
Beispiel #11
0
    def test_remark(self):
        input = """/// @remarks Begin remarks. Ante metus dictum at tempor commodo. Nec feugiat
/// in fermentum posuere urna nec. End remarks."""  # noqa
        output = """Remark:
    Begin remarks. Ante metus dictum at tempor commodo. Nec feugiat in
    fermentum posuere urna nec. End remarks."""
        self.assertEqual(process_comment(input), output)
Beispiel #12
0
    def test_invariant(self):
        input = """/// @invariant Begin invariant. Odio euismod lacinia at quis risus sed
/// vulputate odio. End invariant."""  # noqa
        output = """Invariant:
    Begin invariant. Odio euismod lacinia at quis risus sed vulputate
    odio. End invariant."""
        self.assertEqual(process_comment(input), output)
Beispiel #13
0
    def test_sections(self):
        input = """/**
 * @section first_level_heading First level heading
 * Cursus in hac habitasse platea dictumst quisque sagittis purus sit. Et
 * malesuada fames ac turpis.
 * @subsection second_level_heading Second level heading
 * Adipiscing diam donec adipiscing tristique risus nec feugiat. Condimentum
 * vitae sapien pellentesque habitant.
 * @subsubsection third_level_heading Third level heading
 * Fermentum odio eu feugiat pretium nibh. Sed nisi lacus sed viverra.  Ut
 * ornare lectus sit amet est.
*/"""

        output = """First level heading
===================

Cursus in hac habitasse platea dictumst quisque sagittis purus sit. Et
malesuada fames ac turpis.

Second level heading
--------------------

Adipiscing diam donec adipiscing tristique risus nec feugiat.
Condimentum vitae sapien pellentesque habitant.

**Third level heading**

Fermentum odio eu feugiat pretium nibh. Sed nisi lacus sed viverra. Ut
ornare lectus sit amet est."""

        self.assertEqual(process_comment(input), output)
Beispiel #14
0
    def test_attention(self):
        input = """/// @attention Begin attention. Ultricies lacus sed turpis tincidunt id
/// aliquet risus feugiat. End attention."""  # noqa
        output = """Attention:
    Begin attention. Ultricies lacus sed turpis tincidunt id aliquet
    risus feugiat. End attention."""
        self.assertEqual(process_comment(input), output)
Beispiel #15
0
    def test_bug(self):
        input = """/// @bug Begin bug report. Cras pulvinar mattis nunc sed blandit libero. Eget
/// est lorem ipsum dolor sit amet consectetur. End bug report."""  # noqa
        output = """Bug report:
    Begin bug report. Cras pulvinar mattis nunc sed blandit libero.
    Eget est lorem ipsum dolor sit amet consectetur. End bug report."""
        self.assertEqual(process_comment(input), output)
Beispiel #16
0
    def test_remove_var_command(self):
        input = """/// @var int protected_member_
/// Protected member. ``Typewriter``. Porttitor eget dolor morbi non arcu
/// risus quis varius quam."""
        output = """Protected member. ``Typewriter``. Porttitor eget dolor morbi non arcu
risus quis varius quam."""  # noqa

        self.assertEqual(process_comment(input), output)
Beispiel #17
0
    def test_test(self):
        input = """/// @test Begin test case. Sem integer vitae justo eget magna fermentum.
/// Convallis posuere morbi leo urna molestie at elementum eu facilisis. End
/// test case."""  # noqa
        output = """Test case:
    Begin test case. Sem integer vitae justo eget magna fermentum.
    Convallis posuere morbi leo urna molestie at elementum eu
    facilisis. End test case."""
        self.assertEqual(process_comment(input), output)
Beispiel #18
0
    def test_returns(self):
        input = """/// @returns Begin returns. Faucibus interdum posuere lorem ipsum dolor.
/// Malesuada proin libero nunc consequat interdum varius sit amet. End
/// returns."""  # noqa
        output = """Returns:
    Begin returns. Faucibus interdum posuere lorem ipsum dolor.
    Malesuada proin libero nunc consequat interdum varius sit amet.
    End returns."""
        self.assertEqual(process_comment(input), output)
Beispiel #19
0
 def test_font(self):
     self.assertEqual(process_comment("@c Typewriter"), "``Typewriter``")
     self.assertEqual(process_comment("@p Typewriter"), "``Typewriter``")
     self.assertEqual(process_comment("@e Italics"), "*Italics*")
     self.assertEqual(process_comment("@a Italics"), "*Italics*")
     self.assertEqual(process_comment("@em Italics"), "*Italics*")
     self.assertEqual(process_comment("Begin line *Italics*"),
                      "Begin line *Italics*")
     self.assertEqual(process_comment("@b Bold"), "**Bold**")
     self.assertEqual(process_comment("Begin line **Bold**"),
                      "Begin line **Bold**")
    def test_details(self):
        input = """\
/// @details Vitae sapien pellentesque habitant morbi tristique senectus.
/// Iaculis eu non diam phasellus vestibulum.
""".rstrip()
        output = """\
Vitae sapien pellentesque habitant morbi tristique senectus. Iaculis
eu non diam phasellus vestibulum.
""".rstrip()
        self.assertEqual(process_comment(input), output)
Beispiel #21
0
    def test_internal(self):
        input = """/**
 * @internal
 * Begin ignored internal section. Est ante in nibh mauris cursus mattis
 * molestie. Morbi tristique senectus et netus et malesuada. Magnis dis
 * parturient montes nascetur ridiculus mus mauris. End ignored internal
 * section.
 * @endinternal
*/"""
        self.assertEqual(process_comment(input), "")
Beispiel #22
0
    def test_struct(self):
        input = """/**
 * @struct MidLevelSymbol
 * Mid-level symbol. Ut enim ad minim veniam, quis nostrud exercitation
 * ullamco laboris nisi ut aliquip ex ea commodo consequat.
 *
*/"""
        output = """Mid-level symbol. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat."""  # noqa
        self.assertEqual(process_comment(input), output)
Beispiel #23
0
    def test_code(self):
        input = """/// @code{.cpp}
/// Class class();
/// class.PublicMethod();
/// @endcode"""
        output = """::

    Class class();
    class.PublicMethod();"""
        self.assertEqual(process_comment(input), output)
    def test_markdown_to_restructuredtext(self):
        input = """\
/// Quisque sagittis purus sit amet volutpat.
/// # First level heading #
/// Aliquet nec ullamcorper sit amet risus nullam eget felis. __Bold__. Hac
/// habitasse platea dictumst quisque sagittis purus sit.
///
/// ## Second level heading ##
/// Donec massa sapien faucibus et molestie ac feugiat sed lectus. _Italics_.
/// Amet justo donec enim diam vulputate ut pharetra sit.
///
/// ### Third level heading ###
/// Orci eu lobortis elementum nibh. `Typewriter`. Luctus venenatis lectus
/// magna fringilla urna porttitor rhoncus dolor.
///
/// #### Fourth level heading ####
/// Orci eu lobortis elementum nibh. Luctus venenatis lectus magna fringilla
///  urna porttitor rhoncus dolor.

/// Tortor id aliquet lectus proin nibh. [Link](https://example.org). Cras
/// semper auctor neque vitae tempus quam pellentesque nec.
""".rstrip()
        output = """\
Quisque sagittis purus sit amet volutpat.

First level heading
===================

Aliquet nec ullamcorper sit amet risus nullam eget felis. **Bold**.
Hac habitasse platea dictumst quisque sagittis purus sit.

Second level heading
--------------------

Donec massa sapien faucibus et molestie ac feugiat sed lectus.
*Italics*. Amet justo donec enim diam vulputate ut pharetra sit.

**Third level heading**

Orci eu lobortis elementum nibh. ``Typewriter``. Luctus venenatis
lectus magna fringilla urna porttitor rhoncus dolor.

*Fourth level heading*

Orci eu lobortis elementum nibh. Luctus venenatis lectus magna
fringilla urna porttitor rhoncus dolor.

Tortor id aliquet lectus proin nibh. `Link <https://example.org>`_.
Cras semper auctor neque vitae tempus quam pellentesque nec.
""".rstrip()
        self.assertEqual(process_comment(input), output)
Beispiel #25
0
    def test_doxygen_system_tags(self):
        # First empty line is required to parse system tags correctly
        input = """///
/// @system
/// name: Alchemist
/// input_ports:
/// - lead
/// output_ports:
/// - gold
/// @endsystem"""
        output = """.. raw:: html

<table align=center cellpadding=0 cellspacing=0><tr align=center><td
style="vertical-align:middle"><table cellspacing=0
cellpadding=0><tr><td align=right style="padding:5px 0px 5px
0px">lead&rarr;</td></tr></table></td><td align=center
style="border:solid;padding-left:20px;padding-right:20px;vertical-align:middle"
bgcolor=#F0F0F0>Alchemist</td><td style="vertical-align:middle"><table
cellspacing=0 cellpadding=0><tr><td align=left style="padding:5px 0px
5px 0px">&rarr; gold</td></tr></table></td></tr></table>"""  # noqa
        print(process_comment(input))
        print(output)
        self.assertEqual(process_comment(input), output)
Beispiel #26
0
    def test_replace_exceptions(self):
        input = """void func();
/// Function, overload 1. Velit ut tortor pretium viverra suspendisse potenti
/// nullam ac tortor.
/// @throws std::exception Begin raises. Morbi tincidunt augue interdum velit
/// euismod. Justo nec ultrices dui sapien eget mi proin sed libero. End
/// raises."""

        output = """void func(); Function, overload 1. Velit ut tortor pretium viverra
suspendisse potenti nullam ac tortor.

Raises:
    RuntimeError Begin raises. Morbi tincidunt augue interdum velit
    euismod. Justo nec ultrices dui sapien eget mi proin sed libero.
    End raises."""  # noqa

        self.assertEqual(process_comment(input), output)
Beispiel #27
0
def extract(include_file_map, cursor, symbol_tree, deprecations=None):
    """
    Extracts libclang cursors and add to a symbol tree.
    """
    if cursor.kind == CursorKind.TRANSLATION_UNIT:
        deprecations = []
        for i in cursor.get_children():
            if i.kind == CursorKind.MACRO_DEFINITION:
                continue
            if i.kind == CursorKind.MACRO_INSTANTIATION:
                if i.spelling == b'DRAKE_DEPRECATED':
                    deprecations.append(i)
                continue
            extract(include_file_map, i, symbol_tree, deprecations)
        return
    assert cursor.location.file is not None, cursor.kind
    filename = utf8(cursor.location.file.name)
    include = include_file_map.get(filename)
    line = cursor.location.line
    if include is None:
        return
    name_chain = get_name_chain(cursor)
    if not is_accepted_cursor(cursor, name_chain):
        return
    node = None

    def get_node():
        node = symbol_tree.get_node(name_chain)
        if node.first_symbol is None:
            node.first_symbol = Symbol(
                cursor, name_chain, include, line, None)
        return node

    if cursor.kind in RECURSE_LIST:
        if node is None:
            node = get_node()
        for i in cursor.get_children():
            extract(include_file_map, i, symbol_tree, deprecations)
    if cursor.kind in PRINT_LIST:
        if node is None:
            node = get_node()
        if len(cursor.spelling) > 0:
            comment = extract_comment(cursor, deprecations)
            comment = process_comment(comment)
            symbol = Symbol(cursor, name_chain, include, line, comment)
            node.doc_symbols.append(symbol)
Beispiel #28
0
 def test_ingroup(self):
     input = """/// @ingroup first_group second_group"""
     self.assertEqual(process_comment(input), "")
Beispiel #29
0
    def test_fn(self):
        input = """/// @fn void PublicMethod()
void PublicMethod() {}"""
        output = """void PublicMethod() {}"""
        self.assertEqual(process_comment(input), output)
Beispiel #30
0
 def test_remove_relates(self):
     self.assertEqual(process_comment("/// @relates Class"), "")