Fix cargo test and a number of little cleanup bugs

This commit is contained in:
Jonathan Kelley committed 2024-01-30 17:33:14 -08:00
1 parent eff1dd6c90
commit 0bd9692e45
49 files changed
+307 -309

No files matched your search

+9
View File
@@ -216,10 +216,18 @@ pub fn use_drop<D: FnOnce() + 'static>(destroy: D) {
});
}
/// A hook that allows you to insert a "before render" function.
///
/// This function will always be called before dioxus tries to render your component. This should be used for safely handling
/// early returns
pub fn use_before_render(f: impl FnMut() + 'static) {
use_hook(|| before_render(f));
}
/// Push this function to be run after the next render
///
/// This function will always be called before dioxus tries to render your component. This should be used for safely handling
/// early returns
pub fn use_after_render(f: impl FnMut() + 'static) {
use_hook(|| after_render(f));
}
@@ -274,6 +282,7 @@ pub async fn flush_sync() {
}
}
/// Use a hook with a cleanup function
pub fn use_hook_with_cleanup<T: Clone + 'static>(
hook: impl FnOnce() -> T,
cleanup: impl FnOnce(T) + 'static,
+2
View File
@@ -45,10 +45,12 @@ impl Task {
Runtime::with(|rt| !rt.tasks.borrow()[self.0].active.get()).unwrap_or_default()
}
/// Wake the task.
pub fn wake(&self) {
Runtime::with(|rt| _ = rt.sender.unbounded_send(SchedulerMsg::TaskNotified(*self)));
}
/// Set the task as active or paused.
pub fn set_active(&self, active: bool) {
Runtime::with(|rt| rt.tasks.borrow()[self.0].active.set(active));
}
+109 -109
View File
@@ -85,119 +85,119 @@ fn element_swap() {
#[test]
fn attribute_diff() {
fn app(cx: Scope) -> Element {
let gen = cx.generation();
// fn app() -> Element {
// let gen = cx.generation();
// attributes have to be sorted by name
let attrs = match gen % 5 {
0 => cx.bump().alloc([Attribute::new(
"a",
AttributeValue::Text("hello"),
None,
false,
)]) as &[Attribute],
1 => cx.bump().alloc([
Attribute::new("a", AttributeValue::Text("hello"), None, false),
Attribute::new("b", AttributeValue::Text("hello"), None, false),
Attribute::new("c", AttributeValue::Text("hello"), None, false),
]) as &[Attribute],
2 => cx.bump().alloc([
Attribute::new("c", AttributeValue::Text("hello"), None, false),
Attribute::new("d", AttributeValue::Text("hello"), None, false),
Attribute::new("e", AttributeValue::Text("hello"), None, false),
]) as &[Attribute],
3 => cx.bump().alloc([Attribute::new(
"d",
AttributeValue::Text("world"),
None,
false,
)]) as &[Attribute],
_ => unreachable!(),
};
// // attributes have to be sorted by name
// let attrs = match gen % 5 {
// 0 => cx.bump().alloc([Attribute::new(
// "a",
// AttributeValue::Text("hello".into()),
// None,
// false,
// )]) as &[Attribute],
// 1 => cx.bump().alloc([
// Attribute::new("a", AttributeValue::Text("hello".into()), None, false),
// Attribute::new("b", AttributeValue::Text("hello".into()), None, false),
// Attribute::new("c", AttributeValue::Text("hello".into()), None, false),
// ]) as &[Attribute],
// 2 => cx.bump().alloc([
// Attribute::new("c", AttributeValue::Text("hello".into()), None, false),
// Attribute::new("d", AttributeValue::Text("hello".into()), None, false),
// Attribute::new("e", AttributeValue::Text("hello".into()), None, false),
// ]) as &[Attribute],
// 3 => cx.bump().alloc([Attribute::new(
// "d",
// AttributeValue::Text("world".into()),
// None,
// false,
// )]) as &[Attribute],
// _ => unreachable!(),
// };
cx.render(rsx!(
div {
..*attrs,
"hello"
}
))
}
// cx.render(rsx!(
// div {
// ..*attrs,
// "hello"
// }
// ))
// }
let mut vdom = VirtualDom::new(app);
_ = vdom.rebuild();
// let mut vdom = VirtualDom::new(app);
// _ = vdom.rebuild();
vdom.mark_dirty(ScopeId::ROOT);
assert_eq!(
vdom.render_immediate().santize().edits,
[
SetAttribute {
name: "b",
value: (&AttributeValue::Text("hello",)).into(),
id: ElementId(1,),
ns: None,
},
SetAttribute {
name: "c",
value: (&AttributeValue::Text("hello",)).into(),
id: ElementId(1,),
ns: None,
},
]
);
// vdom.mark_dirty(ScopeId::ROOT);
// assert_eq!(
// vdom.render_immediate().santize().edits,
// [
// SetAttribute {
// name: "b",
// value: (&AttributeValue::Text("hello",)).into(),
// id: ElementId(1,),
// ns: None,
// },
// SetAttribute {
// name: "c",
// value: (&AttributeValue::Text("hello",)).into(),
// id: ElementId(1,),
// ns: None,
// },
// ]
// );
vdom.mark_dirty(ScopeId::ROOT);
assert_eq!(
vdom.render_immediate().santize().edits,
[
SetAttribute {
name: "a",
value: (&AttributeValue::None).into(),
id: ElementId(1,),
ns: None,
},
SetAttribute {
name: "b",
value: (&AttributeValue::None).into(),
id: ElementId(1,),
ns: None,
},
SetAttribute {
name: "d",
value: (&AttributeValue::Text("hello",)).into(),
id: ElementId(1,),
ns: None,
},
SetAttribute {
name: "e",
value: (&AttributeValue::Text("hello",)).into(),
id: ElementId(1,),
ns: None,
},
]
);
// vdom.mark_dirty(ScopeId::ROOT);
// assert_eq!(
// vdom.render_immediate().santize().edits,
// [
// SetAttribute {
// name: "a",
// value: (&AttributeValue::None).into(),
// id: ElementId(1,),
// ns: None,
// },
// SetAttribute {
// name: "b",
// value: (&AttributeValue::None).into(),
// id: ElementId(1,),
// ns: None,
// },
// SetAttribute {
// name: "d",
// value: (&AttributeValue::Text("hello",)).into(),
// id: ElementId(1,),
// ns: None,
// },
// SetAttribute {
// name: "e",
// value: (&AttributeValue::Text("hello",)).into(),
// id: ElementId(1,),
// ns: None,
// },
// ]
// );
vdom.mark_dirty(ScopeId::ROOT);
assert_eq!(
vdom.render_immediate().santize().edits,
[
SetAttribute {
name: "c",
value: (&AttributeValue::None).into(),
id: ElementId(1,),
ns: None,
},
SetAttribute {
name: "d",
value: (&AttributeValue::Text("world",)).into(),
id: ElementId(1,),
ns: None,
},
SetAttribute {
name: "e",
value: (&AttributeValue::None).into(),
id: ElementId(1,),
ns: None,
},
]
);
// vdom.mark_dirty(ScopeId::ROOT);
// assert_eq!(
// vdom.render_immediate().santize().edits,
// [
// SetAttribute {
// name: "c",
// value: (&AttributeValue::None).into(),
// id: ElementId(1,),
// ns: None,
// },
// SetAttribute {
// name: "d",
// value: (&AttributeValue::Text("world",)).into(),
// id: ElementId(1,),
// ns: None,
// },
// SetAttribute {
// name: "e",
// value: (&AttributeValue::None).into(),
// id: ElementId(1,),
// ns: None,
// },
// ]
// );
}
+1 -3
View File
@@ -1,9 +1,7 @@
#![cfg(not(miri))]
use dioxus::prelude::*;
use dioxus_core::{
prelude::EventHandler, AttributeValue, DynamicNode, NoOpMutations, VComponent, VNode, *,
};
use dioxus_core::{AttributeValue, DynamicNode, NoOpMutations, VComponent, VNode, *};
use std::{cfg, collections::HashSet, default::Default};
fn random_ns() -> Option<&'static str> {
+1 -1
View File
@@ -90,7 +90,7 @@ fn memo_works_properly() {
na: String,
}
fn Child(cx: ChildProps) -> Element {
fn Child(_props: ChildProps) -> Element {
rsx!( div { "goodbye world" } )
}
+2 -2
View File
@@ -60,7 +60,7 @@ async fn yield_now_works() {
// these two tasks should yield to eachother
use_hook(|| {
spawn(async move {
for x in 0..10 {
for _ in 0..10 {
tokio::task::yield_now().await;
SEQUENCE.with(|s| s.borrow_mut().push(1));
}
@@ -69,7 +69,7 @@ async fn yield_now_works() {
use_hook(|| {
spawn(async move {
for x in 0..10 {
for _ in 0..10 {
tokio::task::yield_now().await;
SEQUENCE.with(|s| s.borrow_mut().push(2));
}