blob: 05bcb3024a28e0050bad95fbbf72a424f62c6ebb [file] [log] [blame]
<!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>