<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test.js"></script>
<style>
:invalid { background: rgb(255, 0, 0); }
:valid { background: rgb(0, 255, 0); }
fieldset:invalid input[type=submit] { background-color: rgb(127, 0, 0); }
fieldset:valid input[type=submit] { background-color: rgb(0, 127, 0); }
</style>
</head>
<body>
<script>
description('Check if :valid/:invalid CSS pseudo selectors are lively applied for fieldsets');

function $(id) {
    return document.getElementById(id);
}

function backgroundOf(element) {
    return document.defaultView.getComputedStyle(element, null).getPropertyValue('background-color');
}

var invalidColor = 'rgb(255, 0, 0)';
var validColor = 'rgb(0, 255, 0)';
var subInvalidColor = 'rgb(127, 0, 0)';
var subValidColor = 'rgb(0, 127, 0)';

var parent = document.createElement('div');
document.body.appendChild(parent);

debug('Removing and adding required text inputs and modifying their value by a DOM tree mutation:');
parent.innerHTML = '<fieldset id=fieldset1><input type=text id=input1 required><input type=text id=input2 required value=a><input type=submit id=sub1></fieldset>';
var fieldset1 = $('fieldset1');
var input1 = $('input1');
var input2 = $('input2');
var sub1 = $('sub1');
shouldBe('backgroundOf(fieldset1)', 'invalidColor');
shouldBe('backgroundOf(sub1)', 'subInvalidColor');
shouldBe('fieldset1.removeChild(input1); backgroundOf(fieldset1)', 'validColor');
shouldBe('backgroundOf(sub1)', 'subValidColor');
shouldBe('fieldset1.appendChild(input1); backgroundOf(fieldset1)', 'invalidColor');
shouldBe('backgroundOf(sub1)', 'subInvalidColor');
shouldBe('input1.setAttribute("value", "a"); backgroundOf(fieldset1)', 'validColor');
shouldBe('backgroundOf(sub1)', 'subValidColor');
shouldBe('input2.setAttribute("value", ""); backgroundOf(fieldset1)', 'invalidColor');
shouldBe('backgroundOf(sub1)', 'subInvalidColor');
debug('')

debug('Disabling and marking inputs readonly by a DOM tree mutation:');
parent.innerHTML = '<fieldset id=fieldset1><input type=text id=input1 required><input type=text id=input2 required value=a><input type=submit id=sub1></fieldset>';
var fieldset1 = $('fieldset1');
var input1 = $('input1');
var sub1 = $('sub1');
shouldBe('backgroundOf(fieldset1)', 'invalidColor');
shouldBe('backgroundOf(sub1)', 'subInvalidColor');
shouldBe('input1.disabled=1; backgroundOf(fieldset1)', 'validColor');
shouldBe('backgroundOf(sub1)', 'subValidColor');
shouldBe('input1.disabled=0; backgroundOf(fieldset1)', 'invalidColor');
shouldBe('backgroundOf(sub1)', 'subInvalidColor');
shouldBe('input1.setAttribute("readonly", "1"); backgroundOf(fieldset1)', 'validColor');
shouldBe('backgroundOf(sub1)', 'subValidColor');
debug('')

debug('Adding a required text input that is not a direct child of the fieldset:');
parent.innerHTML = '<fieldset id=fieldset1></fieldset>';
var fieldset1 = $('fieldset1');
shouldBe('backgroundOf(fieldset1)', 'validColor');
var div1 = document.createElement('div');
var input1 = document.createElement('input');
input1.setAttribute('type', 'text');
input1.setAttribute('required', '');
fieldset1.appendChild(div1);
shouldBe('div1.appendChild(input1); backgroundOf(fieldset1)', 'invalidColor');
debug('');

debug('Nested fieldsets:');
parent.innerHTML = '<fieldset id=fieldset0>'
    + '<fieldset id=fieldset1><input type=text id=input1 required></fieldset>'
    + '<fieldset id=fieldset2><input type=text id=input2></fieldset>'
    + '</fieldset>';
shouldBe('backgroundOf($("fieldset0"))', 'invalidColor');
shouldBe('backgroundOf($("fieldset1"))', 'invalidColor');
shouldBe('backgroundOf($("fieldset2"))', 'validColor');
var input1 = $('input1');
shouldBe('input1.setAttribute("value", "v"); backgroundOf($("fieldset0"))', 'validColor');
shouldBe('backgroundOf($("fieldset1"))', 'validColor');
shouldBe('backgroundOf($("fieldset2"))', 'validColor');
var input2 = $('input2');
shouldBe('input2.setAttribute("required", ""); backgroundOf($("fieldset0"))', 'invalidColor');
shouldBe('backgroundOf($("fieldset1"))', 'validColor');
shouldBe('backgroundOf($("fieldset2"))', 'invalidColor');
debug('');

debug('Render multiple fieldsets and move an invalid input from one to another:');
parent.innerHTML = '<fieldset id=fieldset1><input type=text id=input1 required><input type=text id=input2 required value="a"></fieldset>'
    + '<fieldset id=fieldset2><input type=text id=input3><input type=text id=input4 required value="a"></fieldset>'
    + '<fieldset id=fieldset3></fieldset>';
shouldBe('backgroundOf($("fieldset1"))', 'invalidColor');
shouldBe('backgroundOf($("fieldset2"))', 'validColor');
shouldBe('backgroundOf($("fieldset3"))', 'validColor');
var input1 = $('input1');
var fieldset1 = $('fieldset1');
var fieldset3 = $('fieldset3');
fieldset1.removeChild(input1);
fieldset3.appendChild(input1);
shouldBe('backgroundOf($("fieldset1"))', 'validColor');
shouldBe('backgroundOf($("fieldset3"))', 'invalidColor');
debug('');

debug('Ensure that invalid event was not triggered on style evaluation:');
var val = '0';
parent.innerHTML = '<fieldset id=fieldset1><input type=text id=input1 required oninvalid="val=\'1\';"></fieldset>';
var fieldset1 = $('fieldset1');
var input1 = $('input1');
shouldBe('backgroundOf(fieldset1)', 'invalidColor');
shouldBeEqualToString('val', '0');
shouldBeEqualToString('input1.checkValidity(); val', '1');
debug('');

parent.innerHTML = '';
</script>
</body>
</html>
