tractor/tests/msg/test_namespace_path.py

44 lines
1.0 KiB
Python

'''
`NamespacePath` Python-object reference tests.
'''
import pytest
from tractor.msg import ptr as msgptr
from tractor.msg.ptr import NamespacePath
def example_target() -> None:
'''
Provide a module-addressable reference for pointer tests.
'''
def test_retains_target_ref(
monkeypatch: pytest.MonkeyPatch,
) -> None:
'''
Reuse a retained target ref when splitting its namespace path.
`NamespacePath.from_ref()` previously discarded `example_target`,
so `to_tuple()` imported and resolved the just-created string again.
Replacing `resolve_name()` with a failure proves the retained ref
supplies the tuple without a redundant lookup.
'''
target = NamespacePath.from_ref(example_target)
def fail_resolve(name: str) -> object:
raise AssertionError(f'unexpected lookup for {name!r}')
monkeypatch.setattr(
msgptr,
'resolve_name',
fail_resolve,
)
assert target.to_tuple() == (
example_target.__module__,
example_target.__name__,
)