-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update Option constructor and text/value for spec compliance
- Loading branch information
Showing
9 changed files
with
153 additions
and
57 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
"use strict"; | ||
|
||
// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace | ||
exports.stripAndCollapseASCIIWhitespace = s => { | ||
return s.replace(/[ \t\n\f\r]+/g, " ").replace(/^[ \t\n\f\r]+/, "").replace(/[ \t\n\f\r]+$/, ""); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
41 changes: 0 additions & 41 deletions
41
test/web-platform-tests/to-upstream/html/dom/elements/option/option-element-constructor.html
This file was deleted.
Oops, something went wrong.
120 changes: 120 additions & 0 deletions
120
...tests/to-upstream/html/semantics/forms/the-option-element/option-element-constructor.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<title>Option element constructor</title> | ||
<link rel="author" title="Alex Pearson" href="mailto:[email protected]"> | ||
<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("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)"); | ||
</script> |