| <!doctype html> | |
| <meta charset=utf-8> | |
| <title>Serialization of basic shapes</title> | |
| <link rel="help" href="https://drafts.csswg.org/css-shapes/#basic-shape-serialization"/> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <script> | |
| function checkEquals(input, expected) { | |
| test(function() { | |
| let div = document.createElement('div'); | |
| div.style.clipPath = input; | |
| let serialized = div.style.clipPath; | |
| assert_equals(serialized, expected, input); | |
| }); | |
| } | |
| // Keywords get replaced by percentages in 2-value form | |
| checkEquals("circle(at left bottom)", "circle(at 0% 100%)"); | |
| checkEquals("circle(at bottom left)", "circle(at 0% 100%)"); | |
| checkEquals("circle(at right calc(10% + 5px))", | |
| "circle(at 100% calc(10% + 5px))"); | |
| checkEquals("ellipse(at left bottom)", "ellipse(at 0% 100%)"); | |
| checkEquals("ellipse(at bottom left)", "ellipse(at 0% 100%)"); | |
| checkEquals("ellipse(at right calc(10% + 5px))", | |
| "ellipse(at 100% calc(10% + 5px))"); | |
| // Only 2 or 4 value form allowed | |
| checkEquals("circle()", "circle(at 50% 50%)"); | |
| checkEquals("circle(0px)", "circle(0px at 50% 50%)"); | |
| checkEquals("circle(closest-side)", "circle(at 50% 50%)"); | |
| checkEquals("circle(farthest-side)", | |
| "circle(farthest-side at 50% 50%)"); | |
| checkEquals("ellipse()", "ellipse(at 50% 50%)"); | |
| checkEquals("ellipse(closest-side farthest-side)", | |
| "ellipse(closest-side farthest-side at 50% 50%)"); | |
| checkEquals("circle(at top 0% right 5px)", "circle(at right 5px top 0%)"); | |
| checkEquals("ellipse(at top 0% right 10px)", "ellipse(at right 10px top 0%)"); | |
| // Remove defaults like closest-side | |
| checkEquals("circle(closest-side at center)", | |
| "circle(at 50% 50%)"); | |
| checkEquals("ellipse(closest-side closest-side at center)", | |
| "ellipse(at 50% 50%)"); | |
| // don't remove non defaults | |
| checkEquals("circle(farthest-side at center)", | |
| "circle(farthest-side at 50% 50%)"); | |
| checkEquals("circle(10px at center)", | |
| "circle(10px at 50% 50%)"); | |
| checkEquals("ellipse(farthest-side 10px at center)", | |
| "ellipse(farthest-side 10px at 50% 50%)"); | |
| // Ellipse can have 0 radii or two, not one. We cannot | |
| // eliminate a single closest-side if the other is different | |
| checkEquals("ellipse(closest-side farthest-side at 50% 50%)", | |
| "ellipse(closest-side farthest-side at 50% 50%)"); | |
| checkEquals("ellipse(closest-side 10% at 50% 50%)", | |
| "ellipse(closest-side 10% at 50% 50%)"); | |
| // Don't transform nonzero lengths | |
| checkEquals("circle(at right 5px bottom 10px)", | |
| "circle(at right 5px bottom 10px)"); | |
| checkEquals("ellipse(at right 5px bottom 10px)", | |
| "ellipse(at right 5px bottom 10px)"); | |
| // Convert keyword-percentage pairs to plain percentages | |
| // Convert zero lengths to 0% | |
| checkEquals("circle(at right 5% top 0px)", "circle(at 95% 0%)"); | |
| checkEquals("ellipse(at right 5% top 0px)", "ellipse(at 95% 0%)"); | |
| // Don't transform calcs | |
| checkEquals("circle(at right calc(10% + 5px) bottom calc(10% + 5px))", | |
| "circle(at right calc(10% + 5px) bottom calc(10% + 5px))"); | |
| checkEquals("ellipse(at right calc(10% + 5px) bottom calc(10% + 5px))", | |
| "ellipse(at right calc(10% + 5px) bottom calc(10% + 5px))"); | |
| </script> |