Refactor and fix eval channels (#2302)
* wip * pull out eval into the interpreter * fix web eval * fix DioxusChannel name * properly drop dioxus channel * use typescript dioxus chanel in desktop * add more comments to native eval * add desktop headless eval tests * expand web playwright eval tests * fix web headless tests * fix default hasher path * run eval tests on windows * restore desktop query drop code * remove data from drop desktop query message * catch syntax errors in desktop eval * catch js runtime errors in desktop * fix typo interprerter -> interpreter --------- Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
This commit is contained in:
1 parent
1d72ef16c4
commit
cbeda0af76
23 files changed
+477
-218
No files matched your search
@@ -0,0 +1,64 @@
|
||||
use dioxus::prelude::*;
|
||||
use dioxus_desktop::window;
|
||||
use serde::Deserialize;
|
||||
|
||||
#[path = "./utils.rs"]
|
||||
mod utils;
|
||||
|
||||
pub fn main() {
|
||||
utils::check_app_exits(app);
|
||||
}
|
||||
|
||||
static EVALS_RECEIVED: GlobalSignal<usize> = Signal::global(|| 0);
|
||||
static EVALS_RETURNED: GlobalSignal<usize> = Signal::global(|| 0);
|
||||
|
||||
fn app() -> Element {
|
||||
// Double 100 values in the value
|
||||
use_future(|| async {
|
||||
let mut eval = eval(
|
||||
r#"for (let i = 0; i < 100; i++) {
|
||||
let value = await dioxus.recv();
|
||||
dioxus.send(value*2);
|
||||
}"#,
|
||||
);
|
||||
for i in 0..100 {
|
||||
eval.send(serde_json::Value::from(i)).unwrap();
|
||||
let value = eval.recv().await.unwrap();
|
||||
assert_eq!(value, serde_json::Value::from(i * 2));
|
||||
EVALS_RECEIVED.with_mut(|x| *x += 1);
|
||||
}
|
||||
});
|
||||
|
||||
// Make sure returning no value resolves the future
|
||||
use_future(|| async {
|
||||
let eval = eval(r#"return;"#);
|
||||
|
||||
eval.await.unwrap();
|
||||
EVALS_RETURNED.with_mut(|x| *x += 1);
|
||||
});
|
||||
|
||||
// Return a value from the future
|
||||
use_future(|| async {
|
||||
let eval = eval(
|
||||
r#"
|
||||
return [1, 2, 3];
|
||||
"#,
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
Vec::<i32>::deserialize(&eval.await.unwrap()).unwrap(),
|
||||
vec![1, 2, 3]
|
||||
);
|
||||
EVALS_RETURNED.with_mut(|x| *x += 1);
|
||||
});
|
||||
|
||||
use_memo(|| {
|
||||
println!("expected 100 evals received found {}", EVALS_RECEIVED());
|
||||
println!("expected 2 eval returned found {}", EVALS_RETURNED());
|
||||
if EVALS_RECEIVED() == 100 && EVALS_RETURNED() == 2 {
|
||||
window().close();
|
||||
}
|
||||
});
|
||||
|
||||
None
|
||||
}
|
||||
@@ -18,7 +18,7 @@ fn use_inner_html(id: &'static str) -> Option<String> {
|
||||
|
||||
let res = eval(&format!(
|
||||
r#"let element = document.getElementById('{}');
|
||||
return element.innerHTML"#,
|
||||
return element.innerHTML"#,
|
||||
id
|
||||
))
|
||||
.await
|
||||
|
||||
Reference in new issue
Block a user