| <!DOCTYPE html> |
| <html> |
| <style> |
| * { font-size: 16px; } |
| div { font-size: 8px; } |
| </style> |
| <body> |
| <script src="../../resources/js-test-pre.js"></script> |
| <script> |
| description('Test parsing and computation of CSS image filter() function.'); |
| |
| function computedStyle(property, value) { |
| var div = document.createElement("div"); |
| document.body.appendChild(div); |
| div.style.setProperty(property, value); |
| var computedValue = getComputedStyle(div).getPropertyValue(property); |
| document.body.removeChild(div); |
| return computedValue; |
| } |
| |
| function innerStyle(property, value) { |
| var div = document.createElement("div"); |
| div.style.setProperty(property, value); |
| return div.style.getPropertyValue(property); |
| } |
| |
| function testComputed(property, value, expected) { |
| shouldBeEqualToString('computedStyle("' + property + '", "' + value + '")', expected); |
| } |
| |
| function testInner(property, value, expected) { |
| if (expected === null) |
| expected = ""; |
| shouldBeEqualToString('innerStyle("' + property + '", "' + value + '")', expected); |
| } |
| |
| function negativeTest(property, value) { |
| testInner(property, value, null); |
| // FIXME: Computed style not yet implemented. |
| testComputed(property, value, 'none'); |
| } |
| |
| // Test different filter combination. |
| testInner( |
| "background-image", |
| "filter(none, blur(3px))", |
| "filter(none, blur(3px))"); |
| testInner( |
| "background-image", |
| "filter(none, url(#a))", |
| "filter(none, url(\"#a\"))"); |
| testInner( |
| "background-image", |
| "filter(none, url(#a))", |
| "filter(none, url(\"#a\"))"); |
| testInner( |
| "background-image", |
| "filter(none, url(#a) url(#b))", |
| "filter(none, url(\"#a\") url(\"#b\"))"); |
| testInner( |
| "background-image", |
| "filter(none, grayscale(1) url(#a))", |
| "filter(none, grayscale(1) url(\"#a\"))"); |
| testInner( |
| "background-image", |
| "filter(none, grayscale(1))", |
| "filter(none, grayscale(1))"); |
| testInner( |
| "background-image", |
| "filter(none, grayscale(50%))", |
| "filter(none, grayscale(50%))"); |
| testInner( |
| "background-image", |
| "filter(none, grayscale(1.0))", |
| "filter(none, grayscale(1))"); |
| testInner( |
| "background-image", |
| "filter(none, grayscale(0))", |
| "filter(none, grayscale(0))"); |
| testInner( |
| "background-image", |
| "filter(none, grayscale(0.5) grayscale(0.25))", |
| "filter(none, grayscale(0.5) grayscale(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, sepia(1))", |
| "filter(none, sepia(1))"); |
| testInner( |
| "background-image", |
| "filter(none, sepia(50%))", |
| "filter(none, sepia(50%))"); |
| testInner( |
| "background-image", |
| "filter(none, sepia(1.0))", |
| "filter(none, sepia(1))"); |
| testInner( |
| "background-image", |
| "filter(none, sepia(0))", |
| "filter(none, sepia(0))"); |
| testInner( |
| "background-image", |
| "filter(none, sepia(0.5) sepia(0.25))", |
| "filter(none, sepia(0.5) sepia(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, sepia(0.5) grayscale(0.25))", |
| "filter(none, sepia(0.5) grayscale(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, saturate(1))", |
| "filter(none, saturate(1))"); |
| testInner( |
| "background-image", |
| "filter(none, saturate(50%))", |
| "filter(none, saturate(50%))"); |
| testInner( |
| "background-image", |
| "filter(none, saturate(250%))", |
| "filter(none, saturate(250%))"); |
| testInner( |
| "background-image", |
| "filter(none, saturate(1.0))", |
| "filter(none, saturate(1))"); |
| testInner( |
| "background-image", |
| "filter(none, saturate(5.5))", |
| "filter(none, saturate(5.5))"); |
| testInner( |
| "background-image", |
| "filter(none, saturate(0))", |
| "filter(none, saturate(0))"); |
| testInner( |
| "background-image", |
| "filter(none, saturate(0.5) saturate(0.25))", |
| "filter(none, saturate(0.5) saturate(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, saturate(0.5) grayscale(0.25))", |
| "filter(none, saturate(0.5) grayscale(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, hue-rotate(10deg))", |
| "filter(none, hue-rotate(10deg))"); |
| testInner( |
| "background-image", |
| "filter(none, hue-rotate(10.0deg))", |
| "filter(none, hue-rotate(10deg))"); |
| testInner( |
| "background-image", |
| "filter(none, hue-rotate(10rad))", |
| "filter(none, hue-rotate(10rad))"); |
| testInner( |
| "background-image", |
| "filter(none, hue-rotate(10grad))", |
| "filter(none, hue-rotate(10grad))"); |
| testInner( |
| "background-image", |
| "filter(none, hue-rotate(0.5turn))", |
| "filter(none, hue-rotate(0.5turn))"); |
| testInner( |
| "background-image", |
| "filter(none, hue-rotate(0))", |
| "filter(none, hue-rotate(0deg))"); |
| testInner( |
| "background-image", |
| "filter(none, hue-rotate(10deg) grayscale(0.25))", |
| "filter(none, hue-rotate(10deg) grayscale(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, invert(1))", |
| "filter(none, invert(1))"); |
| testInner( |
| "background-image", |
| "filter(none, invert(50%))", |
| "filter(none, invert(50%))"); |
| testInner( |
| "background-image", |
| "filter(none, invert(1.0))", |
| "filter(none, invert(1))"); |
| testInner( |
| "background-image", |
| "filter(none, invert(0))", |
| "filter(none, invert(0))"); |
| testInner( |
| "background-image", |
| "filter(none, invert(0.5) invert(0.25))", |
| "filter(none, invert(0.5) invert(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, invert(0.5) grayscale(0.25))", |
| "filter(none, invert(0.5) grayscale(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, opacity(1))", |
| "filter(none, opacity(1))"); |
| testInner( |
| "background-image", |
| "filter(none, opacity(50%))", |
| "filter(none, opacity(50%))"); |
| testInner( |
| "background-image", |
| "filter(none, opacity(1.0))", |
| "filter(none, opacity(1))"); |
| testInner( |
| "background-image", |
| "filter(none, opacity(0))", |
| "filter(none, opacity(0))"); |
| testInner( |
| "background-image", |
| "filter(none, opacity(0.5) opacity(0.25))", |
| "filter(none, opacity(0.5) opacity(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, opacity(0.5) grayscale(0.25))", |
| "filter(none, opacity(0.5) grayscale(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, brightness(1))", |
| "filter(none, brightness(1))"); |
| testInner( |
| "background-image", |
| "filter(none, brightness(50%))", |
| "filter(none, brightness(50%))"); |
| testInner( |
| "background-image", |
| "filter(none, brightness(1.0))", |
| "filter(none, brightness(1))"); |
| testInner( |
| "background-image", |
| "filter(none, brightness(0))", |
| "filter(none, brightness(0))"); |
| testInner( |
| "background-image", |
| "filter(none, brightness(0.5) brightness(0.25))", |
| "filter(none, brightness(0.5) brightness(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, brightness(0.5) grayscale(0.25))", |
| "filter(none, brightness(0.5) grayscale(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, brightness(-1.1))", |
| ""); |
| testInner( |
| "background-image", |
| "filter(none, brightness(101%))", |
| "filter(none, brightness(101%))"); |
| testInner( |
| "background-image", |
| "filter(none, grayscale(0.25) brightness(0.5))", |
| "filter(none, grayscale(0.25) brightness(0.5))"); |
| testInner( |
| "background-image", |
| "filter(none, contrast(1))", |
| "filter(none, contrast(1))"); |
| testInner( |
| "background-image", |
| "filter(none, contrast(50%))", |
| "filter(none, contrast(50%))"); |
| testInner( |
| "background-image", |
| "filter(none, contrast(250%))", |
| "filter(none, contrast(250%))"); |
| testInner( |
| "background-image", |
| "filter(none, contrast(1.0))", |
| "filter(none, contrast(1))"); |
| testInner( |
| "background-image", |
| "filter(none, contrast(0))", |
| "filter(none, contrast(0))"); |
| testInner( |
| "background-image", |
| "filter(none, contrast(2))", |
| "filter(none, contrast(2))"); |
| testInner( |
| "background-image", |
| "filter(none, contrast(0.5) contrast(0.25))", |
| "filter(none, contrast(0.5) contrast(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, contrast(0.5) grayscale(0.25))", |
| "filter(none, contrast(0.5) grayscale(0.25))"); |
| testInner( |
| "background-image", |
| "filter(none, grayscale(0.25) contrast(0.5))", |
| "filter(none, grayscale(0.25) contrast(0.5))"); |
| testInner( |
| "background-image", |
| "filter(none, blur(0))", |
| "filter(none, blur(0px))"); |
| testInner( |
| "background-image", |
| "filter(none, blur(10px))", |
| "filter(none, blur(10px))"); |
| testInner( |
| "background-image", |
| "filter(none, drop-shadow(red 1px 2px 3px))", |
| "filter(none, drop-shadow(red 1px 2px 3px))"); |
| testInner( |
| "background-image", |
| "filter(none, drop-shadow(1px 2px 3px red))", |
| "filter(none, drop-shadow(red 1px 2px 3px))"); |
| testInner( |
| "background-image", |
| "filter(none, drop-shadow(#abc 0 0 0))", |
| "filter(none, drop-shadow(rgb(170, 187, 204) 0px 0px 0px))"); |
| testInner( |
| "background-image", |
| "filter(none, drop-shadow(0 0 0))", |
| "filter(none, drop-shadow(0px 0px 0px))"); |
| testInner( |
| "background-image", |
| "filter(none, drop-shadow(1px 2px))", |
| "filter(none, drop-shadow(1px 2px))"); |
| testInner( |
| "background-image", |
| "filter(none, grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px) drop-shadow(green 1px 2px 3px))", |
| "filter(none, grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px) drop-shadow(green 1px 2px 3px))"); |
| |
| // Test different CSS Image values. |
| testInner( |
| "background-image", |
| "filter(radial-gradient(ellipse closest-corner, white, black), hue-rotate(90deg))", |
| "filter(radial-gradient(closest-corner, white, black), hue-rotate(90deg))"); |
| testInner( |
| "background-image", |
| "filter(radial-gradient(circle closest-side at 50px 50%, white, black), hue-rotate(90deg))", |
| "filter(radial-gradient(circle closest-side at 50px 50%, white, black), hue-rotate(90deg))"); |
| testInner( |
| "background-image", |
| "filter(radial-gradient(ellipse closest-corner at 20px 50px, white, black), hue-rotate(90deg))", |
| "filter(radial-gradient(closest-corner at 20px 50px, white, black), hue-rotate(90deg))"); |
| testInner( |
| "background-image", |
| "filter(linear-gradient(white, black), hue-rotate(90deg))", |
| "filter(linear-gradient(white, black), hue-rotate(90deg))"); |
| testInner( |
| "background-image", |
| "filter(linear-gradient(to top left, white, black), hue-rotate(90deg))", |
| "filter(linear-gradient(to left top, white, black), hue-rotate(90deg))"); |
| testInner( |
| "background-image", |
| "filter(linear-gradient(0deg, white -20%, blue, black 120%), hue-rotate(90deg))", |
| "filter(linear-gradient(0deg, white -20%, blue, black 120%), hue-rotate(90deg))"); |
| testInner( |
| "background-image", |
| "filter(-webkit-cross-fade(url(http://image1.png), url(http://image2.png), 50%), contrast(0.5))", |
| "filter(-webkit-cross-fade(url(\"http://image1.png/\"), url(\"http://image2.png/\"), 0.5), contrast(0.5))"); |
| testInner( |
| "background-image", |
| "filter(url(http://image1.png), brightness(50%))", |
| "filter(url(\"http://image1.png/\"), brightness(50%))"); |
| testInner( |
| "background-image", |
| "filter(url('http://image1.png'), brightness(50%))", |
| "filter(url(\"http://image1.png/\"), brightness(50%))"); |
| |
| // Test different properties, taking CSS Image values. |
| testInner( |
| "border-image-source", |
| "filter(url(http://image1.png), invert(50%))", |
| "filter(url(\"http://image1.png/\"), invert(50%))"); |
| testInner( |
| "-webkit-mask-image", |
| "filter(url(http://image1.png), invert(50%))", |
| "filter(url(\"http://image1.png/\"), invert(50%))"); |
| testInner( |
| "-webkit-mask-box-image-source", |
| "filter(url(http://image1.png), invert(50%))", |
| "filter(url(\"http://image1.png/\"), invert(50%))"); |
| testInner( |
| "content", |
| "filter(url(http://image1.png), invert(50%))", |
| "filter(url(\"http://image1.png/\"), invert(50%))"); |
| |
| // negative tests |
| negativeTest("background-image", "filter()"); |
| negativeTest("background-image", "filter(url(image1.png))"); |
| negativeTest("background-image", "filter(url(image1.png), )"); |
| negativeTest("background-image", "filter(url(image1.png) brightness(50%))"); |
| negativeTest("background-image", "filter(brightness(50%) url(image1.png))"); |
| negativeTest("background-image", "filter(brightness(50%), url(image1.png))"); |
| negativeTest("background-image", "filter(url(image1.png) url(#filter))"); |
| negativeTest("background-image", "filter(brightness(50%))"); |
| negativeTest("background-image", "filter(brightness(50%), )"); |
| negativeTest("background-image", "filter(url(image1.png), brightness(50%), brightness(50%))"); |
| negativeTest("background-image", "filter(url(image1.png) url(image2.png), brightness(50%))"); |
| negativeTest("background-image", "filter(url(image1.png), url(image2.png), brightness(50%))"); |
| negativeTest("background-image", "filter(invalidToken.png, blur(3px))"); |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |