html_element.rs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. use wasm_bindgen::prelude::*;
  2. use wasm_bindgen::JsCast;
  3. use wasm_bindgen_test::*;
  4. use web_sys::HtmlElement;
  5. #[wasm_bindgen(module = "/tests/wasm/element.js")]
  6. extern "C" {
  7. fn new_html() -> HtmlElement;
  8. }
  9. #[wasm_bindgen_test]
  10. fn test_html_element() {
  11. let element = new_html();
  12. assert!(element.is_instance_of::<HtmlElement>());
  13. assert_eq!(element.title(), "", "Shouldn't have a title");
  14. element.set_title("boop");
  15. assert_eq!(element.title(), "boop", "Should have a title");
  16. assert_eq!(element.lang(), "", "Shouldn't have a lang");
  17. element.set_lang("en-us");
  18. assert_eq!(element.lang(), "en-us", "Should have a lang");
  19. assert_eq!(element.dir(), "", "Shouldn't have a dir");
  20. element.set_dir("ltr");
  21. assert_eq!(element.dir(), "ltr", "Should have a dir");
  22. assert_eq!(element.inner_text(), "", "Shouldn't have inner_text");
  23. element.set_inner_text("hey");
  24. assert_eq!(element.inner_text(), "hey", "Should have inner_text");
  25. assert!(!element.hidden(), "Shouldn't be hidden");
  26. element.set_hidden(true);
  27. assert!(element.hidden(), "Should be hidden");
  28. assert_eq!(
  29. element.class_list().get(0),
  30. None,
  31. "Shouldn't have class at index 0"
  32. );
  33. element.class_list().add_2("a", "b").unwrap();
  34. assert_eq!(
  35. element.class_list().get(0).unwrap(),
  36. "a",
  37. "Should have class at index 0"
  38. );
  39. assert_eq!(
  40. element.class_list().get(1).unwrap(),
  41. "b",
  42. "Should have class at index 1"
  43. );
  44. assert_eq!(
  45. element.class_list().get(2),
  46. None,
  47. "Shouldn't have class at index 2"
  48. );
  49. assert_eq!(element.dataset().get("id"), None, "Shouldn't have data-id");
  50. element.dataset().set("id", "123").unwrap();
  51. assert_eq!(
  52. element.dataset().get("id").unwrap(),
  53. "123",
  54. "Should have data-id"
  55. );
  56. assert_eq!(
  57. element.style().get(0),
  58. None,
  59. "Shouldn't have style property name at index 0"
  60. );
  61. element
  62. .style()
  63. .set_property("background-color", "red")
  64. .unwrap();
  65. assert_eq!(
  66. element.style().get(0).unwrap(),
  67. "background-color",
  68. "Should have style property at index 0"
  69. );
  70. assert_eq!(
  71. element
  72. .style()
  73. .get_property_value("background-color")
  74. .unwrap(),
  75. "red",
  76. "Should have style property"
  77. );
  78. // TODO add a click handler here
  79. element.click();
  80. assert_eq!(element.tab_index(), -1, "Shouldn't be tab_index");
  81. element.set_tab_index(1);
  82. assert_eq!(element.tab_index(), 1, "Should be tab_index");
  83. // TODO add a focus handler here
  84. assert_eq!(element.focus().unwrap(), (), "No result");
  85. // TODO add a blur handler here
  86. assert_eq!(element.blur().unwrap(), (), "No result");
  87. assert_eq!(element.access_key(), "", "Shouldn't have a access_key");
  88. element.set_access_key("a");
  89. assert_eq!(element.access_key(), "a", "Should have a access_key");
  90. // TODO add test for access_key_label
  91. assert!(!element.draggable(), "Shouldn't be draggable");
  92. element.set_draggable(true);
  93. assert!(element.draggable(), "Should be draggable");
  94. assert_eq!(
  95. element.content_editable(),
  96. "inherit",
  97. "Shouldn't have a content_editable"
  98. );
  99. element.set_content_editable("true");
  100. assert_eq!(
  101. element.content_editable(),
  102. "true",
  103. "Should be content_editable"
  104. );
  105. assert!(element.is_content_editable(), "Should be content_editable");
  106. /*TODO doesn't work in Chrome
  107. // TODO verify case where menu is passed
  108. match element.context_menu() {
  109. None => assert!(true, "Shouldn't have a custom menu set"),
  110. _ => assert!(false, "Shouldn't have a custom menu set")
  111. };
  112. */
  113. // TODO: This test is also broken in Chrome (but not Firefox).
  114. // assert!(!element.spellcheck(), "Shouldn't be spellchecked");
  115. element.set_spellcheck(true);
  116. assert!(element.spellcheck(), "Should be dragspellcheckedgable");
  117. // TODO verify case where we have an offset_parent
  118. match element.offset_parent() {
  119. None => assert!(true, "Shouldn't have an offset_parent set"),
  120. _ => assert!(false, "Shouldn't have a offset_parent set"),
  121. };
  122. // TODO verify when we have offsets
  123. assert_eq!(element.offset_top(), 0, "Shouldn't have an offset_top yet");
  124. assert_eq!(
  125. element.offset_left(),
  126. 0,
  127. "Shouldn't have an offset_left yet"
  128. );
  129. assert_eq!(
  130. element.offset_width(),
  131. 0,
  132. "Shouldn't have an offset_width yet"
  133. );
  134. assert_eq!(
  135. element.offset_height(),
  136. 0,
  137. "Shouldn't have an offset_height yet"
  138. );
  139. }