kitchen_sink.rs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. use dioxus::core::{ElementId, Mutation};
  2. use dioxus::prelude::*;
  3. fn basic_syntax_is_a_template(cx: Scope) -> Element {
  4. let asd = 123;
  5. let var = 123;
  6. cx.render(rsx! {
  7. div { key: "12345",
  8. class: "asd",
  9. class: "{asd}",
  10. onclick: move |_| {},
  11. div { "{var}" }
  12. div {
  13. h1 { "var" }
  14. p { "you're great!" }
  15. div { background_color: "red",
  16. h1 { "var" }
  17. div { b { "asd" } "not great" }
  18. }
  19. p { "you're great!" }
  20. }
  21. }
  22. })
  23. }
  24. #[test]
  25. fn dual_stream() {
  26. let mut dom = VirtualDom::new(basic_syntax_is_a_template);
  27. let edits = dom.rebuild().santize();
  28. use Mutation::*;
  29. assert_eq!(
  30. edits.template_mutations,
  31. [
  32. CreateElement { name: "div" },
  33. SetStaticAttribute { name: "class", value: "asd", ns: None },
  34. CreateElement { name: "div" },
  35. CreateTextPlaceholder,
  36. AppendChildren { m: 1 },
  37. CreateElement { name: "div" },
  38. CreateElement { name: "h1" },
  39. CreateStaticText { value: "var" },
  40. AppendChildren { m: 1 },
  41. CreateElement { name: "p" },
  42. CreateStaticText { value: "you're great!" },
  43. AppendChildren { m: 1 },
  44. CreateElement { name: "div" },
  45. SetStaticAttribute { name: "background-color", value: "red", ns: Some("style") },
  46. CreateElement { name: "h1" },
  47. CreateStaticText { value: "var" },
  48. AppendChildren { m: 1 },
  49. CreateElement { name: "div" },
  50. CreateElement { name: "b" },
  51. CreateStaticText { value: "asd" },
  52. AppendChildren { m: 1 },
  53. CreateStaticText { value: "not great" },
  54. AppendChildren { m: 2 },
  55. AppendChildren { m: 2 },
  56. CreateElement { name: "p" },
  57. CreateStaticText { value: "you're great!" },
  58. AppendChildren { m: 1 },
  59. AppendChildren { m: 4 },
  60. AppendChildren { m: 2 },
  61. SaveTemplate { name: "template", m: 1 }
  62. ],
  63. );
  64. assert_eq!(
  65. edits.edits,
  66. [
  67. LoadTemplate { name: "template", index: 0, id: ElementId(1) },
  68. SetAttribute { name: "class", value: "123", id: ElementId(1), ns: None },
  69. NewEventListener { event_name: "click", scope: ScopeId(0), id: ElementId(1) },
  70. HydrateText { path: &[0, 0], value: "123", id: ElementId(2) },
  71. AppendChildren { m: 1 }
  72. ],
  73. );
  74. }