Added subject
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user