kitchen_sink.rs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. use bumpalo::Bump;
  2. use dioxus::core::{ElementId, Mutation};
  3. use dioxus::prelude::*;
  4. fn basic_syntax_is_a_template(cx: Scope) -> Element {
  5. let asd = 123;
  6. let var = 123;
  7. render! {
  8. div { key: "12345", class: "asd", class: "{asd}", class: if true {
  9. "{asd}"
  10. }, class: if false {
  11. "{asd}"
  12. }, onclick: move |_| {},
  13. div { "{var}" }
  14. div {
  15. h1 { "var" }
  16. p { "you're great!" }
  17. div { background_color: "red",
  18. h1 { "var" }
  19. div {
  20. b { "asd" }
  21. "not great"
  22. }
  23. }
  24. p { "you're great!" }
  25. }
  26. }
  27. }
  28. }
  29. #[test]
  30. fn dual_stream() {
  31. let mut dom = VirtualDom::new(basic_syntax_is_a_template);
  32. let bump = Bump::new();
  33. let edits = dom.rebuild_to_vec().santize();
  34. use Mutation::*;
  35. assert_eq!(edits.edits, {
  36. [
  37. LoadTemplate { name: "template", index: 0, id: ElementId(1) },
  38. SetAttribute {
  39. name: "class",
  40. value: "asd 123 123".into_value(),
  41. id: ElementId(1),
  42. ns: None,
  43. },
  44. NewEventListener { name: "click".to_string(), id: ElementId(1) },
  45. HydrateText { path: &[0, 0], value: "123".to_string(), id: ElementId(2) },
  46. AppendChildren { id: ElementId(0), m: 1 },
  47. ]
  48. });
  49. }