| <!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> |