| from __future__ import annotations |
|
|
| import pytest |
|
|
| from dovla_cil.sim import genesis_backend, maniskill_backend |
| from dovla_cil.sim.registry import create_backend, get_backend_class, list_backends |
| from dovla_cil.sim.toy_backend import ToyBackend |
|
|
|
|
| def test_registry_can_list_optional_backends() -> None: |
| backends = list_backends() |
|
|
| assert "toy" in backends |
| assert "maniskill" in backends |
| assert "genesis" in backends |
|
|
|
|
| def test_maniskill_backend_class_imports_without_dependency() -> None: |
| backend_class = get_backend_class("maniskill") |
|
|
| assert backend_class.__name__ == "ManiSkillBackend" |
|
|
|
|
| def test_genesis_backend_class_imports_without_dependency() -> None: |
| backend_class = get_backend_class("genesis") |
|
|
| assert backend_class.__name__ == "GenesisBackend" |
|
|
|
|
| def test_requesting_maniskill_without_dependency_gives_clean_error( |
| monkeypatch: pytest.MonkeyPatch, |
| ) -> None: |
| monkeypatch.setattr(maniskill_backend, "_find_maniskill_module", lambda: None) |
|
|
| with pytest.raises(ImportError) as exc_info: |
| create_backend("maniskill") |
|
|
| message = str(exc_info.value) |
| assert "Install optional dependency with" in message |
| assert "OPENCLAUDE" not in message |
|
|
|
|
| def test_requesting_genesis_without_dependency_gives_clean_error( |
| monkeypatch: pytest.MonkeyPatch, |
| ) -> None: |
| monkeypatch.setattr(genesis_backend, "_find_genesis_module", lambda: None) |
|
|
| with pytest.raises(ImportError) as exc_info: |
| create_backend("genesis") |
|
|
| message = str(exc_info.value) |
| assert "Install optional dependency with" in message |
| assert "OPENCLAUDE" not in message |
|
|
|
|
| def test_unknown_backend_raises_value_error() -> None: |
| with pytest.raises(ValueError): |
| create_backend("unknown") |
|
|
|
|
| def test_toy_backend_unaffected() -> None: |
| assert isinstance(create_backend("toy"), ToyBackend) |
|
|