Test computed style for the border-image property and sub-properties

PASS computedBorderImageStyle('12 11 12 11', 'border-image-slice') is '12 11'
PASS computedBorderImageStyle('12 11 12 11', 'border-image') is 'none'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 12 11 repeat stretch', 'border-image-slice') is '12 11'
PASS computedBorderImageStyle('url(dummy://test.png) 12 11 repeat stretch', 'border-image') is 'url("dummy://test.png") 12 11 / 1 / 0 repeat stretch'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 1 2 3 4 repeat stretch', 'border-image-slice') is '1 2 3 4'
PASS computedBorderImageStyle('url(dummy://test.png) 1 2 3 4 repeat stretch', 'border-image') is 'url("dummy://test.png") 1 2 3 4 / 1 / 0 repeat stretch'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 12 repeat stretch', 'border-image-slice') is '12'
PASS computedBorderImageStyle('url(test.png) 10 10 5 5 repeat stretch', 'border-image-slice') is '10 10 5 5'
PASS computedBorderImageStyle('url(test.png) 10 a b c repeat stretch', 'border-image-slice') is '100%'
PASS computedBorderImageStyle('url(dummy://test.png) 10 a b c repeat stretch', 'border-image') is 'none'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10 20 fill', 'border-image-slice') is '10 20 fill'
PASS computedBorderImageStyle('url(dummy://test.png) 10 20 fill', 'border-image') is 'url("dummy://test.png") 10 20 fill / 1 / 0 stretch'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(dummy://test.png) 10 10 10 10 repeat stretch', 'border-image-source') is 'url("dummy://test.png")'
PASS computedBorderImageStyle('url(dummy://test.png) 10 10 10 10 repeat stretch', 'border-image') is 'url("dummy://test.png") 10 / 1 / 0 repeat stretch'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10', 'border-image-repeat') is 'stretch'
PASS computedBorderImageStyle('url(dummy://test.png) 10', 'border-image') is 'url("dummy://test.png") 10 / 1 / 0 stretch'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10 stretch', 'border-image-repeat') is 'stretch'
PASS computedBorderImageStyle('url(dummy://test.png) 10 stretch', 'border-image') is 'url("dummy://test.png") 10 / 1 / 0 stretch'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10 kittens', 'border-image-repeat') is 'stretch'
PASS computedBorderImageStyle('url(dummy://test.png) 10 kittens', 'border-image') is 'none'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10 stretch stretch fill', 'border-image-repeat') is 'stretch'
PASS computedBorderImageStyle('url(dummy://test.png) 10 stretch stretch fill', 'border-image') is 'none'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10 repeat stretch', 'border-image-repeat') is 'repeat stretch'
PASS computedBorderImageStyle('url(dummy://test.png) 10 repeat stretch', 'border-image') is 'url("dummy://test.png") 10 / 1 / 0 repeat stretch'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10 round space', 'border-image-repeat') is 'round space'
PASS computedBorderImageStyle('url(dummy://test.png) 10 round space', 'border-image') is 'url("dummy://test.png") 10 / 1 / 0 round space'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10 / 13px 1.5em 1em 10px', 'border-image-width') is '13px 24px 16px 10px'
PASS computedBorderImageStyle('url(dummy://test.png) 10 / 13px 1.5em 1em 10px', 'border-image') is 'url("dummy://test.png") 10 / 13px 24px 16px 10px / 0 stretch'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10 / 14px 10%', 'border-image-width') is '14px 10%'
PASS computedBorderImageStyle('url(dummy://test.png) 10 / 14px 10%', 'border-image') is 'url("dummy://test.png") 10 / 14px 10% / 0 stretch'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10 / 13px / 11px', 'border-image-outset') is '11px'
PASS computedBorderImageStyle('url(dummy://test.png) 10 / 13px / 11px', 'border-image') is 'url("dummy://test.png") 10 / 13px / 11px stretch'
PASS checkComputedStyleValue() is true
PASS computedBorderImageStyle('url(test.png) 10 / 13px / 11px repeat stretch', 'border-image-outset') is '11px'
PASS computedBorderImageStyle('url(dummy://test.png) 10 / 13px / 11px repeat stretch', 'border-image') is 'url("dummy://test.png") 10 / 13px / 11px repeat stretch'
PASS checkComputedStyleValue() is true
PASS successfullyParsed is true

TEST COMPLETE

