<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<style type="text/css">
input {
background:rgb(255,255,100);
}
input:disabled {
background:rgb(255,0,0);
}
</style>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<form>
<fieldset>
<legend><input type="text" id="parserGeneratedInput1"></legend>
<legend><input type="text" id="parserGeneratedInput2"></legend>
<input type="text" id="parserGeneratedInput3">
<input type="text" id="parserGeneratedInput4" disabled>
</fieldset>
<fieldset disabled>
<legend><input type="text" id="parserGeneratedInput5"></legend>
<legend><input type="text" id="parserGeneratedInput6"></legend>
<input type="text" id="parserGeneratedInput7">
<input type="text" id="parserGeneratedInput8" disabled>
</fieldset>
<fieldset disabled>
<input type="text" id="parserGeneratedInput9">
</fieldset>
</form>
<fieldset tabindex=0 disabled id="fieldset-tabindex"></fieldset>
<script>
test(() => {
// Verifying parser generated fieldsets.
var parserGeneratedInput1 = document.getElementById("parserGeneratedInput1");
var parserGeneratedInput2 = document.getElementById("parserGeneratedInput2");
var parserGeneratedInput3 = document.getElementById("parserGeneratedInput3");
var parserGeneratedInput4 = document.getElementById("parserGeneratedInput4");
var parserGeneratedInput5 = document.getElementById("parserGeneratedInput5");
var parserGeneratedInput6 = document.getElementById("parserGeneratedInput6");
var parserGeneratedInput7 = document.getElementById("parserGeneratedInput7");
var parserGeneratedInput8 = document.getElementById("parserGeneratedInput8");
var parserGeneratedInput9 = document.getElementById("parserGeneratedInput9");
parserGeneratedInput1.focus();
document.execCommand('insertText', false, 'L');
parserGeneratedInput2.focus();
document.execCommand('insertText', false, 'M');
parserGeneratedInput3.focus();
document.execCommand('insertText', false, 'N');
parserGeneratedInput4.focus();
document.execCommand('insertText', false, 'O');
parserGeneratedInput5.focus();
document.execCommand('insertText', false, 'P');
parserGeneratedInput6.focus();
document.execCommand('insertText', false, 'Q');
parserGeneratedInput7.focus();
document.execCommand('insertText', false, 'R');
parserGeneratedInput8.focus();
document.execCommand('insertText', false, 'S');
parserGeneratedInput9.focus();
document.execCommand('insertText', false, 'T');
assert_equals(parserGeneratedInput1.value, 'L');
assert_equals(parserGeneratedInput2.value, 'M');
assert_equals(parserGeneratedInput3.value, 'NO');
assert_equals(parserGeneratedInput4.value, '');
assert_equals(parserGeneratedInput5.value, 'PQRST');
assert_equals(parserGeneratedInput6.value, '');
assert_equals(parserGeneratedInput7.value, '');
assert_equals(parserGeneratedInput8.value, '');
assert_equals(parserGeneratedInput9.value, '');
// Testing a single fieldset element.
var fieldSet = document.createElement('fieldset');
document.body.appendChild(fieldSet);
var textInput = document.createElement('input');
textInput.type = "text";
fieldSet.appendChild(textInput);
// Verifying HTMLFormControl can be disabled regardless of enclosing fieldset.
textInput.disabled = true;
assert_true(textInput.disabled);
textInput.focus();
document.execCommand('insertText', false, 'A');
assert_equals(textInput.value, '');
assert_false(fieldSet.disabled);
textInput.disabled = false;
// Fieldset is enabled by default. A user can insertText into the text input field.
textInput.focus();
document.execCommand('insertText', false, 'A');
assert_equals(textInput.value, 'A');
// Disable fieldset.
fieldSet.disabled = true;
assert_true(fieldSet.disabled);
// Once the fieldset is disabled, text cannot be inserted.
textInput.focus();
document.execCommand('insertText', false, 'B');
assert_equals(textInput.value, 'A');
// Check if the style of the text element changed.
assert_equals(getComputedStyle(textInput).backgroundColor, 'rgb(255, 0, 0)');
// Enable fieldset.
fieldSet.disabled = false;
assert_false(fieldSet.disabled);
assert_equals(getComputedStyle(textInput).backgroundColor, 'rgb(255, 255, 100)');
textInput.focus();
document.execCommand('insertText', false, 'B');
assert_equals(textInput.value, 'AB');
// Move the textinput element out of the fieldset.
fieldSet.removeChild(textInput);
document.body.appendChild(textInput);
// Disable the fieldset.
fieldSet.disabled = true;
assert_true(fieldSet.disabled);
// Text can be inserted, because the textinput element is outside of the disabled fieldset.
textInput.focus();
document.execCommand('insertText', false, 'C');
assert_equals(textInput.value, 'ABC');
// Enable the fieldset.
fieldSet.disabled = false;
assert_false(fieldSet.disabled);
// Insert a table into the fieldset.
var table = document.createElement('table');
fieldSet.appendChild(table);
var tr = document.createElement('tr');
table.appendChild(tr);
var td = document.createElement('td');
tr.appendChild(td);
// Move the textinput field into the table.
document.body.removeChild(textInput);
td.appendChild(textInput);
textInput.focus();
document.execCommand('insertText', false, 'D');
assert_equals(textInput.value, 'ABCD');
// Disable the fieldset.
fieldSet.disabled = true;
assert_true(fieldSet.disabled);
// Inserting text should fail.
textInput.focus();
document.execCommand('insertText', false, 'E');
assert_equals(textInput.value, 'ABCD');
// Enable the fieldset.
fieldSet.disabled = false;
assert_false(fieldSet.disabled);
textInput.focus();
document.execCommand('insertText', false, 'E');
assert_equals(textInput.value, 'ABCDE');
// Testing nested fieldset elements.
var outerFieldSet = document.createElement('fieldset');
document.body.appendChild(outerFieldSet);
var innerFieldSet = document.createElement('fieldset');
outerFieldSet.appendChild(innerFieldSet);
var outerTextInput = document.createElement('input');
outerTextInput.type = "text";
outerFieldSet.appendChild(outerTextInput);
var innerTextInput = document.createElement('input');
innerTextInput.type = "text";
innerFieldSet.appendChild(innerTextInput);
// Verifying that subordinates of both fieldsets are enabled.
outerTextInput.focus();
document.execCommand('insertText', false, 'F');
innerTextInput.focus();
document.execCommand('insertText', false, 'F');
assert_equals(outerTextInput.value, 'F');
assert_equals(innerTextInput.value, 'F');
// Disabling the inner fieldset only.
innerFieldSet.disabled = true;
assert_true(innerFieldSet.disabled);
outerTextInput.focus();
document.execCommand('insertText', false, 'G');
innerTextInput.focus();
document.execCommand('insertText', false, 'G');
assert_equals(outerTextInput.value, 'FGG');
assert_equals(innerTextInput.value, 'F');
// Enabling the inner and disabling the outer fieldset.
outerFieldSet.disabled = true;
innerFieldSet.disabled = false;
assert_true(outerFieldSet.disabled);
assert_false(innerFieldSet.disabled);
outerTextInput.focus();
document.execCommand('insertText', false, 'H');
innerTextInput.focus();
document.execCommand('insertText', false, 'H');
assert_equals(outerTextInput.value, 'FGG');
assert_equals(innerTextInput.value, 'F');
// Disabling both fieldset elements.
outerFieldSet.disabled = true;
innerFieldSet.disabled = true;
assert_true(outerFieldSet.disabled);
assert_true(innerFieldSet.disabled);
outerTextInput.focus();
document.execCommand('insertText', false, 'H');
innerTextInput.focus();
document.execCommand('insertText', false, 'H');
assert_equals(outerTextInput.value, 'FGG');
assert_equals(innerTextInput.value, 'F');
// Enabling both fieldset elements.
outerFieldSet.disabled = false;
innerFieldSet.disabled = false;
assert_false(outerFieldSet.disabled);
assert_false(innerFieldSet.disabled);
outerTextInput.focus();
document.execCommand('insertText', false, 'H');
innerTextInput.focus();
document.execCommand('insertText', false, 'H');
assert_equals(outerTextInput.value, 'FGGH');
assert_equals(innerTextInput.value, 'FH');
// Test behavior of the first legend element in a fieldset elements.
var legendFieldSet = document.createElement('fieldset');
document.body.appendChild(legendFieldSet);
var firstLegend = document.createElement('legend');
legendFieldSet.appendChild(firstLegend);
var secondLegend = document.createElement('legend');
legendFieldSet.appendChild(secondLegend);
var firstLegendTextInput = document.createElement('input');
firstLegendTextInput.type = "text";
firstLegend.appendChild(firstLegendTextInput);
var secondLegendTextInput = document.createElement('input');
secondLegendTextInput.type = "text";
secondLegend.appendChild(secondLegendTextInput);
// Children of the first legend element in a fieldset should not get disabled with the fieldset.
legendFieldSet.disabled = true;
assert_true(legendFieldSet.disabled);
firstLegendTextInput.focus();
document.execCommand('insertText', false, 'I');
secondLegendTextInput.focus()
document.execCommand('insertText', false, 'I');
assert_equals(firstLegendTextInput.value, 'II');
assert_equals(secondLegendTextInput.value, '');
// Insert another legend element before the currently first one, and check again.
var insertedLegend = document.createElement('legend');
legendFieldSet.insertBefore(insertedLegend, firstLegend);
var insertedLegendTextInput = document.createElement('input');
insertedLegend.appendChild(insertedLegendTextInput);
insertedLegendTextInput.focus();
document.execCommand('insertText', false, 'J');
firstLegendTextInput.focus();
document.execCommand('insertText', false, 'J');
secondLegendTextInput.focus()
document.execCommand('insertText', false, 'J');
assert_equals(insertedLegendTextInput.value, 'JJJ');
assert_equals(firstLegendTextInput.value, 'II');
assert_equals(secondLegendTextInput.value, '');
// Enable the fieldset again and check for sanity.
legendFieldSet.disabled = false;
assert_false(legendFieldSet.disabled);
insertedLegendTextInput.focus();
document.execCommand('insertText', false, 'K');
firstLegendTextInput.focus();
document.execCommand('insertText', false, 'K');
secondLegendTextInput.focus()
document.execCommand('insertText', false, 'K');
assert_equals(insertedLegendTextInput.value, 'JJJK');
assert_equals(firstLegendTextInput.value, 'IIK');
assert_equals(secondLegendTextInput.value, 'K');
var disabledFieldsetWithTabindex = document.getElementById('fieldset-tabindex');
document.activeElement.blur();
disabledFieldsetWithTabindex.focus();
assert_equals(document.activeElement, disabledFieldsetWithTabindex);
document.body.removeChild(document.getElementsByTagName('form')[0]);
document.body.removeChild(fieldSet);
document.body.removeChild(outerFieldSet);
document.body.removeChild(legendFieldSet);
document.body.removeChild(disabledFieldsetWithTabindex);
var successfullyParsed = true;
}, 'Tests for HTMLFieldSetElement.disabled behavior.');
</script>
</body>
</html>