<!doctype html>
<meta charset=utf-8>
<title>Style attribute in HTML</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>

var div;
setup(function() {
    var input = '<div style="color: red">Foo</div>';
    var doc = (new DOMParser()).parseFromString(input, 'text/html');
    div = doc.querySelector('div');
});

test(function() {
    var style = div.style;
    assert_equals(style.cssText, 'color: red;');
    assert_equals(style.color, 'red');
    assert_equals(div.getAttribute("style"), 'color: red',
                  'Value of style attribute should match the string value that was set');
}, 'Parsing of initial style attribute');

test(function() {
    var style = div.style;
    div.setAttribute('style', 'color:: invalid');
    assert_equals(style.cssText, '');
    assert_equals(style.color, '');
    assert_equals(div.getAttribute('style'), 'color:: invalid',
                  'Value of style attribute should match the string value that was set');
}, 'Parsing of invalid style attribute');

test(function() {
    var style = div.style;
    div.setAttribute('style', 'color: green');
    assert_equals(style.cssText, 'color: green;');
    assert_equals(style.color, 'green');
    assert_equals(div.getAttribute('style'), 'color: green',
                  'Value of style attribute should match the string value that was set');
}, 'Parsing of style attribute');

test(function() {
    var style = div.style;
    style.backgroundColor = 'blue';
    assert_equals(style.cssText, 'color: green; background-color: blue;',
                  'Should not drop the existing style');
    assert_equals(style.color, 'green',
                  'Should not drop the existing style');
    assert_equals(div.getAttribute('style'), 'color: green; background-color: blue;',
                  'Should update style attribute');
}, 'Update style.backgroundColor');

</script>
