use reactive_graph::{
owner::{LocalStorage, Owner, StoredValue},
traits::{ReadValue, UpdateValue, WriteValue},
};
#[test]
fn local_storage_try_access_off_thread_returns_none() {
let owner = Owner::new();
owner.set();
let value: StoredValue<String, LocalStorage> =
StoredValue::new_local("created on thread A".to_string());
assert_eq!(
value.try_read_value().as_deref(),
Some(&"created on thread A".to_string())
);
let owner_b = owner.clone();
let results = std::thread::spawn(move || {
owner_b.set();
let read = value.try_read_value().is_none();
let updated = value.try_update_value(|s| s.push('!')).is_none();
let written = value.try_write_value().is_none();
(read, updated, written)
})
.join()
.expect("accessing LocalStorage off-thread must not panic");
assert_eq!(
results,
(true, true, true),
"off-thread try_* access should return None"
);
assert_eq!(
value.try_read_value().as_deref(),
Some(&"created on thread A".to_string())
);
}