mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-20 08:20:02 +02:00
adds NumberSlider to state manager tests
This commit is contained in:
parent
464478cda9
commit
e106cc4927
@ -3,9 +3,9 @@ from pathlib import Path
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import pydase
|
import pydase
|
||||||
|
import pydase.components
|
||||||
import pydase.units as u
|
import pydase.units as u
|
||||||
import pytest
|
import pytest
|
||||||
from pydase.components.coloured_enum import ColouredEnum
|
|
||||||
from pydase.data_service.data_service_observer import DataServiceObserver
|
from pydase.data_service.data_service_observer import DataServiceObserver
|
||||||
from pydase.data_service.state_manager import (
|
from pydase.data_service.state_manager import (
|
||||||
StateManager,
|
StateManager,
|
||||||
@ -19,12 +19,53 @@ class SubService(pydase.DataService):
|
|||||||
name = "SubService"
|
name = "SubService"
|
||||||
|
|
||||||
|
|
||||||
class State(ColouredEnum):
|
class State(pydase.components.ColouredEnum):
|
||||||
RUNNING = "#0000FF80"
|
RUNNING = "#0000FF80"
|
||||||
COMPLETED = "hsl(120, 100%, 50%)"
|
COMPLETED = "hsl(120, 100%, 50%)"
|
||||||
FAILED = "hsla(0, 100%, 50%, 0.7)"
|
FAILED = "hsla(0, 100%, 50%, 0.7)"
|
||||||
|
|
||||||
|
|
||||||
|
class MySlider(pydase.components.NumberSlider):
|
||||||
|
@property
|
||||||
|
def min(self) -> float:
|
||||||
|
return self._min
|
||||||
|
|
||||||
|
@min.setter
|
||||||
|
@load_state
|
||||||
|
def min(self, value: float) -> None:
|
||||||
|
self._min = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def max(self) -> float:
|
||||||
|
return self._max
|
||||||
|
|
||||||
|
@max.setter
|
||||||
|
@load_state
|
||||||
|
def max(self, value: float) -> None:
|
||||||
|
self._max = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def step_size(self) -> float:
|
||||||
|
return self._step_size
|
||||||
|
|
||||||
|
@step_size.setter
|
||||||
|
@load_state
|
||||||
|
def step_size(self, value: float) -> None:
|
||||||
|
self._step_size = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def value(self) -> float:
|
||||||
|
return self._value
|
||||||
|
|
||||||
|
@value.setter
|
||||||
|
@load_state
|
||||||
|
def value(self, value: float) -> None:
|
||||||
|
if value < self._min or value > self._max:
|
||||||
|
raise ValueError("Value is either below allowed min or above max value.")
|
||||||
|
|
||||||
|
self._value = value
|
||||||
|
|
||||||
|
|
||||||
class Service(pydase.DataService):
|
class Service(pydase.DataService):
|
||||||
def __init__(self, **kwargs: Any) -> None:
|
def __init__(self, **kwargs: Any) -> None:
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
@ -35,6 +76,7 @@ class Service(pydase.DataService):
|
|||||||
self._property_attr = 1337.0
|
self._property_attr = 1337.0
|
||||||
self._name = "Service"
|
self._name = "Service"
|
||||||
self.state = State.RUNNING
|
self.state = State.RUNNING
|
||||||
|
self.my_slider = MySlider()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
@ -61,6 +103,37 @@ LOAD_STATE = {
|
|||||||
"readonly": False,
|
"readonly": False,
|
||||||
"doc": None,
|
"doc": None,
|
||||||
},
|
},
|
||||||
|
"my_slider": {
|
||||||
|
"type": "NumberSlider",
|
||||||
|
"value": {
|
||||||
|
"max": {
|
||||||
|
"type": "float",
|
||||||
|
"value": 101.0,
|
||||||
|
"readonly": False,
|
||||||
|
"doc": "The min property.",
|
||||||
|
},
|
||||||
|
"min": {
|
||||||
|
"type": "float",
|
||||||
|
"value": 1.0,
|
||||||
|
"readonly": False,
|
||||||
|
"doc": "The min property.",
|
||||||
|
},
|
||||||
|
"step_size": {
|
||||||
|
"type": "float",
|
||||||
|
"value": 2.0,
|
||||||
|
"readonly": False,
|
||||||
|
"doc": "The min property.",
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "float",
|
||||||
|
"value": 1.0,
|
||||||
|
"readonly": False,
|
||||||
|
"doc": "The value property.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"readonly": False,
|
||||||
|
"doc": None,
|
||||||
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"value": "Another name",
|
"value": "Another name",
|
||||||
@ -153,6 +226,10 @@ def test_load_state(tmp_path: Path, caplog: LogCaptureFixture) -> None:
|
|||||||
assert service.name == "Service" # has not changed as readonly
|
assert service.name == "Service" # has not changed as readonly
|
||||||
assert service.some_float == 1.0 # has not changed due to different type
|
assert service.some_float == 1.0 # has not changed due to different type
|
||||||
assert service.subservice.name == "SubService" # didn't change
|
assert service.subservice.name == "SubService" # didn't change
|
||||||
|
assert service.my_slider.value == 1.0 # changed
|
||||||
|
assert service.my_slider.min == 1.0 # changed
|
||||||
|
assert service.my_slider.max == 101.0 # changed
|
||||||
|
assert service.my_slider.step_size == 2.0 # changed
|
||||||
|
|
||||||
assert "'some_unit' changed to '12.0 A'" in caplog.text
|
assert "'some_unit' changed to '12.0 A'" in caplog.text
|
||||||
assert (
|
assert (
|
||||||
@ -168,6 +245,10 @@ def test_load_state(tmp_path: Path, caplog: LogCaptureFixture) -> None:
|
|||||||
"Ignoring value from JSON file..." in caplog.text
|
"Ignoring value from JSON file..." in caplog.text
|
||||||
)
|
)
|
||||||
assert "Value of attribute 'subservice.name' has not changed..." in caplog.text
|
assert "Value of attribute 'subservice.name' has not changed..." in caplog.text
|
||||||
|
assert "'my_slider.value' changed to '1.0'" in caplog.text
|
||||||
|
assert "'my_slider.min' changed to '1.0'" in caplog.text
|
||||||
|
assert "'my_slider.max' changed to '101.0'" in caplog.text
|
||||||
|
assert "'my_slider.step_size' changed to '2.0'" in caplog.text
|
||||||
|
|
||||||
|
|
||||||
def test_filename_warning(tmp_path: Path, caplog: LogCaptureFixture) -> None:
|
def test_filename_warning(tmp_path: Path, caplog: LogCaptureFixture) -> None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user