<!DOCTYPE html>
<html>
<script src="../../resources/js-test-pre.js"></script>
<div id="test"> </div>
<script>
description("Tests background shortand property with background-size");

var e = document.getElementById('test');
var computedStyle = window.getComputedStyle(e, null);

function checkStyle() {
    var before = e.style.background;
    e.style.background = 'none';
    e.style.background = before;
    return (e.style.background == before);
}

function checkComputedStyleValue() {
    var before = window.getComputedStyle(e, null).getPropertyValue('background');
    e.style.background = 'none';
    e.style.background = before;
    return (window.getComputedStyle(e, null).getPropertyValue('background') == before);
}

e.style.background = "center / cover red url(dummy://test.png) no-repeat border-box";
shouldBe("e.style.background", "'url(\"dummy://test.png\") center center / cover no-repeat border-box border-box red'");
shouldBe("e.style.backgroundSize", "'cover'");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgb(255, 0, 0) url(\"dummy://test.png\") no-repeat scroll 50% 50% / cover border-box border-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'cover'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "red 20px / contain url(dummy://test.png) no-repeat padding-box";
shouldBe("e.style.background", "'url(\"dummy://test.png\") 20px center / contain no-repeat padding-box padding-box red'");
shouldBe("e.style.backgroundSize", "'contain'");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgb(255, 0, 0) url(\"dummy://test.png\") no-repeat scroll 20px 50% / contain padding-box padding-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'contain'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "red url(dummy://test.png) 50px 60px / 50% 75% no-repeat";
shouldBe("e.style.background", "'url(\"dummy://test.png\") 50px 60px / 50% 75% no-repeat red'");
shouldBe("e.style.backgroundSize", "'50% 75%'");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgb(255, 0, 0) url(\"dummy://test.png\") no-repeat scroll 50px 60px / 50% 75% padding-box border-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'50% 75%'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "red url(dummy://test.png) repeat top left / 100px 200px border-box content-box";
shouldBe("e.style.background", "'url(\"dummy://test.png\") left top / 100px 200px repeat border-box content-box red'");
shouldBe("e.style.backgroundSize", "'100px 200px'");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgb(255, 0, 0) url(\"dummy://test.png\") repeat scroll 0% 0% / 100px 200px border-box content-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'100px 200px'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "red url(dummy://test.png) repeat 50% / auto auto content-box padding-box";
shouldBe("e.style.background", "'url(\"dummy://test.png\") 50% center / auto repeat content-box padding-box red'");
shouldBe("e.style.backgroundSize", "'auto'");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgb(255, 0, 0) url(\"dummy://test.png\") repeat scroll 50% 50% / auto content-box padding-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'auto'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "url(dummy://test.png) red 50px 60px / 50% no-repeat fixed";
shouldBe("e.style.background", "'url(\"dummy://test.png\") 50px 60px / 50% no-repeat fixed red'");
shouldBe("e.style.backgroundSize", "'50%'");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgb(255, 0, 0) url(\"dummy://test.png\") no-repeat fixed 50px 60px / 50% padding-box border-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'50%'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "red repeat scroll padding-box border-box top left / 100px url(dummy://test.png)";
shouldBe("e.style.background", "'url(\"dummy://test.png\") left top / 100px repeat scroll padding-box border-box red'");
shouldBe("e.style.backgroundSize", "'100px'");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgb(255, 0, 0) url(\"dummy://test.png\") repeat scroll 0% 0% / 100px padding-box border-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'100px'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "50% / auto fixed url(dummy://test.png) repeat content-box red";
shouldBe("e.style.background", "'url(\"dummy://test.png\") 50% center / auto repeat fixed content-box content-box red'");
shouldBe("e.style.backgroundSize", "'auto'");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgb(255, 0, 0) url(\"dummy://test.png\") repeat fixed 50% 50% / auto content-box content-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'auto'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "top left / 50%";
shouldBe("e.style.background", "'left top / 50%'");
shouldBe("e.style.backgroundSize", "'50%'");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgba(0, 0, 0, 0) none repeat scroll 0% 0% / 50% padding-box border-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'50%'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "red fixed";
shouldBe("e.style.background", "'fixed red'");
shouldBe("e.style.backgroundSize", "'initial'");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgb(255, 0, 0) none repeat fixed 0% 0% / auto padding-box border-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'auto'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "";
e.style.background = "red / cover url(dummy://test.png) repeat";
shouldBe("e.style.background", "''");
shouldBe("e.style.backgroundSize", "''");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgba(0, 0, 0, 0) none repeat scroll 0% 0% / auto padding-box border-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'auto'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "";
e.style.background = "red url(dummy://test.png) repeat 25px / contain contain";
shouldBe("e.style.background", "''");
shouldBe("e.style.backgroundSize", "''");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgba(0, 0, 0, 0) none repeat scroll 0% 0% / auto padding-box border-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'auto'");
shouldBe("checkComputedStyleValue()", "true");
debug("")

e.style.background = "";
e.style.background = "red top left / 100px cover url(dummy://test.png) repeat";
shouldBe("e.style.background", "''");
shouldBe("e.style.backgroundSize", "''");
shouldBe("checkStyle()", "true");
shouldBe('computedStyle.getPropertyValue("background")', "'rgba(0, 0, 0, 0) none repeat scroll 0% 0% / auto padding-box border-box'");
shouldBe('computedStyle.getPropertyValue("background-size")', "'auto'");
shouldBe("checkComputedStyleValue()", "true");
debug("")
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
