svgs.rs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. use html_parser::Dom;
  2. #[test]
  3. fn svgs() {
  4. let viewbox = dioxus_html::map_html_attribute_to_rsx("viewBox");
  5. assert_eq!(viewbox, Some("view_box"));
  6. let html = r###"
  7. <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-fr" viewBox="0 0 640 480">
  8. <path fill="#fff" d="M0 0h640v480H0z"/>
  9. <path fill="#000091" d="M0 0h213.3v480H0z"/>
  10. <path fill="#e1000f" d="M426.7 0H640v480H426.7z"/>
  11. </svg>
  12. "###;
  13. let dom = Dom::parse(html).unwrap();
  14. let body = dioxus_rsx_rosetta::rsx_from_html(&dom);
  15. let out = dioxus_autofmt::write_block_out(&body).unwrap();
  16. pretty_assertions::assert_eq!(
  17. &out,
  18. r##"
  19. svg {
  20. id: "flag-icons-fr",
  21. view_box: "0 0 640 480",
  22. xmlns: "http://www.w3.org/2000/svg",
  23. path { d: "M0 0h640v480H0z", fill: "#fff" }
  24. path { d: "M0 0h213.3v480H0z", fill: "#000091" }
  25. path { d: "M426.7 0H640v480H426.7z", fill: "#e1000f" }
  26. }"##
  27. );
  28. let html = r###"
  29. <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-cn" viewBox="0 0 640 480">
  30. <defs>
  31. <path id="cn-a" fill="#ff0" d="M-.6.8 0-1 .6.8-1-.3h2z"/>
  32. </defs>
  33. <path fill="#ee1c25" d="M0 0h640v480H0z"/>
  34. <use xlink:href="#cn-a" width="30" height="20" transform="matrix(71.9991 0 0 72 120 120)"/>
  35. <use xlink:href="#cn-a" width="30" height="20" transform="matrix(-12.33562 -20.5871 20.58684 -12.33577 240.3 48)"/>
  36. <use xlink:href="#cn-a" width="30" height="20" transform="matrix(-3.38573 -23.75998 23.75968 -3.38578 288 95.8)"/>
  37. <use xlink:href="#cn-a" width="30" height="20" transform="matrix(6.5991 -23.0749 23.0746 6.59919 288 168)"/>
  38. <use xlink:href="#cn-a" width="30" height="20" transform="matrix(14.9991 -18.73557 18.73533 14.99929 240 216)"/>
  39. </svg>
  40. "###;
  41. let dom = Dom::parse(html).unwrap();
  42. let body = dioxus_rsx_rosetta::rsx_from_html(&dom);
  43. let out = dioxus_autofmt::write_block_out(&body).unwrap();
  44. pretty_assertions::assert_eq!(
  45. &out,
  46. r##"
  47. svg {
  48. id: "flag-icons-cn",
  49. view_box: "0 0 640 480",
  50. "xlink": "http://www.w3.org/1999/xlink",
  51. xmlns: "http://www.w3.org/2000/svg",
  52. defs {
  53. path { d: "M-.6.8 0-1 .6.8-1-.3h2z", fill: "#ff0", id: "cn-a" }
  54. }
  55. path { d: "M0 0h640v480H0z", fill: "#ee1c25" }
  56. use {
  57. height: "20",
  58. href: "#cn-a",
  59. transform: "matrix(71.9991 0 0 72 120 120)",
  60. width: "30",
  61. }
  62. use {
  63. height: "20",
  64. href: "#cn-a",
  65. transform: "matrix(-12.33562 -20.5871 20.58684 -12.33577 240.3 48)",
  66. width: "30",
  67. }
  68. use {
  69. height: "20",
  70. href: "#cn-a",
  71. transform: "matrix(-3.38573 -23.75998 23.75968 -3.38578 288 95.8)",
  72. width: "30",
  73. }
  74. use {
  75. height: "20",
  76. href: "#cn-a",
  77. transform: "matrix(6.5991 -23.0749 23.0746 6.59919 288 168)",
  78. width: "30",
  79. }
  80. use {
  81. height: "20",
  82. href: "#cn-a",
  83. transform: "matrix(14.9991 -18.73557 18.73533 14.99929 240 216)",
  84. width: "30",
  85. }
  86. }"##
  87. );
  88. }