<!DOCTYPE html>
<style>
#target {
    border: 1px solid;
}
</style>
<div id="target"></div>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
const target = document.getElementById("target");
const style = target.style;
const cs = getComputedStyle(target);

test(() => {
    style.cssText = "border-image: url(\"\");";

    assert_equals(style.cssText, "border-image: url(\"\");", "cssText");
    assert_array_equals([...style], ["border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "url(\"\")", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "100%", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "1", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "0", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "stretch", "Specified border-image-repeat");
    assert_equals(style.borderImage, "url(\"\")", "Specified border-image");
    assert_equals(style.webkitBorderImage, "url(\"\")", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "100%", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "1", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "url(\"\") 100% / 1 / 0 stretch", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "url(\"\") 100% / 1 / 0 stretch", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "1px", "Computed border-width");
}, "border-image: url(\"\")");

test(() => {
    style.cssText = "-webkit-border-image: url(\"\");";

    assert_equals(style.cssText, "border-image: url(\"\");", "cssText");
    assert_array_equals([...style], ["border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "url(\"\")", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "100%", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "1", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "0", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "stretch", "Specified border-image-repeat");
    assert_equals(style.borderImage, "url(\"\")", "Specified border-image");
    assert_equals(style.webkitBorderImage, "url(\"\")", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "100%", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "1", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "url(\"\") 100% / 1 / 0 stretch", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "url(\"\") 100% / 1 / 0 stretch", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "1px", "Computed border-width");
}, "-webkit-border-image: url(\"\")");

test(() => {
    style.cssText = "border-image: url(\"\") 50%;";

    assert_equals(style.cssText, "border-image: url(\"\") 50%;", "cssText");
    assert_array_equals([...style], ["border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "url(\"\")", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "50%", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "1", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "0", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "stretch", "Specified border-image-repeat");
    assert_equals(style.borderImage, "url(\"\") 50%", "Specified border-image");
    assert_equals(style.webkitBorderImage, "url(\"\") 50%", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "50%", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "1", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "url(\"\") 50% / 1 / 0 stretch", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "url(\"\") 50% / 1 / 0 stretch", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "1px", "Computed border-width");
}, "border-image: url(\"\") 50%");

test(() => {
    style.cssText = "-webkit-border-image: url(\"\") 50%;";

    assert_equals(style.cssText, "border-image: url(\"\") 50% fill;", "cssText");
    assert_array_equals([...style], ["border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "url(\"\")", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "50% fill", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "1", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "0", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "stretch", "Specified border-image-repeat");
    assert_equals(style.borderImage, "url(\"\") 50% fill", "Specified border-image");
    assert_equals(style.webkitBorderImage, "url(\"\") 50% fill", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "50% fill", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "1", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "url(\"\") 50% fill / 1 / 0 stretch", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "url(\"\") 50% fill / 1 / 0 stretch", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "1px", "Computed border-width");
}, "-webkit-border-image: url(\"\") 50%");

test(() => {
    style.cssText = "border-image: url(\"\") 50% / 11 22% calc(33% + 33px) auto;";

    assert_equals(style.cssText, "border-image: url(\"\") 50% / 11 22% calc(33% + 33px) auto;", "cssText");
    assert_array_equals([...style], ["border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "url(\"\")", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "50%", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "11 22% calc(33% + 33px) auto", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "0", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "stretch", "Specified border-image-repeat");
    assert_equals(style.borderImage, "url(\"\") 50% / 11 22% calc(33% + 33px) auto", "Specified border-image");
    assert_equals(style.webkitBorderImage, "url(\"\") 50% / 11 22% calc(33% + 33px) auto", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "50%", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "11 22% calc(33% + 33px) auto", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "url(\"\") 50% / 11 22% calc(33% + 33px) auto / 0 stretch", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "url(\"\") 50% / 11 22% calc(33% + 33px) auto / 0 stretch", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "1px", "Computed border-width");
}, "border-image: url(\"\") 50% / 11 22% calc(33% + 33px) auto");

test(() => {
    style.cssText = "border-image: url(\"\") 50% / 11 22% calc(33% + 33px) calc(22px * 2);";

    assert_equals(style.cssText, "border-image: url(\"\") 50% / 11 22% calc(33% + 33px) calc(44px);", "cssText");
    assert_array_equals([...style], ["border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "url(\"\")", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "50%", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "11 22% calc(33% + 33px) calc(44px)", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "0", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "stretch", "Specified border-image-repeat");
    assert_equals(style.borderImage, "url(\"\") 50% / 11 22% calc(33% + 33px) calc(44px)", "Specified border-image");
    assert_equals(style.webkitBorderImage, "", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "50%", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "11 22% calc(33% + 33px) 44px", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "url(\"\") 50% / 11 22% calc(33% + 33px) 44px / 0 stretch", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "1px", "Computed border-width");
}, "border-image: url(\"\") 50% / 11 22% calc(33% + 33px) calc(22px * 2)");

test(() => {
    style.cssText = "-webkit-border-image: url(\"\") 50% / 11 22% calc(33% + 33px) calc(22px * 2);";

    assert_equals(style.cssText, "-webkit-border-image: url(\"\") 50% fill / 11 22% calc(33% + 33px) calc(44px);", "cssText");
    assert_array_equals([...style], ["border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "url(\"\")", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "50% fill", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "0", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "stretch", "Specified border-image-repeat");
    assert_equals(style.borderImage, "", "Specified border-image");
    assert_equals(style.webkitBorderImage, "url(\"\") 50% fill / 11 22% calc(33% + 33px) calc(44px)", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "50% fill", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "url(\"\") 50% fill / 11 22% calc(33% + 33px) 44px / 0 stretch", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "1px 1px 1px 44px", "Computed border-width");
}, "-webkit-border-image: url(\"\") 50% fill / 11 22% calc(33% + 33px) calc(22px * 2)");

test(() => {
    style.cssText = "border-image: url(\"\") 50% / 11px 22px 33px 44px;";

    assert_equals(style.cssText, "border-image: url(\"\") 50% / 11px 22px 33px 44px;", "cssText");
    assert_array_equals([...style], ["border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "url(\"\")", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "50%", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "11px 22px 33px 44px", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "0", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "stretch", "Specified border-image-repeat");
    assert_equals(style.borderImage, "url(\"\") 50% / 11px 22px 33px 44px", "Specified border-image");
    assert_equals(style.webkitBorderImage, "", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "50%", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "11px 22px 33px 44px", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "url(\"\") 50% / 11px 22px 33px 44px / 0 stretch", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "1px", "Computed border-width");
}, "border-image: url(\"\") 50% / 11px 22px 33px 44px");

test(() => {
    style.cssText = "-webkit-border-image: url(\"\") 50% / 11px 22px 33px 44px;";

    assert_equals(style.cssText, "-webkit-border-image: url(\"\") 50% fill / 11px 22px 33px 44px;", "cssText");
    assert_array_equals([...style], ["border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "url(\"\")", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "50% fill", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "0", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "stretch", "Specified border-image-repeat");
    assert_equals(style.borderImage, "", "Specified border-image");
    assert_equals(style.webkitBorderImage, "url(\"\") 50% fill / 11px 22px 33px 44px", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "50% fill", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "url(\"\") 50% fill / 11px 22px 33px 44px / 0 stretch", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "11px 22px 33px 44px", "Computed border-width");
}, "-webkit-border-image: url(\"\") 50% fill / 11px 22px 33px 44px");

test(() => {
    style.cssText = "--v: 50px; border-image: url(\"\") 50% / var(--v);";

    assert_equals(style.cssText, "--v: 50px; border-image: url(\"\") 50% / var(--v);", "cssText");
    assert_array_equals([...style], ["--v", "border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "", "Specified border-image-repeat");
    assert_equals(style.borderImage, "url(\"\") 50% / var(--v)", "Specified border-image");
    assert_equals(style.webkitBorderImage, "", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "50%", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "50px", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "url(\"\") 50% / 50px / 0 stretch", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "1px", "Computed border-width");
}, "--v: 50px; border-image: url(\"\") 50% / var(--v)");

test(() => {
    style.cssText = "--v: 50px; -webkit-border-image: url(\"\") 50% / var(--v);";

    assert_equals(style.cssText, "--v: 50px; -webkit-border-image: url(\"\") 50% / var(--v);", "cssText");
    assert_array_equals([...style], ["--v", "border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"]);

    assert_equals(style.borderImageSource, "", "Specified border-image-source");
    assert_equals(style.borderImageSlice, "", "Specified border-image-slice");
    assert_equals(style.borderImageWidth, "", "Specified border-image-width");
    assert_equals(style.borderImageOutset, "", "Specified border-image-outset");
    assert_equals(style.borderImageRepeat, "", "Specified border-image-repeat");
    assert_equals(style.borderImage, "", "Specified border-image");
    assert_equals(style.webkitBorderImage, "url(\"\") 50% / var(--v)", "Specified -webkit-border-image");

    assert_equals(cs.borderImageSource, "url(\"\")", "Computed border-image-source");
    assert_equals(cs.borderImageSlice, "50% fill", "Computed border-image-slice");
    assert_equals(cs.borderImageWidth, "", "Computed border-image-width");
    assert_equals(cs.borderImageOutset, "0", "Computed border-image-outset");
    assert_equals(cs.borderImageRepeat, "stretch", "Computed border-image-repeat");
    assert_equals(cs.borderImage, "", "Computed border-image");
    assert_equals(cs.webkitBorderImage, "url(\"\") 50% fill / 50px / 0 stretch", "Computed -webkit-border-image");

    assert_equals(cs.borderWidth, "50px", "Computed border-width");
}, "--v: 50px; -webkit-border-image: url(\"\") 50% / var(--v)");
</script>
