mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-20 00:10:03 +02:00
97 lines
2.6 KiB
Python
97 lines
2.6 KiB
Python
import logging
|
|
|
|
import pydase
|
|
import pytest
|
|
from pydase.data_service.data_service_observer import DataServiceObserver
|
|
from pydase.data_service.state_manager import StateManager
|
|
|
|
logger = logging.getLogger()
|
|
|
|
|
|
def test_static_property_dependencies() -> None:
|
|
class SubClass(pydase.DataService):
|
|
_name = "SubClass"
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
return self._name
|
|
|
|
@name.setter
|
|
def name(self, value: str) -> None:
|
|
self._name = value
|
|
|
|
class ServiceClass(pydase.DataService):
|
|
def __init__(self) -> None:
|
|
super().__init__()
|
|
self.list_attr = [SubClass()]
|
|
self._name = "ServiceClass"
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
return self._name
|
|
|
|
@name.setter
|
|
def name(self, value: str) -> None:
|
|
self._name = value
|
|
|
|
service_instance = ServiceClass()
|
|
state_manager = StateManager(service_instance)
|
|
observer = DataServiceObserver(state_manager)
|
|
logger.debug(observer.property_deps_dict)
|
|
assert observer.property_deps_dict == {
|
|
"list_attr[0]._name": ["list_attr[0].name"],
|
|
"_name": ["name"],
|
|
}
|
|
|
|
|
|
def test_dynamic_list_property_dependencies() -> None:
|
|
class SubClass(pydase.DataService):
|
|
_name = "SubClass"
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
return self._name
|
|
|
|
@name.setter
|
|
def name(self, value: str) -> None:
|
|
self._name = value
|
|
|
|
class ServiceClass(pydase.DataService):
|
|
def __init__(self) -> None:
|
|
super().__init__()
|
|
self.list_attr = [SubClass()]
|
|
|
|
service_instance = ServiceClass()
|
|
state_manager = StateManager(service_instance)
|
|
observer = DataServiceObserver(state_manager)
|
|
|
|
assert observer.property_deps_dict == {
|
|
"list_attr[0]._name": ["list_attr[0].name"],
|
|
}
|
|
|
|
service_instance.list_attr.append(SubClass())
|
|
|
|
assert observer.property_deps_dict == {
|
|
"list_attr[0]._name": ["list_attr[0].name"],
|
|
"list_attr[1]._name": ["list_attr[1].name"],
|
|
}
|
|
|
|
|
|
def test_protected_or_private_change_logs(caplog: pytest.LogCaptureFixture) -> None:
|
|
class OtherService(pydase.DataService):
|
|
def __init__(self) -> None:
|
|
super().__init__()
|
|
self._name = "Hi"
|
|
|
|
class MyService(pydase.DataService):
|
|
def __init__(self) -> None:
|
|
super().__init__()
|
|
self.subclass = OtherService()
|
|
|
|
service = MyService()
|
|
state_manager = StateManager(service)
|
|
DataServiceObserver(state_manager)
|
|
|
|
service.subclass._name = "Hello"
|
|
assert "'subclass._name' changed to 'Hello'" not in caplog.text
|