Added subject

This commit is contained in:
2023-04-15 18:59:24 +02:00
parent efc9cf9c83
commit e6ee543a1d
4 changed files with 113 additions and 35 deletions

View File

@@ -1,18 +1,28 @@
import traceback
import unittest
from threading import Timer
from cpl_core.console import Console
from cpl_reactive_extensions.observable import Observable
from cpl_reactive_extensions.observer import Observer
from cpl_reactive_extensions.subject import Subject
class ReactiveTestCase(unittest.TestCase):
def setUp(self):
pass
self._error = False
self._completed = False
def _on_error(self, ex: Exception):
tb = traceback.format_exc()
Console.error(f"Somthing went wrong: {ex}", tb)
self._error = True
def _on_complete(self):
self._completed = True
def test_observer(self):
called = 0
has_error = False
completed = False
test_x = 1
def callback(observer: Observer):
@@ -38,34 +48,55 @@ class ReactiveTestCase(unittest.TestCase):
called += 1
self.assertEqual(test_x, x)
def on_err():
nonlocal has_error
has_error = True
def on_complete():
nonlocal completed
completed = True
self.assertEqual(called, 0)
self.assertFalse(has_error)
self.assertFalse(completed)
self.assertFalse(self._error)
self.assertFalse(self._completed)
observable.subscribe(
Observer(
on_next,
on_err,
on_complete,
)
on_next,
self._on_error,
self._on_complete,
)
self.assertEqual(called, 3)
self.assertFalse(has_error)
self.assertFalse(completed)
self.assertFalse(self._error)
self.assertFalse(self._completed)
def complete():
self.assertEqual(called, 4)
self.assertFalse(has_error)
self.assertTrue(completed)
self.assertFalse(self._error)
self.assertTrue(self._completed)
Timer(1.0, complete).start()
def test_observable_from(self):
expected_x = 1
def _next(x):
nonlocal expected_x
self.assertEqual(expected_x, x)
expected_x += 1
observable = Observable.from_list([1, 2, 3, 4])
observable.subscribe(
_next,
self._on_error,
)
self.assertFalse(self._error)
def test_subject(self):
pass
expected_x = 1
def _next(x):
nonlocal expected_x
self.assertEqual(expected_x, x)
expected_x += 1
if expected_x == 4:
expected_x = 1
subject = Subject(int)
subject.subscribe(_next, self._on_error, self._on_complete)
subject.subscribe(_next, self._on_error, self._on_complete)
observable = Observable.from_list([1, 2, 3])
observable.subscribe(subject, self._on_error, self._on_complete)
self.assertFalse(self._error)