input_element.rs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. use wasm_bindgen::prelude::*;
  2. use wasm_bindgen_test::*;
  3. use web_sys::HtmlInputElement;
  4. #[wasm_bindgen(module = "/tests/wasm/element.js")]
  5. extern "C" {
  6. fn new_input() -> HtmlInputElement;
  7. }
  8. #[wasm_bindgen_test]
  9. fn test_input_element() {
  10. let element = new_input();
  11. let location = web_sys::window().unwrap().location().href().unwrap();
  12. assert_eq!(element.accept(), "", "Shouldn't have an accept");
  13. element.set_accept("audio/*");
  14. assert_eq!(element.accept(), "audio/*", "Should have an accept");
  15. assert_eq!(element.alt(), "", "Shouldn't have an alt");
  16. element.set_alt("alt text");
  17. assert_eq!(element.alt(), "alt text", "Should have an alt");
  18. element.set_type("text");
  19. assert_eq!(element.autocomplete(), "", "Shouldn't have an autocomplete");
  20. element.set_autocomplete("on");
  21. assert_eq!(
  22. element.autocomplete(),
  23. "on",
  24. "Shouldn't have an autocomplete"
  25. );
  26. assert!(!element.autofocus(), "Shouldn't have an autofocus");
  27. element.set_autofocus(true);
  28. assert!(element.autofocus(), "Should have an autofocus");
  29. element.set_type("checkbox");
  30. assert!(
  31. !element.default_checked(),
  32. "Shouldn't have an default_checked"
  33. );
  34. element.set_default_checked(true);
  35. assert!(element.default_checked(), "Should have an default_checked");
  36. /*TODO fix
  37. assert!(!element.checked(), "Shouldn't be checked");
  38. element.set_checked(true);
  39. assert!(element.checked(), "Should be checked");
  40. */
  41. assert!(!element.disabled(), "Shouldn't be disabled");
  42. element.set_disabled(true);
  43. assert!(element.disabled(), "Should be disabled");
  44. match element.form() {
  45. None => assert!(true, "Shouldn't have a form"),
  46. _ => assert!(false, "Shouldn't have a form"),
  47. };
  48. assert_eq!(
  49. element.form_action(),
  50. location,
  51. "Should have the pages location"
  52. );
  53. element.set_form_action("http://boop.com/");
  54. assert_eq!(
  55. element.form_action(),
  56. "http://boop.com/",
  57. "Should have a form_action"
  58. );
  59. assert_eq!(element.form_enctype(), "", "Should have no enctype");
  60. element.set_form_enctype("text/plain");
  61. assert_eq!(
  62. element.form_enctype(),
  63. "text/plain",
  64. "Should have a plain text enctype"
  65. );
  66. assert_eq!(element.form_method(), "", "Should have no method");
  67. element.set_form_method("POST");
  68. assert_eq!(element.form_method(), "post", "Should have a POST method");
  69. assert!(!element.form_no_validate(), "Should validate");
  70. element.set_form_no_validate(true);
  71. assert!(element.form_no_validate(), "Should not validate");
  72. assert_eq!(element.form_target(), "", "Should have no target");
  73. element.set_form_target("_blank");
  74. assert_eq!(
  75. element.form_target(),
  76. "_blank",
  77. "Should have a _blank target"
  78. );
  79. assert_eq!(element.height(), 0, "Should have no height");
  80. element.set_height(12);
  81. assert_eq!(element.height(), 0, "Should have no height"); // Doesn't change, TODO check with get_attribute("height")=="12"
  82. /*TODO fails in chrome
  83. element.set_type("checkbox");
  84. assert!(element.indeterminate(), "Should be indeterminate");
  85. element.set_checked(true);
  86. assert!(!element.indeterminate(), "Shouldn't be indeterminate");
  87. */
  88. /*TODO add tests
  89. pub fn indeterminate(&self) -> bool
  90. pub fn set_indeterminate(&self, indeterminate: bool)
  91. pub fn input_mode(&self) -> String
  92. pub fn set_input_mode(&self, input_mode: &str)
  93. pub fn list(&self) -> Option<HtmlElement>
  94. pub fn max(&self) -> String
  95. pub fn set_max(&self, max: &str)
  96. pub fn max_length(&self) -> i32
  97. pub fn set_max_length(&self, max_length: i32)
  98. pub fn min(&self) -> String
  99. pub fn set_min(&self, min: &str)
  100. pub fn min_length(&self) -> i32
  101. pub fn set_min_length(&self, min_length: i32)
  102. pub fn multiple(&self) -> bool
  103. pub fn set_multiple(&self, multiple: bool)
  104. */
  105. assert_eq!(element.name(), "", "Should not have a name");
  106. element.set_name("namey");
  107. assert_eq!(element.name(), "namey", "Should have a name");
  108. /*TODO add tests
  109. pub fn pattern(&self) -> String
  110. pub fn set_pattern(&self, pattern: &str)
  111. */
  112. assert_eq!(element.placeholder(), "", "Should not have a placeholder");
  113. element.set_placeholder("some text");
  114. assert_eq!(
  115. element.placeholder(),
  116. "some text",
  117. "Should have a placeholder"
  118. );
  119. assert!(!element.read_only(), "Should have not be readonly");
  120. element.set_read_only(true);
  121. assert!(element.read_only(), "Should be readonly");
  122. assert!(!element.required(), "Should have not be required");
  123. element.set_required(true);
  124. assert!(element.required(), "Should be required");
  125. /*TODO add tests
  126. pub fn size(&self) -> u32
  127. pub fn set_size(&self, size: u32)
  128. */
  129. /*TODO fails in chrome
  130. element.set_type("image");
  131. assert_eq!(element.src(), "", "Should have no src");
  132. element.set_value("hey.png");
  133. assert_eq!(element.src(), "hey.png", "Should have a src");
  134. */
  135. /*TODO add tests
  136. pub fn src(&self) -> String
  137. pub fn set_src(&self, src: &str)
  138. pub fn step(&self) -> String
  139. pub fn set_step(&self, step: &str)
  140. pub fn type_(&self) -> String
  141. pub fn set_type(&self, type_: &str)
  142. pub fn default_value(&self) -> String
  143. pub fn set_default_value(&self, default_value: &str)
  144. */
  145. /*TODO fails in chrome
  146. assert_eq!(element.value(), "", "Should have no value");
  147. element.set_value("hey!");
  148. assert_eq!(element.value(), "hey!", "Should have a value");
  149. */
  150. element.set_type("number");
  151. element.set_value("1");
  152. assert_eq!(element.value_as_number(), 1.0, "Should have value 1");
  153. element.set_value_as_number(2.0);
  154. assert_eq!(element.value(), "2", "Should have value 2");
  155. assert_eq!(element.width(), 0, "Should have no width");
  156. element.set_width(12);
  157. assert_eq!(element.width(), 0, "Should have no width"); // Doesn't change, TODO check with get_attribute("width")=="12"
  158. assert_eq!(element.will_validate(), false, "Shouldn't validate");
  159. assert_eq!(
  160. element.validation_message().unwrap(),
  161. "",
  162. "Shouldn't have a value"
  163. );
  164. assert_eq!(element.check_validity(), true, "Should be valid");
  165. assert_eq!(element.report_validity(), true, "Should be valid");
  166. element.set_custom_validity("Boop"); // Method exists but doesn't impact validity ?!??! TODO look into
  167. assert_eq!(element.check_validity(), true, "Should be valid");
  168. assert_eq!(element.report_validity(), true, "Should be valid");
  169. /*TODO add tests
  170. pub fn labels(&self) -> Option<NodeList>
  171. pub fn select(&self)
  172. pub fn selection_direction(&self) -> Result<Option<String>, JsValue>
  173. pub fn set_selection_direction(
  174. &self,
  175. selection_direction: Option<&str>
  176. ) -> Result<(), JsValue>
  177. pub fn set_range_text(&self, replacement: &str) -> Result<(), JsValue>
  178. pub fn set_selection_range(
  179. &self,
  180. start: u32,
  181. end: u32,
  182. direction: &str
  183. ) -> Result<(), JsValue>
  184. */
  185. assert_eq!(element.align(), "", "Should have no align");
  186. element.set_align("left");
  187. assert_eq!(element.align(), "left", "Should have an align");
  188. /*TODO add tests
  189. pub fn use_map(&self) -> String
  190. pub fn set_use_map(&self, use_map: &str)
  191. pub fn text_length(&self) -> i32
  192. pub fn webkitdirectory(&self) -> bool
  193. pub fn set_webkitdirectory(&self, webkitdirectory: bool)
  194. pub fn set_focus_state(&self, a_is_focused: bool)
  195. */
  196. }