From 13fff780cc02959a5f3c5caaf2ec6b6530b4fcb1 Mon Sep 17 00:00:00 2001 From: James Knight Date: Sun, 3 Mar 2024 09:57:50 -0500 Subject: [PATCH] tests: adding rst doctest block tests Adding a series of checks to validation the expected output of reStructuredText's doctest blocks. Signed-off-by: James Knight --- .../datasets/rst/doctest-block/index.rst | 7 ++++ tests/unit-tests/test_rst_doctest_block.py | 40 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 tests/unit-tests/datasets/rst/doctest-block/index.rst create mode 100644 tests/unit-tests/test_rst_doctest_block.py diff --git a/tests/unit-tests/datasets/rst/doctest-block/index.rst b/tests/unit-tests/datasets/rst/doctest-block/index.rst new file mode 100644 index 00000000..ef77cd22 --- /dev/null +++ b/tests/unit-tests/datasets/rst/doctest-block/index.rst @@ -0,0 +1,7 @@ +.. https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#doctest-blocks + +doctest-block +------------- + +>>> print 'this is a Doctest block' +this is a Doctest block diff --git a/tests/unit-tests/test_rst_doctest_block.py b/tests/unit-tests/test_rst_doctest_block.py new file mode 100644 index 00000000..54b2e278 --- /dev/null +++ b/tests/unit-tests/test_rst_doctest_block.py @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: BSD-2-Clause +# Copyright Sphinx Confluence Builder Contributors (AUTHORS) + +from bs4 import CData +from tests.lib.parse import parse +from tests.lib.testcase import ConfluenceTestCase +from tests.lib.testcase import setup_builder + + +class TestConfluenceRstDoctestBlock(ConfluenceTestCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.dataset = cls.datasets / 'rst' / 'doctest-block' + + @setup_builder('confluence') + def test_storage_rst_doctest_block(self): + out_dir = self.build(self.dataset) + + with parse('index', out_dir) as data: + code_macros = data.find_all('ac:structured-macro') + self.assertIsNotNone(code_macros) + self.assertEqual(len(code_macros), 1) + + for code_macro in code_macros: + self.assertTrue(code_macro.has_attr('ac:name')) + self.assertEqual(code_macro['ac:name'], 'code') + + doctest_block = code_macros.pop(0) + + doctest_block_lang = doctest_block.find('ac:parameter', + {'ac:name': 'language'}) + self.assertIsNotNone(doctest_block_lang) + self.assertEqual(doctest_block_lang.text, 'python') + + doctest_block_body = doctest_block.find('ac:plain-text-body') + doctest_block_cdata = next(doctest_block_body.children, None) + self.assertIsNotNone(doctest_block_cdata) + self.assertTrue(isinstance(doctest_block_cdata, CData))