button_element.rs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. use wasm_bindgen::prelude::*;
  2. use wasm_bindgen_test::*;
  3. use web_sys::{HtmlButtonElement, HtmlFormElement, Node};
  4. #[wasm_bindgen(module = "/tests/wasm/element.js")]
  5. extern "C" {
  6. fn new_button() -> HtmlButtonElement;
  7. fn new_form() -> HtmlFormElement;
  8. }
  9. #[wasm_bindgen_test]
  10. fn test_button_element() {
  11. let element = new_button();
  12. let location = web_sys::window().unwrap().location().href().unwrap();
  13. assert!(!element.autofocus(), "Shouldn't have autofocus");
  14. element.set_autofocus(true);
  15. assert!(element.autofocus(), "Should have autofocus");
  16. assert!(!element.disabled(), "Shouldn't be disabled");
  17. element.set_disabled(true);
  18. assert!(element.disabled(), "Should be disabled");
  19. match element.form() {
  20. None => assert!(true, "Shouldn't have a form"),
  21. _ => assert!(false, "Shouldn't have a form"),
  22. };
  23. assert_eq!(
  24. element.form_action(),
  25. location,
  26. "Should have the pages location"
  27. );
  28. element.set_form_action("http://boop.com/");
  29. assert_eq!(
  30. element.form_action(),
  31. "http://boop.com/",
  32. "Should have a form_action"
  33. );
  34. assert_eq!(element.form_enctype(), "", "Should have no enctype");
  35. element.set_form_enctype("text/plain");
  36. assert_eq!(
  37. element.form_enctype(),
  38. "text/plain",
  39. "Should have a plain text enctype"
  40. );
  41. assert_eq!(element.form_method(), "", "Should have no method");
  42. element.set_form_method("POST");
  43. assert_eq!(element.form_method(), "post", "Should have a POST method");
  44. assert!(!element.form_no_validate(), "Should validate");
  45. element.set_form_no_validate(true);
  46. assert!(element.form_no_validate(), "Should not validate");
  47. assert_eq!(element.form_target(), "", "Should have no target");
  48. element.set_form_target("_blank");
  49. assert_eq!(
  50. element.form_target(),
  51. "_blank",
  52. "Should have a _blank target"
  53. );
  54. assert_eq!(element.name(), "", "Shouldn't have a name");
  55. element.set_name("button-name");
  56. assert_eq!(element.name(), "button-name", "Should have a name");
  57. assert_eq!(element.type_(), "submit", "Shouldn't have a type");
  58. element.set_type("reset");
  59. assert_eq!(element.type_(), "reset", "Should have a reset type");
  60. assert_eq!(element.value(), "", "Shouldn't have a value");
  61. element.set_value("value1");
  62. assert_eq!(element.value(), "value1", "Should have a value");
  63. assert_eq!(element.will_validate(), false, "Shouldn't validate");
  64. assert_eq!(
  65. element.validation_message().unwrap(),
  66. "",
  67. "Shouldn't have a value"
  68. );
  69. assert_eq!(element.check_validity(), true, "Should be valid");
  70. assert_eq!(element.report_validity(), true, "Should be valid");
  71. element.set_custom_validity("Boop"); // Method exists but doesn't impact validity
  72. assert_eq!(element.check_validity(), true, "Should be valid");
  73. assert_eq!(element.report_validity(), true, "Should be valid");
  74. assert_eq!(
  75. element.labels().length(),
  76. 0,
  77. "Should return a node list with no elements"
  78. );
  79. }
  80. #[wasm_bindgen_test]
  81. fn test_button_element_in_form() {
  82. let button = new_button();
  83. button.set_type("reset");
  84. let form = new_form();
  85. form.set_name("test-form");
  86. // TODO: implement `Clone` for types in `web_sys` to make this easier.
  87. let button = JsValue::from(button);
  88. let as_node = Node::from(button.clone());
  89. Node::from(JsValue::from(form))
  90. .append_child(&as_node)
  91. .unwrap();
  92. let element = HtmlButtonElement::from(button);
  93. match element.form() {
  94. None => assert!(false, "Should have a form"),
  95. Some(form) => {
  96. assert!(true, "Should have a form");
  97. assert_eq!(
  98. form.name(),
  99. "test-form",
  100. "Form should have a name of test-form"
  101. );
  102. }
  103. };
  104. assert_eq!(element.type_(), "reset", "Should have a type");
  105. }