# SPDX-License-Identifier: BSD-2-Clause """ Unit tests for the rtemsspec.interfacedoc module. """ # Copyright (C) 2020 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. import os import pytest from rtemsspec.glossary import augment_glossary_terms from rtemsspec.interfacedoc import document_directive, generate from rtemsspec.items import EmptyItemCache, ItemCache, ItemMapper from rtemsspec.tests.util import create_item_cache_config_and_copy_spec def test_interfacedoc(tmpdir): item_cache_config = create_item_cache_config_and_copy_spec( tmpdir, "spec-interface", with_spec_types=True) item_cache = ItemCache(item_cache_config) augment_glossary_terms(item_cache["/glossary"], []) doc_config = {} doc_config["group"] = "/gb" introduction_rst = os.path.join(tmpdir, "introduction.rst") doc_config["introduction-target"] = introduction_rst directives_rst = os.path.join(tmpdir, "directives.rst") doc_config["directives-target"] = directives_rst doc_config_2 = {} doc_config_2["group"] = "/ga" introduction_2_rst = os.path.join(tmpdir, "introduction-2.rst") doc_config_2["introduction-target"] = introduction_2_rst directives_2_rst = os.path.join(tmpdir, "directives-2.rst") doc_config_2["directives-target"] = directives_2_rst types_rst = os.path.join(tmpdir, "types.rst") types_config = { "domains": ["/domain-abc"], "groups": [], "target": types_rst } config = { "enabled": [], "groups": [doc_config, doc_config_2], "types": types_config } generate(config, item_cache) with open(introduction_rst, "r") as src: content = """.. SPDX-License-Identifier: CC-BY-SA-4.0 .. Copyright (C) 2020 embedded brains GmbH & Co. KG .. This file is part of the RTEMS quality process and was automatically .. generated. If you find something that needs to be fixed or .. worded better please post a report or patch to an RTEMS mailing list .. or raise a bug report: .. .. https://www.rtems.org/bugs.html .. .. For information on updating and regenerating please refer to the How-To .. section in the Software Requirements Engineering chapter of the .. RTEMS Software Engineering manual. The manual is provided as a part of .. a release. For development sources please refer to the online .. documentation at: .. .. https://docs.rtems.org .. Generated from spec:/gb .. _GroupBIntroduction: Introduction ============ .. The following list was generated from: .. spec:/func4 .. spec:/func2 .. spec:/func3 .. spec:/macro .. spec:/macro2 .. spec:/macro3 The directives provided by the Group B are: * :ref:`InterfaceVeryLongTypeFunction` - Function brief description with very long return type. * :ref:`InterfaceVeryLongFunction` - Very long function brief description. * :ref:`InterfaceVoidFunction` * :ref:`InterfaceVERYLONGMACRO` - Very long macro brief description. * :ref:`InterfaceMACRO` - Short macro brief description. * :ref:`InterfaceMACRO` - Macro without parameters. """ assert content == src.read() with open(directives_rst, "r") as src: content = """.. SPDX-License-Identifier: CC-BY-SA-4.0 .. Copyright (C) 2020 embedded brains GmbH & Co. KG .. This file is part of the RTEMS quality process and was automatically .. generated. If you find something that needs to be fixed or .. worded better please post a report or patch to an RTEMS mailing list .. or raise a bug report: .. .. https://www.rtems.org/bugs.html .. .. For information on updating and regenerating please refer to the How-To .. section in the Software Requirements Engineering chapter of the .. RTEMS Software Engineering manual. The manual is provided as a part of .. a release. For development sources please refer to the online .. documentation at: .. .. https://docs.rtems.org .. _GroupBDirectives: Directives ========== This section details the directives of the Group B. A subsection is dedicated to each of this manager's directives and lists the calling sequence, parameters, description, return values, and notes of the directive. .. Generated from spec:/func4 .. raw:: latex \\clearpage .. index:: VeryLongTypeFunction() .. _InterfaceVeryLongTypeFunction: VeryLongTypeFunction() ---------------------- Function brief description with very long return type. .. rubric:: CALLING SEQUENCE: .. code-block:: c VeryLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongType VeryLongTypeFunction( void ); .. rubric:: DESCRIPTION: I am defined in ````. .. rubric:: RETURN VALUES: This function returns an object with a very long type. .. rubric:: NOTES: See also :c:func:`Func5`. .. Generated from spec:/func2 .. raw:: latex \\clearpage .. index:: VeryLongFunction() .. _InterfaceVeryLongFunction: VeryLongFunction() ------------------ Very long function brief description. .. rubric:: CALLING SEQUENCE: .. code-block:: c int VeryLongFunction( int VeryLongParam0, const struct Struct *VeryLongParam1, Union *( *VeryLongParam2 )( void ), struct Struct *VeryLongParam3 ); .. rubric:: PARAMETERS: ``VeryLongParam0`` This parameter is very long parameter 0 with some super important and extra very long description which makes a lot of sense. ``VeryLongParam1`` This parameter is very long parameter 1. ``VeryLongParam2`` This parameter is very long parameter 2. ``VeryLongParam3`` This parameter is very long parameter 3. .. rubric:: DESCRIPTION: VeryLongFunction description. .. rubric:: RETURN VALUES: ``1`` is returned, in case A. ``2`` is returned, in case B. :ref:`InterfaceEnum` is returned, in case C. Sometimes some value. See :ref:`InterfaceFunction`. .. rubric:: NOTES: VeryLongFunction notes. .. Generated from spec:/func3 .. raw:: latex \\clearpage .. index:: VoidFunction() .. _InterfaceVoidFunction: VoidFunction() -------------- .. rubric:: CALLING SEQUENCE: .. code-block:: c void VoidFunction( void ); .. Generated from spec:/macro .. raw:: latex \\clearpage .. index:: VERY_LONG_MACRO() .. _InterfaceVERYLONGMACRO: VERY_LONG_MACRO() ----------------- Very long macro brief description. .. rubric:: CALLING SEQUENCE: .. code-block:: c VERY_LONG_MACRO( VeryLongParam0, VeryLongParam1, VeryLongParam2, VeryLongParam3 ); .. rubric:: PARAMETERS: ``VeryLongParam0`` This parameter is very long parameter 0 with some super important and extra very long description which makes a lot of sense. ``VeryLongParam1`` This parameter is very long parameter 1. ``VeryLongParam2`` This parameter is very long parameter 2. ``VeryLongParam3`` This parameter is very long parameter 3. .. rubric:: RETURN VALUES: ``1`` is returned, in case A. ``2`` is returned, in case B. Sometimes some value. .. Generated from spec:/macro2 .. raw:: latex \\clearpage .. index:: MACRO() .. _InterfaceMACRO: MACRO() ------- Short macro brief description. .. rubric:: CALLING SEQUENCE: .. code-block:: c MACRO( Param0 ); .. rubric:: PARAMETERS: ``Param0`` This parameter is parameter 0. .. rubric:: RETURN VALUES: Sometimes some value. .. Generated from spec:/macro3 .. raw:: latex \\clearpage .. index:: MACRO() .. _InterfaceMACRO: MACRO() ------- Macro without parameters. .. rubric:: CALLING SEQUENCE: .. code-block:: c MACRO( void ); """ assert content == src.read() with open(introduction_2_rst, "r") as src: content = """.. SPDX-License-Identifier: CC-BY-SA-4.0 .. Copyright (C) 2020 embedded brains GmbH & Co. KG .. This file is part of the RTEMS quality process and was automatically .. generated. If you find something that needs to be fixed or .. worded better please post a report or patch to an RTEMS mailing list .. or raise a bug report: .. .. https://www.rtems.org/bugs.html .. .. For information on updating and regenerating please refer to the How-To .. section in the Software Requirements Engineering chapter of the .. RTEMS Software Engineering manual. The manual is provided as a part of .. a release. For development sources please refer to the online .. documentation at: .. .. https://docs.rtems.org .. Generated from spec:/ga .. _GroupAIntroduction: Introduction ============ .. The following list was generated from: .. spec:/func Group A brief description. Group A description. The directives provided by the Group A are: * :ref:`InterfaceFunction` - Function brief description. """ assert content == src.read() with open(directives_2_rst, "r") as src: content = """.. SPDX-License-Identifier: CC-BY-SA-4.0 .. Copyright (C) 2020 embedded brains GmbH & Co. KG .. This file is part of the RTEMS quality process and was automatically .. generated. If you find something that needs to be fixed or .. worded better please post a report or patch to an RTEMS mailing list .. or raise a bug report: .. .. https://www.rtems.org/bugs.html .. .. For information on updating and regenerating please refer to the How-To .. section in the Software Requirements Engineering chapter of the .. RTEMS Software Engineering manual. The manual is provided as a part of .. a release. For development sources please refer to the online .. documentation at: .. .. https://docs.rtems.org .. _GroupADirectives: Directives ========== This section details the directives of the Group A. A subsection is dedicated to each of this manager's directives and lists the calling sequence, parameters, description, return values, and notes of the directive. .. Generated from spec:/func .. raw:: latex \\clearpage .. index:: Function() .. _InterfaceFunction: Function() ---------- Function brief description. .. rubric:: CALLING SEQUENCE: .. code-block:: c void Function( int Param0, const int *Param1, int *Param2, int *Param3, int *Param4 ); .. rubric:: PARAMETERS: ``Param0`` This parameter is parameter 0. ``Param1`` This parameter is parameter 1. ``Param2`` This parameter is parameter 2. ``Param3`` This parameter is parameter 3. .. rubric:: DESCRIPTION: Function description. References to :term:`xs `, :ref:`InterfaceVeryLongFunction`, :ref:`InterfaceInteger`, :ref:`InterfaceEnum`, :c:macro:`DEFINE`, :ref:`InterfaceVERYLONGMACRO`, Variable, :c:macro:`ENUMERATOR_0`, ``struct Struct``, :ref:`a`, interface, :ref:`GroupA`, and Group F. Second parameter is ``Param1``. Mention ``struct US``. .. code-block: these two lines are not wrapped .. rubric:: CONSTRAINTS: The following constraints apply to this directive: * Constraint A for :ref:`InterfaceFunction`. """ assert content == src.read() directive_item = item_cache["/func3"] directive_content = document_directive(directive_item, [], ItemMapper(directive_item)) assert str(directive_content) == """.. rubric:: CALLING SEQUENCE: .. code-block:: c void VoidFunction( void ); """ with open(types_rst, "r") as src: content = """.. SPDX-License-Identifier: CC-BY-SA-4.0 .. Copyright (C) 2020, 2023 embedded brains GmbH & Co. KG .. This file is part of the RTEMS quality process and was automatically .. generated. If you find something that needs to be fixed or .. worded better please post a report or patch to an RTEMS mailing list .. or raise a bug report: .. .. https://www.rtems.org/bugs.html .. .. For information on updating and regenerating please refer to the How-To .. section in the Software Requirements Engineering chapter of the .. RTEMS Software Engineering manual. The manual is provided as a part of .. a release. For development sources please refer to the online .. documentation at: .. .. https://docs.rtems.org .. index:: RTEMS Data Types .. index:: data types RTEMS Data Types **************** .. _Introduction: Introduction ============ This chapter contains a complete list of the RTEMS primitive data types in alphabetical order. This is intended to be an overview and the user is encouraged to look at the appropriate chapters in the manual for more information about the usage of the various data types. .. _ListOfDataTypes: List of Data Types ================== The following is a complete list of the RTEMS primitive data types in alphabetical order: .. Generated from spec:/enum .. index:: Enum .. _InterfaceEnum: Enum ---- Enum brief description. .. rubric:: ENUMERATORS: ENUMERATOR_0 Enumerator 0 brief description. ENUMERATOR_1 Enumerator 1 brief description. ENUMERATOR_2 Enumerator 2 brief description. .. rubric:: DESCRIPTION: Enum description. .. Generated from spec:/enum2 .. index:: EnumA .. _InterfaceEnumA: EnumA ----- Enum A brief description. .. rubric:: ENUMERATORS: ENUMERATOR_A Enumerator A brief description. .. Generated from spec:/enum3 .. index:: EnumB .. _InterfaceEnumB: EnumB ----- Enum B brief description. .. rubric:: ENUMERATORS: ENUMERATOR_B Enumerator B brief description. .. Generated from spec:/td .. index:: Integer .. _InterfaceInteger: Integer ------- Typedef Integer brief description. .. rubric:: DESCRIPTION: Typedef Integer description. .. Generated from spec:/td3 .. index:: Integer3 .. _InterfaceInteger3: Integer3 -------- .. Generated from spec:/s .. index:: Struct .. _InterfaceStruct: Struct ------ .. rubric:: MEMBERS: some_union Brief union description. Union description. some_member_4 Brief member 4 description. Member 4 description. .. Generated from spec:/s2 .. index:: Struct2 .. _InterfaceStruct2: Struct2 ------- .. rubric:: MEMBERS: Members of the type shall not be accessed directly by the application. .. rubric:: DESCRIPTION: References: :ref:`InterfaceStruct2` .. rubric:: NOTES: Notes. .. Generated from spec:/u .. index:: Union .. _InterfaceUnion: Union ----- .. rubric:: MEMBERS: m_0 Brief member 0 description. m_1 Brief member 1 description. """ assert content == src.read()