summaryrefslogtreecommitdiffstats
path: root/rtemsspec/tests/test_content_sphinx.py
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2020-07-15 10:04:25 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-07-15 10:12:50 +0200
commite49c7597c091559caa5b1e0f2cabe1bb64ae9cb5 (patch)
tree33978dc3fba68ec39a77855148fc7816d0b56764 /rtemsspec/tests/test_content_sphinx.py
parentRename "external" in "modules" (diff)
downloadrtems-central-e49c7597c091559caa5b1e0f2cabe1bb64ae9cb5.tar.bz2
Rename "rtemsqual" in "rtemsspec"
Diffstat (limited to 'rtemsspec/tests/test_content_sphinx.py')
-rw-r--r--rtemsspec/tests/test_content_sphinx.py274
1 files changed, 274 insertions, 0 deletions
diff --git a/rtemsspec/tests/test_content_sphinx.py b/rtemsspec/tests/test_content_sphinx.py
new file mode 100644
index 00000000..6581b173
--- /dev/null
+++ b/rtemsspec/tests/test_content_sphinx.py
@@ -0,0 +1,274 @@
+# SPDX-License-Identifier: BSD-2-Clause
+""" Unit tests for the rtemsspec.sphinxcontent module. """
+
+# Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+#
+# 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 pytest
+
+from rtemsspec.sphinxcontent import get_reference, get_label, \
+ SphinxContent, SphinxMapper
+from rtemsspec.items import Item, ItemCache, ItemMapper
+from rtemsspec.tests.util import create_item_cache_config_and_copy_spec
+
+
+def test_add_label():
+ content = SphinxContent()
+ content.add_label("x")
+ assert str(content) == """.. _x:
+"""
+
+
+def test_directive():
+ content = SphinxContent()
+ with content.directive("x"):
+ content.add("y")
+ assert str(content) == """.. x::
+
+ y
+"""
+ with content.directive("z", "xy", [":a:", ":b:"]):
+ content.add("c")
+ assert str(content) == """.. x::
+
+ y
+
+.. z:: xy
+ :a:
+ :b:
+
+ c
+"""
+
+
+def test_add_header():
+ content = SphinxContent()
+ content.add_header("x")
+ assert str(content) == """x
+=
+"""
+ content.add_header("yz", 1)
+ assert str(content) == """x
+=
+
+yz
+**
+"""
+
+
+def test_add_header_with_label():
+ content = SphinxContent()
+ label = content.add_header_with_label("x", 1)
+ assert label == "SectionX"
+ assert str(content) == """.. _SectionX:
+
+x
+*
+"""
+ label = content.add_header_with_label("yz w", 2)
+ assert label == "SectionYzW"
+ assert str(content) == """.. _SectionX:
+
+x
+*
+
+.. _SectionYzW:
+
+yz w
+====
+"""
+
+
+def test_get_reference():
+ assert get_reference("a") == ":ref:`a`"
+ assert get_reference("a", "b") == ":ref:`b <a>`"
+
+
+def test_get_label():
+ assert get_label("ab cd") == "AbCd"
+
+
+def test_section():
+ content = SphinxContent()
+ with content.section("ab cd") as label:
+ content.add(label)
+ with content.section("ef gh") as label2:
+ content.add(label2)
+ assert str(content) == """.. _SectionAbCd:
+
+ab cd
+=====
+
+SectionAbCd
+
+.. _SectionEfGh:
+
+ef gh
+-----
+
+SectionEfGh
+"""
+
+
+def test_list_item():
+ content = SphinxContent()
+ with content.list_item("ab cd"):
+ content.paste("ef gh")
+ with content.list_item("ij kl"):
+ content.add("mn op")
+ content.paste("qr st")
+ with content.list_item("uv"):
+ pass
+ content.add_list_item("wx")
+ assert str(content) == """* ab cd ef gh
+
+ * ij kl
+
+ mn op qr st
+
+* uv
+
+* wx
+"""
+
+
+def test_add_list():
+ content = SphinxContent()
+ content.add_list([], "a")
+ assert str(content) == ""
+ content.add_list(["b", "c"], "a", "d")
+ assert str(content) == """a
+
+* b
+
+* c
+
+d
+"""
+ content = SphinxContent()
+ content.add_list(["b", "c"], add_blank_line=True)
+ assert str(content) == """* b
+
+* c
+
+"""
+
+
+def test_append():
+ content = SphinxContent()
+ content.append("x")
+ assert str(content) == """x
+"""
+ with content.indent():
+ content.append("y")
+ assert str(content) == """x
+ y
+"""
+ content.append("")
+ assert str(content) == """x
+ y
+
+"""
+
+
+def test_add_index_entries():
+ content = SphinxContent()
+ content.add_index_entries(["x", "y"])
+ assert str(content) == """.. index:: x
+.. index:: y
+"""
+ content.add_index_entries("z")
+ assert str(content) == """.. index:: x
+.. index:: y
+
+.. index:: z
+"""
+
+
+def test_add_definition_item():
+ content = SphinxContent()
+ content.add_definition_item("x", ["y", "z"])
+ assert str(content) == """x
+ y
+ z
+"""
+ content = SphinxContent()
+ content.add_definition_item("a", "\n b\n")
+ assert str(content) == """a
+ b
+"""
+ content = SphinxContent()
+ content.add_definition_item("a", "\n b\nc", wrap=True)
+ assert str(content) == """a
+ b c
+"""
+
+
+def test_definition_item():
+ content = SphinxContent()
+ with content.definition_item("x"):
+ content.add(["y", "z"])
+ assert str(content) == """x
+ y
+ z
+"""
+
+
+def test_license():
+ content = SphinxContent()
+ with pytest.raises(ValueError):
+ content.register_license("x")
+ content.register_license("CC-BY-SA-4.0")
+ assert str(content) == ""
+ content.add_licence_and_copyrights()
+ assert str(content) == """.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+"""
+
+
+def test_license_and_copyrights():
+ content = SphinxContent()
+ with pytest.raises(ValueError):
+ content.register_license("x")
+ content.register_copyright("Copyright (C) A")
+ assert str(content) == ""
+ content.add_licence_and_copyrights()
+ assert str(content) == """.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) A
+
+"""
+
+
+def test_substitute(tmpdir):
+ config = create_item_cache_config_and_copy_spec(tmpdir,
+ "spec-sphinx",
+ with_spec_types=True)
+ item_cache = ItemCache(config)
+ mapper = SphinxMapper(item_cache["/x"])
+ with pytest.raises(KeyError):
+ mapper.substitute("${x:/y}")
+ assert mapper.substitute("${x:/term}") == ":term:`y`"
+ assert mapper.substitute("${x:/plural}") == ":term:`ys <y>`"
+ mapper.add_get_value("other:/name", lambda ctx: ctx.value[ctx.key])
+ assert mapper.substitute("${y:/name}") == "foobar"