From 0dcf34c06857270c25a42c218333b1879cb92ad7 Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Tue, 7 Apr 2026 22:58:29 +0200 Subject: [PATCH] Add tests for core.python.namespaces.PythonPackageNamespace --- .../namespaces/test_PythonPackageNamespace.py | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 tests/unit/core/python/namespaces/test_PythonPackageNamespace.py diff --git a/tests/unit/core/python/namespaces/test_PythonPackageNamespace.py b/tests/unit/core/python/namespaces/test_PythonPackageNamespace.py new file mode 100644 index 0000000..2b7a547 --- /dev/null +++ b/tests/unit/core/python/namespaces/test_PythonPackageNamespace.py @@ -0,0 +1,61 @@ +from src.jcloud_docsgen.core.python.namespaces import PythonPackageNamespace, PythonModuleNamespace +import pytest +from src.jcloud_docsgen.exceptions import NamespaceNotFoundError, InvalidNamespaceError + +class StrSubclass(str): ... + +@pytest.mark.parametrize('namespace,expected_name', [ + (PythonPackageNamespace('', {}), ''), + (PythonPackageNamespace(' ', {}), ' '), + (PythonPackageNamespace('a', {}), 'a'), + (PythonPackageNamespace('1', {}), '1'), + (PythonPackageNamespace(StrSubclass(''), {}), StrSubclass('')), +]) +def test_PythonPackageNamespace_name_attribute(namespace, expected_name): + assert namespace.name == expected_name + +namespace_b = PythonModuleNamespace('b') +namespace_a = PythonPackageNamespace('a', { + 'b': namespace_b +}) +namespace_c = PythonModuleNamespace('c') +namespace_k = PythonModuleNamespace('k') +namespace_j = PythonPackageNamespace('j', {'k': namespace_k}) +namespace_i = PythonPackageNamespace('i', {'j': namespace_j}) +namespace_h = PythonPackageNamespace('h', {'i': namespace_i}) +namespace_g = PythonPackageNamespace('g', {'h': namespace_h}) +namespace_f = PythonPackageNamespace('f', {'g': namespace_g}) +namespace_e = PythonPackageNamespace('e', {'f': namespace_f}) +namespace_d = PythonPackageNamespace('d', {'e': namespace_e}) + +@pytest.mark.parametrize('namespace,sub_namespaces,expected', [ + (PythonPackageNamespace('', { + 'a': namespace_a, + 'c': namespace_c + }), ['c'], namespace_c), + (PythonPackageNamespace('', { + 'a': namespace_a, + 'c': namespace_c + }), ['a'], namespace_a), + (PythonPackageNamespace('', { + 'a': namespace_a, + 'c': namespace_c + }), ['a', 'b'], namespace_b), + (namespace_d, ['e', 'f', 'g', 'h', 'i'], namespace_i), + (namespace_d, ['e', 'f', 'g', 'h', 'i', 'j'], namespace_j), + (namespace_d, ['e', 'f', 'g', 'h', 'i', 'j', 'k'], namespace_k), +]) +def test_PythonPackageNamespace_namespace(namespace: PythonPackageNamespace, sub_namespaces, expected): + assert namespace.namespace(sub_namespaces) == expected + +@pytest.mark.parametrize('namespace,sub_namespaces,expected_exception,expected_exception_msg', [ + (namespace_a, ['c'], NamespaceNotFoundError, 'no such namespace: c'), + (namespace_h, ['i', 'k'], NamespaceNotFoundError, 'no such namespace: k'), + (namespace_a, ['b', ''], InvalidNamespaceError, 'invalid namespace'), + (namespace_a, ['', 'b'], InvalidNamespaceError, 'invalid namespace'), + (namespace_a, ['b', '', 'b'], InvalidNamespaceError, 'invalid namespace'), +]) +def test_PythonPackageNamespace_namespace_exceptions(namespace, sub_namespaces, expected_exception, expected_exception_msg): + with pytest.raises(expected_exception) as exc_info: + namespace.namespace(sub_namespaces) + assert str(exc_info.value) == expected_exception_msg \ No newline at end of file