diff --git a/crates/web-sys/README.md b/crates/web-sys/README.md
index f72d06b6..cb69fa2e 100644
--- a/crates/web-sys/README.md
+++ b/crates/web-sys/README.md
@@ -226,17 +226,17 @@ bindings are fully working and have full test coverage.
- [ ] HTMLOListElement.webidl
- [ ] HTMLOptGroupElement.webidl
- [ ] HTMLOptionElement.webidl
- - [ ] HTMLOptionsCollection.webidl
- - [ ] HTMLOutputElement.webidl
- - [ ] HTMLParagraphElement.webidl
- - [ ] HTMLParamElement.webidl
+ - [x] HTMLOptionsCollection.webidl
+ - [x] HTMLOutputElement.webidl
+ - [x] HTMLParagraphElement.webidl
+ - [x] HTMLParamElement.webidl
- [ ] HTMLPictureElement.webidl
- - [ ] HTMLPreElement.webidl
- - [ ] HTMLProgressElement.webidl
- - [ ] HTMLQuoteElement.webidl
+ - [x] HTMLPreElement.webidl
+ - [x] HTMLProgressElement.webidl
+ - [x] HTMLQuoteElement.webidl
- [x] HTMLScriptElement.webidl
- [x] HTMLSelectElement.webidl
- - [ ] HTMLSlotElement.webidl
+ - [x] HTMLSlotElement.webidl
- [ ] HTMLSourceElement.webidl
- [ ] HTMLSpanElement.webidl
- [x] HTMLStyleElement.webidl
diff --git a/crates/web-sys/tests/wasm/element.js b/crates/web-sys/tests/wasm/element.js
index 8c24bd22..6e0d5ccb 100644
--- a/crates/web-sys/tests/wasm/element.js
+++ b/crates/web-sys/tests/wasm/element.js
@@ -1,7 +1,3 @@
-export function new_div() {
- return document.createElement("div");
-}
-
export function new_a() {
return document.createElement("a");
}
@@ -18,6 +14,10 @@ export function new_button() {
return document.createElement("button");
}
+export function new_div() {
+ return document.createElement("div");
+}
+
export function new_form() {
return document.createElement("form");
}
@@ -26,6 +26,10 @@ export function new_head() {
return document.createElement("head");
}
+export function new_heading() {
+ return document.createElement("h1");
+}
+
export function new_hr() {
return document.createElement("hr");
}
@@ -34,6 +38,38 @@ export function new_html() {
return document.createElement("html");
}
+export function new_input() {
+ return document.createElement("input");
+}
+
+export function new_food_options_collection() {
+ return new_select_with_food_opts().options;
+}
+
+export function new_output() {
+ return document.createElement("output");
+}
+
+export function new_paragraph() {
+ return document.createElement("p");
+}
+
+export function new_param() {
+ return document.createElement("param");
+}
+
+export function new_pre() {
+ return document.createElement("pre");
+}
+
+export function new_progress() {
+ return document.createElement("progress");
+}
+
+export function new_quote() {
+ return document.createElement("q");
+}
+
export function new_script() {
return document.createElement("script");
}
@@ -51,6 +87,10 @@ export function new_select_with_food_opts() {
return select;
}
+export function new_slot() {
+ return document.createElement("slot");
+}
+
export function new_span() {
return document.createElement("span");
}
@@ -59,18 +99,10 @@ export function new_style() {
return document.createElement("style");
}
-export function new_input() {
- return document.createElement("input");
-}
-
export function new_title() {
return document.createElement("title");
}
-export function new_heading() {
- return document.createElement("h1");
-}
-
export function new_xpath_result() {
let xmlDoc = new DOMParser().parseFromString("tomato", "application/xml");
let xpathResult = xmlDoc.evaluate("/root//value", xmlDoc, null, XPathResult.ANY_TYPE, null);
diff --git a/crates/web-sys/tests/wasm/main.rs b/crates/web-sys/tests/wasm/main.rs
index 5306797f..59efa62a 100644
--- a/crates/web-sys/tests/wasm/main.rs
+++ b/crates/web-sys/tests/wasm/main.rs
@@ -25,9 +25,17 @@ pub mod hr_element;
pub mod html_element;
pub mod html_html_element;
pub mod input_element;
+pub mod options_collection;
+pub mod output_element;
+pub mod paragraph_element;
+pub mod param_element;
+pub mod pre_element;
+pub mod progress_element;
+pub mod quote_element;
pub mod response;
pub mod select_element;
pub mod script_element;
+pub mod slot_element;
pub mod span_element;
pub mod style_element;
pub mod title_element;
diff --git a/crates/web-sys/tests/wasm/options_collection.rs b/crates/web-sys/tests/wasm/options_collection.rs
new file mode 100644
index 00000000..b6243299
--- /dev/null
+++ b/crates/web-sys/tests/wasm/options_collection.rs
@@ -0,0 +1,23 @@
+use wasm_bindgen_test::*;
+use wasm_bindgen::prelude::*;
+use web_sys::HtmlOptionsCollection;
+
+#[wasm_bindgen(module = "./tests/wasm/element.js")]
+extern {
+ fn new_food_options_collection() -> HtmlOptionsCollection;
+}
+
+#[wasm_bindgen_test]
+fn test_options_collection() {
+ let opt_collection = new_food_options_collection();
+
+ assert!(opt_collection.length() == 4, "Our option collection should have four options.");
+ assert!(opt_collection.remove(0).is_ok(), "We should be able to successfully remove an element from an option collection.");
+ assert!(opt_collection.length() == 3, "Our option collection should have three options after removing one.");
+
+ assert!(opt_collection.set_selected_index(1).is_ok(), "Should be able to set the selected index of an option collection if it is valid.");
+ assert_eq!(opt_collection.selected_index().unwrap(), 1, "The second option should be selected in our option collection.");
+
+ opt_collection.set_length(1234);
+ assert_eq!(opt_collection.length(), 1234, "Our option collections length should update after being set to 1234.");
+}
\ No newline at end of file
diff --git a/crates/web-sys/tests/wasm/output_element.rs b/crates/web-sys/tests/wasm/output_element.rs
new file mode 100644
index 00000000..53668c5e
--- /dev/null
+++ b/crates/web-sys/tests/wasm/output_element.rs
@@ -0,0 +1,41 @@
+use wasm_bindgen_test::*;
+use wasm_bindgen::prelude::*;
+use web_sys::HtmlOutputElement;
+
+#[wasm_bindgen(module = "./tests/wasm/element.js")]
+extern {
+ fn new_output() -> HtmlOutputElement;
+}
+
+#[wasm_bindgen_test]
+fn test_output_element() {
+ let output = new_output();
+ assert!(output.html_for().length() == 0, "Our basic