diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-02-08 20:34:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-08 20:34:31 +0100 |
commit | cdba5ab6fc633606aaa6f95d0825832c3ac6fe5c (patch) | |
tree | e8dee2801e14b65b2da6aca62e39cd3d3ac2a786 /cli/web_worker.rs | |
parent | 619a24390ff15d5ea5e577a4d0391823f94e8592 (diff) |
refactor: rename ThreadSafeState, use RefCell for mutable state (#3931)
* rename ThreadSafeState to State
* State stores InnerState wrapped in Rc and RefCell
Diffstat (limited to 'cli/web_worker.rs')
-rw-r--r-- | cli/web_worker.rs | 81 |
1 files changed, 41 insertions, 40 deletions
diff --git a/cli/web_worker.rs b/cli/web_worker.rs index 7115b9027..05e3184d9 100644 --- a/cli/web_worker.rs +++ b/cli/web_worker.rs @@ -1,6 +1,6 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. use crate::ops; -use crate::state::ThreadSafeState; +use crate::state::State; use crate::worker::Worker; use deno_core; use deno_core::ErrBox; @@ -23,11 +23,7 @@ use std::task::Poll; pub struct WebWorker(Worker); impl WebWorker { - pub fn new( - name: String, - startup_data: StartupData, - state: ThreadSafeState, - ) -> Self { + pub fn new(name: String, startup_data: StartupData, state: State) -> Self { let state_ = state.clone(); let mut worker = Worker::new(name, startup_data, state_); { @@ -70,11 +66,11 @@ impl Future for WebWorker { mod tests { use super::*; use crate::startup_data; - use crate::state::ThreadSafeState; + use crate::state::State; use crate::tokio_util; fn create_test_worker() -> WebWorker { - let state = ThreadSafeState::mock("./hello.js"); + let state = State::mock("./hello.js"); let mut worker = WebWorker::new( "TEST".to_string(), startup_data::deno_isolate_init(), @@ -104,48 +100,53 @@ mod tests { worker.execute(source).unwrap(); let handle = worker.thread_safe_handle(); - let _ = tokio_util::spawn_thread(move || tokio_util::run_basic(worker)); - - tokio_util::run_basic(async move { - let msg = json!("hi").to_string().into_boxed_str().into_boxed_bytes(); - let r = handle.post_message(msg.clone()).await; - assert!(r.is_ok()); - - let maybe_msg = handle.get_message().await; - assert!(maybe_msg.is_some()); - - let r = handle.post_message(msg.clone()).await; - assert!(r.is_ok()); - - let maybe_msg = handle.get_message().await; - assert!(maybe_msg.is_some()); - assert_eq!(*maybe_msg.unwrap(), *b"[1,2,3]"); - - let msg = json!("exit") - .to_string() - .into_boxed_str() - .into_boxed_bytes(); - let r = handle.post_message(msg).await; - assert!(r.is_ok()); + let _ = tokio_util::spawn_thread(move || { + tokio_util::run_basic(async move { + let msg = json!("hi").to_string().into_boxed_str().into_boxed_bytes(); + let r = handle.post_message(msg.clone()).await; + assert!(r.is_ok()); + + let maybe_msg = handle.get_message().await; + assert!(maybe_msg.is_some()); + + let r = handle.post_message(msg.clone()).await; + assert!(r.is_ok()); + + let maybe_msg = handle.get_message().await; + assert!(maybe_msg.is_some()); + assert_eq!(*maybe_msg.unwrap(), *b"[1,2,3]"); + + let msg = json!("exit") + .to_string() + .into_boxed_str() + .into_boxed_bytes(); + let r = handle.post_message(msg).await; + assert!(r.is_ok()); + }) }); + + let r = tokio_util::run_basic(worker); + assert!(r.is_ok()) } #[test] fn removed_from_resource_table_on_close() { let mut worker = create_test_worker(); let handle = worker.thread_safe_handle(); - let worker_complete_fut = tokio_util::spawn_thread(move || { - worker - .execute("onmessage = () => { delete self.onmessage; }") - .unwrap(); - tokio_util::run_basic(worker) + + worker + .execute("onmessage = () => { delete self.onmessage; }") + .unwrap(); + + let worker_post_message_fut = tokio_util::spawn_thread(move || { + let msg = json!("hi").to_string().into_boxed_str().into_boxed_bytes(); + let r = futures::executor::block_on(handle.post_message(msg)); + assert!(r.is_ok()); }); - let msg = json!("hi").to_string().into_boxed_str().into_boxed_bytes(); tokio_util::run_basic(async move { - let r = handle.post_message(msg).await; - assert!(r.is_ok()); - let r = worker_complete_fut.await; + worker_post_message_fut.await; + let r = worker.await; assert!(r.is_ok()); }); } |