mod custom_error;
mod register_emissions;
use custom_error::CustomError;
use register_emissions::register_emissions_subscriber;
use rxr::subjects::BehaviorSubject;
use rxr::{Observer, Subscribeable};
use std::sync::Arc;
#[test]
fn behavior_subject_emit_than_complete() {
let (mut make_subscriber, nexts, completes, errors) = register_emissions_subscriber();
let x = make_subscriber.pop().unwrap()();
let (mut stx, mut srx) = BehaviorSubject::emitter_receiver(9);
stx.next(1);
assert_eq!(srx.len(), 0);
assert_eq!(nexts.lock().unwrap().len(), 0);
assert_eq!(nexts.lock().unwrap().last(), None);
assert_eq!(completes.lock().unwrap().len(), 0);
assert_eq!(errors.lock().unwrap().len(), 0);
srx.subscribe(x);
assert_eq!(srx.len(), 1);
assert_eq!(nexts.lock().unwrap().len(), 1);
assert_eq!(nexts.lock().unwrap().last(), Some(&1));
assert_eq!(completes.lock().unwrap().len(), 0);
assert_eq!(errors.lock().unwrap().len(), 0);
stx.next(2);
assert_eq!(srx.len(), 1);
assert_eq!(nexts.lock().unwrap().len(), 2);
assert_eq!(nexts.lock().unwrap().last(), Some(&2));
assert_eq!(completes.lock().unwrap().len(), 0);
assert_eq!(errors.lock().unwrap().len(), 0);
stx.next(3);
stx.next(4);
assert_eq!(srx.len(), 1);
assert_eq!(nexts.lock().unwrap().len(), 4);
assert_eq!(nexts.lock().unwrap().last(), Some(&4));
assert_eq!(completes.lock().unwrap().len(), 0);
assert_eq!(errors.lock().unwrap().len(), 0);
let y = make_subscriber.pop().unwrap()();
let z = make_subscriber.pop().unwrap()();
srx.subscribe(y); srx.subscribe(z);
assert_eq!(srx.len(), 3);
assert_eq!(nexts.lock().unwrap().len(), 6);
assert_eq!(nexts.lock().unwrap().last(), Some(&4));
assert_eq!(completes.lock().unwrap().len(), 0);
assert_eq!(errors.lock().unwrap().len(), 0);
stx.next(5);
stx.next(6);
assert_eq!(srx.len(), 3);
assert_eq!(nexts.lock().unwrap().len(), 12);
assert_eq!(nexts.lock().unwrap().last(), Some(&6));
assert_eq!(completes.lock().unwrap().len(), 0);
assert_eq!(errors.lock().unwrap().len(), 0);
stx.complete();
assert_eq!(srx.len(), 0);
assert_eq!(nexts.lock().unwrap().len(), 12);
assert_eq!(completes.lock().unwrap().len(), 3);
assert_eq!(errors.lock().unwrap().len(), 0);
let z = make_subscriber.pop().unwrap()();
srx.subscribe(z); stx.next(7);
stx.next(8);
stx.next(9);
assert_eq!(srx.len(), 0);
assert_eq!(nexts.lock().unwrap().len(), 12);
assert_eq!(completes.lock().unwrap().len(), 4);
assert_eq!(errors.lock().unwrap().len(), 0);
}
#[test]
fn behaviour_subject_emit_than_error() {
let (mut make_subscriber, nexts, completes, errors) = register_emissions_subscriber();
let x = make_subscriber.pop().unwrap()();
let y = make_subscriber.pop().unwrap()();
let z = make_subscriber.pop().unwrap()();
let (mut stx, mut srx) = BehaviorSubject::emitter_receiver(1);
srx.subscribe(x); srx.subscribe(y); srx.subscribe(z);
assert_eq!(srx.len(), 3);
assert_eq!(nexts.lock().unwrap().len(), 3);
assert_eq!(completes.lock().unwrap().len(), 0);
assert_eq!(errors.lock().unwrap().len(), 0);
stx.next(1);
stx.next(2);
stx.next(3);
assert_eq!(srx.len(), 3);
assert_eq!(nexts.lock().unwrap().len(), 12);
assert_eq!(completes.lock().unwrap().len(), 0);
assert_eq!(errors.lock().unwrap().len(), 0);
stx.error(Arc::new(CustomError));
assert_eq!(srx.len(), 0);
assert_eq!(nexts.lock().unwrap().len(), 12);
assert_eq!(completes.lock().unwrap().len(), 0);
assert_eq!(errors.lock().unwrap().len(), 3);
let z = make_subscriber.pop().unwrap()();
srx.subscribe(z); stx.next(4);
stx.next(5);
stx.next(6);
assert_eq!(srx.len(), 0);
assert_eq!(nexts.lock().unwrap().len(), 12);
assert_eq!(completes.lock().unwrap().len(), 0);
assert_eq!(errors.lock().unwrap().len(), 4);
}