Added behavior subject

This commit is contained in:
Sven Heidemann 2023-04-15 19:21:11 +02:00
parent 9d05d76cfa
commit d7d41b878c
3 changed files with 35 additions and 11 deletions

View File

@ -0,0 +1,23 @@
from cpl_core.type import T
from cpl_reactive_extensions.observable import Observable
class BehaviorSubject(Observable):
def __init__(self, _t: type, value: T):
Observable.__init__(self, lambda x: x)
if not isinstance(value, _t):
raise TypeError(f"Expected {_t.__name__} not {type(value).__name__}")
self._t = _t
self._value = value
@property
def value(self) -> T:
return self._value
def next(self, value: T):
if not isinstance(value, self._t):
raise TypeError(f"Expected {self._t.__name__} not {type(value).__name__}")
self._value = value

View File

@ -7,14 +7,3 @@ class Subject(Observable):
Observable.__init__(self)
self._t = _t
self._value: T = None
@property
def value(self) -> T:
return self._value
def next(self, value: T):
if not isinstance(value, self._t):
raise TypeError(f"Expected {self._t.__name__} not {type(value).__name__}")
self._value = value

View File

@ -4,6 +4,7 @@ import unittest
from threading import Timer
from cpl_core.console import Console
from cpl_reactive_extensions.behavior_subject import BehaviorSubject
from cpl_reactive_extensions.observable import Observable
from cpl_reactive_extensions.observer import Observer
from cpl_reactive_extensions.subject import Subject
@ -114,3 +115,14 @@ class ReactiveTestCase(unittest.TestCase):
observable.subscribe(subject, self._on_error)
self.assertFalse(self._error)
def test_behavior_subject(self):
subject = BehaviorSubject(int, 0)
subject.subscribe(lambda x: Console.write_line("a", x))
subject.next(1)
subject.next(2)
subject.subscribe(lambda x: Console.write_line("b", x))
subject.next(3)