<!doctype html> <html> <head> <title>Test for miscellaneous specified value issues</title> <script src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=">Mozilla Bug </a> <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> <script type="application/javascript"> (function test_bug_721136() { // Test for transform property serialization. [ [" mAtRiX(1, 2,3,4, 5,6 ) ", "matrix(1, 2, 3, 4, 5, 6)"], [" mAtRiX3d( 1,2,3,0,4 ,5,6,0,7,8 , 9,0,10, 11,12,1 ) ", "matrix3d(1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9, 0, 10, 11, 12, 1)"], [" pErSpEcTiVe( 400Px ) ", "perspective(400px)"], [" rOtAtE( 90dEg ) ", "rotate(90deg)"], [" rOtAtE3d( 0,0 , 1 ,180DeG ) ", "rotate3d(0, 0, 1, 180deg)"], [" rOtAtEx( 100GrAD ) ", "rotateX(100grad)"], [" rOtAtEy( 1.57RaD ) ", "rotateY(1.57rad)"], [" rOtAtEz( 0.25TuRn ) ", "rotateZ(0.25turn)"], [" sCaLe( 2 ) ", "scale(2)"], [" sCaLe( 2,3 ) ", "scale(2, 3)"], [" sCaLe3D( 2,4 , -9 ) ", "scale3d(2, 4, -9)"], [" sCaLeX( 2 ) ", "scaleX(2)"], [" sCaLeY( 2 ) ", "scaleY(2)"], [" sCaLeZ( 2 ) ", "scaleZ(2)"], [" sKeW( 45dEg ) ", "skew(45deg)"], [" sKeW( 45dEg,45DeG ) ", "skew(45deg, 45deg)"], [" sKeWx( 45DeG ) ", "skewX(45deg)"], [" sKeWy( 45DeG ) ", "skewY(45deg)"], [" tRaNsLaTe( 1Px ) ", "translate(1px)"], [" tRaNsLaTe( 1Px,3Pt ) ", "translate(1px, 3pt)"], [" tRaNsLaTe3D( 21pX,-6pX , 4pX ) ", "translate3d(21px, -6px, 4px)"], [" tRaNsLaTeX( 1pT ) ", "translateX(1pt)"], [" tRaNsLaTeY( 1iN ) ", "translateY(1in)"], [" tRaNsLaTeZ( 15.4pX ) ", "translateZ(15.4px)"], ["tranSlatex( 16px )rotatez(-90deg) rotate(100grad)\ttranslate3d(12pt, 0pc, 0.0em)", "translateX(16px) rotateZ(-90deg) rotate(100grad) translate3d(12pt, 0pc, 0em)"], ].forEach(function(arr) { document.documentElement.style.MozTransform = arr[0]; is(document.documentElement.style.MozTransform, arr[1], "bug-721136 incorrect serialization"); }); var elt = document.documentElement; elt.setAttribute("style", "transform: tRANslatEX(5px) TRanslATey(10px) translatez(2px) ROTATEX(30deg) rotateY(30deg) rotatez(5deg) SKEWx(10deg) skewy(10deg) scaleX(2) SCALEY(0.5) scalez(2)"); is(elt.style.getPropertyValue("transform"), "translateX(5px) translateY(10px) translateZ(2px) rotateX(30deg) rotateY(30deg) rotateZ(5deg) skewX(10deg) skewY(10deg) scaleX(2) scaleY(0.5) scaleZ(2)", "bug-721136 expected case canonicalization of transform functions"); elt.setAttribute("style", "font-variant-alternates: SWASH(fOo) stYLIStiC(Bar)"); is(elt.style.getPropertyValue("font-variant-alternates"), "swash(fOo) stylistic(Bar)", "bug-721136 expected case canonicalization of transform functions"); elt.setAttribute("style", ""); // leave the page in a useful state })(); (function test_bug_1347164() { // Test that specified color values are serialized as "rgb()" // IFF they're fully-opaque (and otherwise as "rgba()"). var color = [ ["rgba(0, 0, 0, 1)", "rgb(0, 0, 0)"], ["rgba(0, 0, 0, 0.5)", "rgba(0, 0, 0, 0.5)"], ["hsla(0, 0%, 0%, 1)", "rgb(0, 0, 0)"], ["hsla(0, 0%, 0%, 0.5)", "rgba(0, 0, 0, 0.5)"], ]; var css_color_4 = [ ["rgba(0 0 0 / 1)", "rgb(0, 0, 0)"], ["rgba(0 0 0 / 0.1)", "rgba(0, 0, 0, 0.1)"], ["rgb(0 0 0 / 1)", "rgb(0, 0, 0)"], ["rgb(0 0 0 / 0.2)", "rgba(0, 0, 0, 0.2)"], ["hsla(0 0% 0% / 1)", "rgb(0, 0, 0)"], ["hsla(0deg 0% 0% / 0.3)", "rgba(0, 0, 0, 0.3)"], ["hsl(0 0% 0% / 1)", "rgb(0, 0, 0)"], ["hsl(0 0% 0% / 0.4)", "rgba(0, 0, 0, 0.4)"], ]; var frame_container = document.getElementById("display"); var p = document.createElement("p"); frame_container.appendChild(p); for (var i = 0; i < color.length; ++i) { var test = color[i]; p.style.color = test[0]; is(p.style.color, test[1], "serialization value of " + test[0]); } for (var i = 0; i < css_color_4.length; ++i) { var test = css_color_4[i]; p.style.color = test[0]; is(p.style.color, test[1], "css-color-4 serialization value of " + test[0]); } p.remove(); })(); (function test_bug_1357117() { // Test that vendor-prefixed gradient styles round-trip with the same prefix, // or with no prefix. var backgroundImages = [ // [ specified style, // expected serialization, // descriptionOfTestcase ], // Linear gradient with legacy-gradient-line (needs prefixed syntax): [ "-webkit-linear-gradient(10deg, red, blue)", "-webkit-linear-gradient(10deg, red, blue)", "-webkit-linear-gradient with angled legacy-gradient-line" ], // Linear gradient with box corner (needs prefixed syntax): [ "-webkit-linear-gradient(top left, red, blue)", "-webkit-linear-gradient(left top, red, blue)", "-webkit-linear-gradient with box corner" ], // Servo keeps the original prefix form which is closer to other impls. [ "-webkit-radial-gradient(contain, red, blue)", "-webkit-radial-gradient(closest-side, red, blue)", "-webkit-radial-gradient with legacy 'contain' keyword" ], ]; var frame_container = document.getElementById("display"); var p = document.createElement("p"); frame_container.appendChild(p); for (var i = 0; i < backgroundImages.length; ++i) { var test = backgroundImages[i]; p.style.backgroundImage = test[0]; is(p.style.backgroundImage, test[1], "serialization value of prefixed gradient expression (" + test[2] + ")"); } p.remove(); })(); (function test_bug_1357932() { // Test for box-position keyword ordering, in serialization of specified CSS // gradients. var backgroundImages = [ // [ specified style, // expected serialization, // descriptionOfTestcase ], // Linear gradient to box position ordering: [ "linear-gradient(to right top, gray, pink)", "linear-gradient(to right top, gray, pink)", "linear-gradient ordering to right top" ], [ "linear-gradient(to top right, yellow, teal)", "linear-gradient(to right top, yellow, teal)", "linear-gradient ordering to top right" ], ]; var frame_container = document.getElementById("display"); var p = document.createElement("p"); frame_container.appendChild(p); for (var i = 0; i < backgroundImages.length; ++i) { var test = backgroundImages[i]; p.style.backgroundImage = test[0]; is(p.style.backgroundImage, test[1], "serialization value of gradient expression (" + test[2] + ")"); } p.remove(); })(); (function test_bug_1367028() { const borderImageSubprops = [ "border-image-slice", "border-image-outset", "border-image-width" ]; const rectValues = [ { values: ["5 5 5 5", "5 5 5", "5 5", "5"], expected: "5", desc: "identical four sides", }, { values: ["5 6 5 6", "5 6 5", "5 6"], expected: "5 6", desc: "identical values on each axis", }, { values: ["5 6 7 6", "5 6 7"], expected: "5 6 7", desc: "identical values on left and right", }, { values: ["5 6 5 7"], desc: "identical values on top and bottom", }, { values: ["5 5 6 6", "5 6 6 5"], desc: "identical values on unrelated sides", }, { values: ["5 6 7 8"], desc: "different values on all sides", }, ]; let frameContainer = document.getElementById("display"); let p = document.createElement("p"); frameContainer.appendChild(p); for (let prop of borderImageSubprops) { for (let {values, expected, desc} of rectValues) { for (let value of values) { p.style.setProperty(prop, value); is(p.style.getPropertyValue(prop), expected ? expected : value, `${desc} for ${prop}`); p.style.removeProperty(prop); } } } p.remove(); })(); (function test_bug_1397619() { var borderRadius = [ // [ specified style, // expected serialization, // descriptionOfTestcase ], [ "10px 10px", "10px", "Width and height specified for " ], [ "10px", "10px", "Only width specified for " ], ]; var frame_container = document.getElementById("display"); var p = document.createElement("p"); frame_container.appendChild(p); [ "border-top-left-radius", "border-bottom-left-radius", "border-top-right-radius", "border-bottom-right-radius", "border-spacing", ].forEach(function(property) { for (var i = 0; i < borderRadius.length; ++i) { var test = borderRadius[i]; p.style.setProperty(property, test[0]); is(p.style.getPropertyValue(property), test[1], test[2] + property); } }); p.style.paintOrder = "markers"; is(p.style.paintOrder, "markers", "specified value serialization for paint-order doesn't contain repetitive values"); p.remove(); })(); SimpleTest.waitForExplicitFinish(); SpecialPowers.pushPrefEnv( { set: [['layout.css.individual-transform.enabled', true]], }, () => window.open('file_specified_value_serialization_individual_transforms.html') ); </script> </pre> </body> </html>