1
0

kitchen_sink.rs 1.5 KB

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