| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../../resources/js-test-pre.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> |
| |
| <script> |
| description('Tests for HTMLFieldSetElement.disabled behavior.'); |
| |
| debug('\nVerifying 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'); |
| |
| shouldBe('parserGeneratedInput1.value', '"L"'); |
| shouldBe('parserGeneratedInput2.value', '"M"'); |
| shouldBe('parserGeneratedInput3.value', '"NO"'); |
| shouldBe('parserGeneratedInput4.value', '""'); |
| shouldBe('parserGeneratedInput5.value', '"PQRST"'); |
| shouldBe('parserGeneratedInput6.value', '""'); |
| shouldBe('parserGeneratedInput7.value', '""'); |
| shouldBe('parserGeneratedInput8.value', '""'); |
| shouldBe('parserGeneratedInput9.value', '""'); |
| |
| |
| debug('\nTesting a single fieldset element.'); |
| var fieldSet = document.createElement('fieldset'); |
| document.body.appendChild(fieldSet); |
| var textInput = document.createElement('input'); |
| textInput.type = "text"; |
| fieldSet.appendChild(textInput); |
| |
| debug('Verifying HTMLFormControl can be disabled regardless of enclosing fieldset.'); |
| textInput.disabled = true; |
| shouldBeTrue('textInput.disabled'); |
| textInput.focus(); |
| document.execCommand('insertText', false, 'A'); |
| shouldBe('textInput.value', '""'); |
| shouldBeFalse('fieldSet.disabled'); |
| textInput.disabled = false; |
| |
| debug('Fieldset is enabled by default. A user can insertText into the text input field.'); |
| textInput.focus(); |
| document.execCommand('insertText', false, 'A'); |
| shouldBe('textInput.value', '"A"'); |
| |
| debug('Disable fieldset.'); |
| fieldSet.disabled = true; |
| shouldBeTrue('fieldSet.disabled'); |
| |
| debug('Once the fieldset is disabled, text cannot be inserted.'); |
| textInput.focus(); |
| document.execCommand('insertText', false, 'B'); |
| shouldBe('textInput.value', '"A"'); |
| |
| debug("Check if the style of the text element changed."); |
| shouldBe("getComputedStyle(textInput).backgroundColor", "'rgb(255, 0, 0)'"); |
| |
| debug('Enable fieldset.'); |
| fieldSet.disabled = false; |
| shouldBeFalse('fieldSet.disabled'); |
| shouldBe("getComputedStyle(textInput).backgroundColor", "'rgb(255, 255, 100)'"); |
| |
| textInput.focus(); |
| document.execCommand('insertText', false, 'B'); |
| shouldBe('textInput.value', '"AB"'); |
| |
| debug('Move the textinput element out of the fieldset.'); |
| fieldSet.removeChild(textInput); |
| document.body.appendChild(textInput); |
| |
| debug('Disable the fieldset.'); |
| fieldSet.disabled = true; |
| shouldBeTrue('fieldSet.disabled'); |
| |
| debug('Text can be inserted, because the textinput element is outside of the disabled fieldset.'); |
| textInput.focus(); |
| document.execCommand('insertText', false, 'C'); |
| shouldBe('textInput.value', '"ABC"'); |
| |
| debug('Enable the fieldset.'); |
| fieldSet.disabled = false; |
| shouldBeFalse('fieldSet.disabled'); |
| |
| debug('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); |
| |
| debug('Move the textinput field into the table.'); |
| document.body.removeChild(textInput); |
| td.appendChild(textInput); |
| |
| textInput.focus(); |
| document.execCommand('insertText', false, 'D'); |
| shouldBe('textInput.value', '"ABCD"'); |
| |
| debug('Disable the fieldset.'); |
| fieldSet.disabled = true; |
| shouldBeTrue('fieldSet.disabled'); |
| |
| debug('Inserting text should fail.') |
| textInput.focus(); |
| document.execCommand('insertText', false, 'E'); |
| shouldBe('textInput.value', '"ABCD"'); |
| |
| debug('Enable the fieldset.'); |
| fieldSet.disabled = false; |
| shouldBeFalse('fieldSet.disabled'); |
| |
| textInput.focus(); |
| document.execCommand('insertText', false, 'E'); |
| shouldBe('textInput.value', '"ABCDE"'); |
| |
| |
| debug('\nTesting 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); |
| |
| debug('Verifying that subordinates of both fieldsets are enabled.'); |
| outerTextInput.focus(); |
| document.execCommand('insertText', false, 'F'); |
| innerTextInput.focus(); |
| document.execCommand('insertText', false, 'F'); |
| shouldBe('outerTextInput.value', '"F"'); |
| shouldBe('innerTextInput.value', '"F"'); |
| |
| debug('Disabling the inner fieldset only.'); |
| innerFieldSet.disabled = true; |
| shouldBeTrue('innerFieldSet.disabled'); |
| outerTextInput.focus(); |
| document.execCommand('insertText', false, 'G'); |
| innerTextInput.focus(); |
| document.execCommand('insertText', false, 'G'); |
| shouldBe('outerTextInput.value', '"FGG"'); |
| shouldBe('innerTextInput.value', '"F"'); |
| |
| debug('Enabling the inner and disabling the outer fieldset.'); |
| outerFieldSet.disabled = true; |
| innerFieldSet.disabled = false; |
| shouldBeTrue('outerFieldSet.disabled'); |
| shouldBeFalse('innerFieldSet.disabled'); |
| outerTextInput.focus(); |
| document.execCommand('insertText', false, 'H'); |
| innerTextInput.focus(); |
| document.execCommand('insertText', false, 'H'); |
| shouldBe('outerTextInput.value', '"FGG"'); |
| shouldBe('innerTextInput.value', '"F"'); |
| |
| debug('Disabling both fieldset elements.'); |
| outerFieldSet.disabled = true; |
| innerFieldSet.disabled = true; |
| shouldBeTrue('outerFieldSet.disabled'); |
| shouldBeTrue('innerFieldSet.disabled'); |
| outerTextInput.focus(); |
| document.execCommand('insertText', false, 'H'); |
| innerTextInput.focus(); |
| document.execCommand('insertText', false, 'H'); |
| shouldBe('outerTextInput.value', '"FGG"'); |
| shouldBe('innerTextInput.value', '"F"'); |
| |
| debug('Enabling both fieldset elements.'); |
| outerFieldSet.disabled = false; |
| innerFieldSet.disabled = false; |
| shouldBeFalse('outerFieldSet.disabled'); |
| shouldBeFalse('innerFieldSet.disabled'); |
| outerTextInput.focus(); |
| document.execCommand('insertText', false, 'H'); |
| innerTextInput.focus(); |
| document.execCommand('insertText', false, 'H'); |
| shouldBe('outerTextInput.value', '"FGGH"'); |
| shouldBe('innerTextInput.value', '"FH"'); |
| |
| |
| debug('\nTest 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); |
| |
| debug('Children of the first legend element in a fieldset should not get disabled with the fieldset.'); |
| legendFieldSet.disabled = true; |
| shouldBeTrue('legendFieldSet.disabled'); |
| firstLegendTextInput.focus(); |
| document.execCommand('insertText', false, 'I'); |
| secondLegendTextInput.focus() |
| document.execCommand('insertText', false, 'I'); |
| shouldBe('firstLegendTextInput.value', '"II"'); |
| shouldBe('secondLegendTextInput.value', '""'); |
| |
| debug('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'); |
| shouldBe('insertedLegendTextInput.value', '"JJJ"'); |
| shouldBe('firstLegendTextInput.value', '"II"'); |
| shouldBe('secondLegendTextInput.value', '""'); |
| |
| debug('Enable the fieldset again and check for sanity.'); |
| legendFieldSet.disabled = false; |
| shouldBeFalse('legendFieldSet.disabled'); |
| insertedLegendTextInput.focus(); |
| document.execCommand('insertText', false, 'K'); |
| firstLegendTextInput.focus(); |
| document.execCommand('insertText', false, 'K'); |
| secondLegendTextInput.focus() |
| document.execCommand('insertText', false, 'K'); |
| shouldBe('insertedLegendTextInput.value', '"JJJK"'); |
| shouldBe('firstLegendTextInput.value', '"IIK"'); |
| shouldBe('secondLegendTextInput.value', '"K"'); |
| |
| document.body.removeChild(document.getElementsByTagName('form')[0]); |
| document.body.removeChild(fieldSet); |
| document.body.removeChild(outerFieldSet); |
| document.body.removeChild(legendFieldSet); |
| var successfullyParsed = true; |
| </script> |
| <script src="../../../resources/js-test-post.js"></script> |
| |
| </body> |
| </html> |