summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/forms/the-option-element/option-element-constructor.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/semantics/forms/the-option-element/option-element-constructor.html')
-rw-r--r--testing/web-platform/tests/html/semantics/forms/the-option-element/option-element-constructor.html135
1 files changed, 135 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/forms/the-option-element/option-element-constructor.html b/testing/web-platform/tests/html/semantics/forms/the-option-element/option-element-constructor.html
new file mode 100644
index 0000000000..05bcb3024a
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/forms/the-option-element/option-element-constructor.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Option element constructor</title>
+<link rel="author" title="Alex Pearson" href="mailto:alex@alexpear.com">
+<link rel="help" href="https://html.spec.whatwg.org/#the-option-element">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div id="parent">
+ <div id="child" tabindex="0"></div>
+</div>
+
+<body>
+<script>
+ "use strict";
+
+ test(() => {
+ const option = new Option();
+
+ assert_true(option instanceof HTMLOptionElement);
+
+ assert_false(option.hasChildNodes());
+ assert_false(option.hasAttribute("value"));
+ assert_false(option.hasAttribute("selected"));
+ assert_false(option.selected);
+
+ assert_equals(option.textContent, "");
+ assert_equals(option.value, "");
+ }, "Option constructor with no arguments");
+
+ test(() => {
+ const option = new Option(false, false);
+
+ assert_true(option instanceof HTMLOptionElement);
+
+ assert_true(option.hasChildNodes());
+ assert_equals(option.childNodes.length, 1);
+ assert_equals(option.childNodes[0].nodeType, Node.TEXT_NODE);
+ assert_equals(option.childNodes[0].data, "false");
+ assert_equals(option.getAttribute("value"), "false");
+ assert_false(option.hasAttribute("selected"));
+ assert_false(option.selected);
+
+ assert_equals(option.textContent, "false");
+ assert_equals(option.value, "false");
+ }, "Option constructor with falsy arguments");
+
+ test(() => {
+ const option = new Option("text", "value");
+
+ assert_true(option.hasChildNodes());
+ assert_equals(option.childNodes.length, 1);
+ assert_equals(option.childNodes[0].nodeType, Node.TEXT_NODE);
+ assert_equals(option.childNodes[0].data, "text");
+ assert_equals(option.getAttribute("value"), "value");
+ assert_false(option.hasAttribute("selected"));
+ assert_false(option.selected);
+
+ assert_equals(option.textContent, "text");
+ assert_equals(option.value, "value");
+ }, "Option constructor creates HTMLOptionElement with specified text and value");
+
+ test(() => {
+ const notSelected = new Option("text", "value", false);
+ const selected = new Option("text", "value", true);
+
+ assert_false(notSelected.hasAttribute("selected"));
+ assert_equals(notSelected.getAttribute("selected"), null);
+ assert_false(notSelected.selected);
+
+ assert_equals(selected.getAttribute("selected"), "");
+ assert_false(selected.selected);
+ }, "Option constructor handles selectedness correctly when specified with defaultSelected only");
+
+ test(() => {
+ const notSelected = new Option("text", "value", true, false);
+ const selected = new Option("text", "value", false, true);
+
+ assert_equals(notSelected.selected, false);
+ assert_equals(selected.selected, true);
+ }, "Option constructor handles selectedness correctly, even when incongruous with defaultSelected");
+
+ test(() => {
+ const option = new Option(undefined, undefined);
+
+ assert_false(option.hasChildNodes());
+ assert_false(option.hasAttribute("value"));
+
+ assert_equals(option.textContent, "");
+ assert_equals(option.value, "");
+ }, "Option constructor treats undefined text and value correctly");
+
+ test(() => {
+ const option = new Option("", "");
+
+ assert_false(option.hasChildNodes());
+ assert_true(option.hasAttribute("value"));
+
+ assert_equals(option.textContent, "");
+ assert_equals(option.value, "");
+ }, "Option constructor treats empty text and value correctly");
+
+ test(() => {
+ const option = new Option("text", "value", 0, "");
+
+ assert_false(option.hasAttribute("selected"));
+ assert_false(option.selected);
+ }, "Option constructor treats falsy selected and defaultSelected correctly");
+
+ test(() => {
+ const option = new Option("text", "value", {}, 1);
+
+ assert_true(option.hasAttribute("selected"));
+ assert_true(option.selected);
+ }, "Option constructor treats truthy selected and defaultSelected correctly");
+
+ test(() => {
+ const option = new Option("text", "value", false, true);
+
+ assert_false(option.hasAttribute("selected"));
+ assert_true(option.selected);
+
+ option.setAttribute("selected", "");
+ assert_true(option.selected);
+
+ option.removeAttribute("selected");
+ assert_false(option.selected);
+ }, "Option constructor does not set dirtiness (so, manipulating the selected content attribute still updates the " +
+ "selected IDL attribute)");
+
+ test(function() {
+ var option = new Option();
+ assert_equals(Object.getPrototypeOf(option), HTMLOptionElement.prototype);
+ }, "Prototype of object created with named constructor");
+</script>