pub use crate::observable::boxed::{
BoxedCoreObservable, BoxedCoreObservableClone, BoxedCoreObservableMutRef,
BoxedCoreObservableMutRefClone, BoxedCoreObservableMutRefSend,
BoxedCoreObservableMutRefSendClone, BoxedCoreObservableSend, BoxedCoreObservableSendClone,
DynCoreObservable, DynCoreObservableClone, IntoBoxedCoreObservable,
};
#[cfg(test)]
mod tests {
use std::{cell::RefCell, convert::Infallible, rc::Rc};
use crate::{observable::boxed::*, prelude::*, scheduler::LocalScheduler};
#[rxrust_macro::test]
fn test_box_it_observable_method() {
let result = Rc::new(RefCell::new(Vec::new()));
let result_clone = result.clone();
Local::of(42).box_it().subscribe(move |v| {
result_clone.borrow_mut().push(v);
});
assert_eq!(*result.borrow(), vec![42]);
}
#[rxrust_macro::test]
fn test_box_it_clone_observable_method() {
let result = Rc::new(RefCell::new(Vec::new()));
let boxed = Local::of(42).box_it_clone();
let boxed2 = boxed.clone();
{
let result_clone = result.clone();
boxed.subscribe(move |v| {
result_clone.borrow_mut().push(v);
});
}
{
let result_clone = result.clone();
boxed2.subscribe(move |v| {
result_clone.borrow_mut().push(v);
});
}
assert_eq!(*result.borrow(), vec![42, 42]);
}
#[rxrust_macro::test]
fn test_local_box_observable() {
let result = Rc::new(RefCell::new(Vec::new()));
let result_clone = result.clone();
let boxed: BoxedCoreObservable<'_, i32, Infallible, LocalScheduler> =
Local::of(42).into_inner().into_boxed();
Local::new(boxed).subscribe(move |v| {
result_clone.borrow_mut().push(v);
});
assert_eq!(*result.borrow(), vec![42]);
}
#[rxrust_macro::test]
fn test_heterogeneous_collection() {
let result = Rc::new(RefCell::new(Vec::new()));
let boxed1: BoxedCoreObservable<'_, i32, Infallible, LocalScheduler> =
Local::of(1).into_inner().into_boxed();
let boxed2: BoxedCoreObservable<'_, i32, Infallible, LocalScheduler> =
Local::from_iter([2, 3]).into_inner().into_boxed();
let observables = vec![boxed1, boxed2];
for obs in observables {
let result_clone = result.clone();
Local::new(obs).subscribe(move |v| {
result_clone.borrow_mut().push(v);
});
}
assert_eq!(*result.borrow(), vec![1, 2, 3]);
}
#[rxrust_macro::test]
fn test_type_erasure() {
let _boxed1: BoxedCoreObservable<'_, i32, Infallible, LocalScheduler> =
Local::of(1).into_inner().into_boxed();
let _boxed2: BoxedCoreObservable<'_, i32, Infallible, LocalScheduler> = Local::of(2)
.map(|x| x * 2)
.into_inner()
.into_boxed();
let _boxed3: BoxedCoreObservable<'_, i32, Infallible, LocalScheduler> =
Local::from_iter([1, 2, 3])
.filter(|x| *x > 1)
.into_inner()
.into_boxed();
}
#[rxrust_macro::test]
fn test_box_it_with_type_alias() {
let result = Rc::new(RefCell::new(Vec::new()));
let result_clone = result.clone();
let boxed: LocalBoxedObservable<'_, i32, Infallible> = Local::of(42).box_it();
boxed.subscribe(move |v| {
result_clone.borrow_mut().push(v);
});
assert_eq!(*result.borrow(), vec![42]);
}
#[rxrust_macro::test]
fn test_box_it_heterogeneous_with_type_alias() {
let result = Rc::new(RefCell::new(Vec::new()));
let boxed1: LocalBoxedObservable<'_, i32, Infallible> = Local::of(1).box_it();
let boxed2: LocalBoxedObservable<'_, i32, Infallible> =
Local::from_iter([2, 3]).map(|x| x * 2).box_it();
let observables = vec![boxed1, boxed2];
for obs in observables {
let result_clone = result.clone();
obs.subscribe(move |v| {
result_clone.borrow_mut().push(v);
});
}
assert_eq!(*result.borrow(), vec![1, 4, 6]);
}
}