renders.rs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. use dioxus_core::prelude::*;
  2. use dioxus_core_macro::*;
  3. use dioxus_html as dioxus_elements;
  4. use dioxus_ssr::{render_lazy, render_vdom, render_vdom_cfg, SsrConfig, SsrRenderer, TextRenderer};
  5. static SIMPLE_APP: Component = |cx| {
  6. cx.render(rsx!(div {
  7. "hello world!"
  8. }))
  9. };
  10. static SLIGHTLY_MORE_COMPLEX: Component = |cx| {
  11. cx.render(rsx! {
  12. div { title: "About W3Schools",
  13. (0..20).map(|f| rsx!{
  14. div {
  15. title: "About W3Schools",
  16. style: "color:blue;text-align:center",
  17. class: "About W3Schools",
  18. p {
  19. title: "About W3Schools",
  20. "Hello world!: {f}"
  21. }
  22. }
  23. })
  24. }
  25. })
  26. };
  27. static NESTED_APP: Component = |cx| {
  28. cx.render(rsx!(
  29. div {
  30. SIMPLE_APP {}
  31. }
  32. ))
  33. };
  34. static FRAGMENT_APP: Component = |cx| {
  35. cx.render(rsx!(
  36. div { "f1" }
  37. div { "f2" }
  38. div { "f3" }
  39. div { "f4" }
  40. ))
  41. };
  42. #[test]
  43. fn to_string_works() {
  44. let mut dom = VirtualDom::new(SIMPLE_APP);
  45. dom.rebuild();
  46. dbg!(render_vdom(&dom));
  47. }
  48. #[test]
  49. fn hydration() {
  50. let mut dom = VirtualDom::new(NESTED_APP);
  51. dom.rebuild();
  52. dbg!(render_vdom_cfg(&dom, |c| c.pre_render(true)));
  53. }
  54. #[test]
  55. fn nested() {
  56. let mut dom = VirtualDom::new(NESTED_APP);
  57. dom.rebuild();
  58. dbg!(render_vdom(&dom));
  59. }
  60. #[test]
  61. fn fragment_app() {
  62. let mut dom = VirtualDom::new(FRAGMENT_APP);
  63. dom.rebuild();
  64. dbg!(render_vdom(&dom));
  65. }
  66. #[test]
  67. fn write_to_file() {
  68. use std::fs::File;
  69. use std::io::Write;
  70. let mut file = File::create("index.html").unwrap();
  71. let mut dom = VirtualDom::new(SLIGHTLY_MORE_COMPLEX);
  72. dom.rebuild();
  73. file.write_fmt(format_args!(
  74. "{}",
  75. TextRenderer::from_vdom(&dom, SsrConfig::default())
  76. ))
  77. .unwrap();
  78. }
  79. #[test]
  80. fn styles() {
  81. static STLYE_APP: Component = |cx| {
  82. cx.render(rsx! {
  83. div { color: "blue", font_size: "46px" }
  84. })
  85. };
  86. let mut dom = VirtualDom::new(STLYE_APP);
  87. dom.rebuild();
  88. dbg!(render_vdom(&dom));
  89. }
  90. #[test]
  91. fn lazy() {
  92. let p1 = SsrRenderer::new(|c| c).render_lazy(rsx! {
  93. div { "ello" }
  94. });
  95. let p2 = render_lazy(rsx! {
  96. div {
  97. "ello"
  98. }
  99. });
  100. assert_eq!(p1, p2);
  101. }
  102. #[test]
  103. fn big_lazy() {
  104. let s = render_lazy(rsx! {
  105. div {
  106. div {
  107. div {
  108. h1 { "ello world" }
  109. h1 { "ello world" }
  110. h1 { "ello world" }
  111. h1 { "ello world" }
  112. h1 { "ello world" }
  113. }
  114. }
  115. }
  116. });
  117. dbg!(s);
  118. }
  119. #[test]
  120. fn inner_html() {
  121. let s = render_lazy(rsx! {
  122. div {
  123. dangerous_inner_html: "<div> ack </div>"
  124. }
  125. });
  126. dbg!(s);
  127. }