kitchen_sink.rs 1.4 KB

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