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