walleth 0.1.0

A (WIP) Rust library for easily create, manage, use and protect Ethereum accounts.
Documentation
use std::sync::{Arc, Mutex};

use walleth::Observable;

#[test]
fn it_creates_emitter_store() {
	let store = Observable::new(0);
	assert_eq!(store.get_state(), &0);
}

#[test]
fn it_sets_the_state() {
	let mut store = Observable::new(0);
	store.set_state(1);
	assert_eq!(store.get_state(), &1);
}

#[test]
fn it_calls_subscriber_callback_when_setting_state() {
	let mut store = Observable::new(0);
	let spy = Arc::new(Mutex::<Vec<i32>>::new(vec![]));

	let r_spy = spy.clone();
	store.subscribe(move |state| {
		r_spy.clone().lock().unwrap().push(state.clone());
	});
	store.set_state(1);

	assert_eq!(spy.lock().unwrap()[0], 1);
}

#[test]
fn it_calls_subscriber_callback_everytime_when_setting_state() {
	let mut store = Observable::new(0);
	let history = Arc::new(Mutex::<Vec<i32>>::new(vec![]));

	let r_history = history.clone();
	store.subscribe(move |state| {
		r_history.lock().unwrap().push(state.clone());
	});
	store.set_state(1);
	store.set_state(2);
	store.set_state(3);

	let locked_history = history.lock().unwrap();
	assert_eq!(locked_history.len(), 3);
	assert_eq!(locked_history[0], 1);
	assert_eq!(locked_history[1], 2);
	assert_eq!(locked_history[2], 3);
}

#[test]
fn it_stops_calling_callback_after_unsubscribe() {
	let mut store = Observable::new(0);
	let history = Arc::new(Mutex::<Vec<i32>>::new(vec![]));
	let r_history = history.clone();
	let id = store.subscribe(move |state| {
		r_history.lock().unwrap().push(state.clone());
	});
	store.set_state(1);

	store.unsubscribe(id);
	store.set_state(2);

	assert_eq!(history.lock().unwrap().len(), 1);
}