Bug 1290864 - Add WPT test for serialization of basic-shapes; r?xidorn draft
authorManish Goregaokar <manishearth@gmail.com>
Fri, 05 Aug 2016 19:51:49 +0530
changeset 397220 e2e71d1fa703dd026ae47d4e50d65c1d59429b03
parent 397219 a148bc2eb44da5cb3b3814f459641909f0119d85
child 527404 68aae6627cb97371cc1931e53b43787dce2880a7
push id25239
push usermanishearth@gmail.com
push dateFri, 05 Aug 2016 14:19:58 +0000
reviewersxidorn
bugs1290864
milestone51.0a1
Bug 1290864 - Add WPT test for serialization of basic-shapes; r?xidorn MozReview-Commit-ID: EhBF42H7uZA
testing/web-platform/meta/MANIFEST.json
testing/web-platform/meta/css-shapes/__dir__.ini
testing/web-platform/mozilla/meta/MANIFEST.json
testing/web-platform/tests/css-shapes/basic-shape-circle-ellipse-serialization.html
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -11401,24 +11401,24 @@
         "path": "IndexedDB/idbcursor-advance.htm",
         "url": "/IndexedDB/idbcursor-advance.htm"
       },
       {
         "path": "IndexedDB/idbcursor-continue.htm",
         "url": "/IndexedDB/idbcursor-continue.htm"
       },
       {
+        "path": "IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm",
+        "url": "/IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm"
+      },
+      {
         "path": "IndexedDB/idbcursor-continuePrimaryKey.htm",
         "url": "/IndexedDB/idbcursor-continuePrimaryKey.htm"
       },
       {
-        "path": "IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm",
-        "url": "/IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm"
-      },
-      {
         "path": "IndexedDB/idbcursor-direction-index-keyrange.htm",
         "url": "/IndexedDB/idbcursor-direction-index-keyrange.htm"
       },
       {
         "path": "IndexedDB/idbcursor-direction-index.htm",
         "url": "/IndexedDB/idbcursor-direction-index.htm"
       },
       {
@@ -12201,28 +12201,28 @@
         "path": "IndexedDB/idbobjectstore_get7.htm",
         "url": "/IndexedDB/idbobjectstore_get7.htm"
       },
       {
         "path": "IndexedDB/idbobjectstore_getAll.html",
         "url": "/IndexedDB/idbobjectstore_getAll.html"
       },
       {
+        "path": "IndexedDB/idbobjectstore_getAllKeys.html",
+        "url": "/IndexedDB/idbobjectstore_getAllKeys.html"
+      },
+      {
         "path": "IndexedDB/idbobjectstore_getKey.htm",
         "url": "/IndexedDB/idbobjectstore_getKey.htm"
       },
       {
         "path": "IndexedDB/idbobjectstore_getKey_exception_order.htm",
         "url": "/IndexedDB/idbobjectstore_getKey_exception_order.htm"
       },
       {
-        "path": "IndexedDB/idbobjectstore_getAllKeys.html",
-        "url": "/IndexedDB/idbobjectstore_getAllKeys.html"
-      },
-      {
         "path": "IndexedDB/idbobjectstore_index.htm",
         "url": "/IndexedDB/idbobjectstore_index.htm"
       },
       {
         "path": "IndexedDB/idbobjectstore_openCursor.htm",
         "url": "/IndexedDB/idbobjectstore_openCursor.htm"
       },
       {
@@ -37611,16 +37611,22 @@
                 "=="
               ]
             ],
             "url": "/html/semantics/grouping-content/the-ol-element/reversed-1d.html"
           }
         ]
       },
       "testharness": {
+        "css-shapes/basic-shape-circle-ellipse-serialization.html": [
+          {
+            "path": "css-shapes/basic-shape-circle-ellipse-serialization.html",
+            "url": "/css-shapes/basic-shape-circle-ellipse-serialization.html"
+          }
+        ],
         "html/semantics/forms/the-form-element/form-submission-sandbox.html": [
           {
             "path": "html/semantics/forms/the-form-element/form-submission-sandbox.html",
             "url": "/html/semantics/forms/the-form-element/form-submission-sandbox.html"
           }
         ]
       }
     },
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css-shapes/__dir__.ini
@@ -0,0 +1,1 @@
+prefs: [layout.css.clip-path-shapes.enabled:true]
--- a/testing/web-platform/mozilla/meta/MANIFEST.json
+++ b/testing/web-platform/mozilla/meta/MANIFEST.json
@@ -9,17 +9,17 @@
   "local_changes": {
     "deleted": [],
     "deleted_reftests": {},
     "items": {
       "testharness": {
         "html/syntax/parsing/math-parse01.html": [
           {
             "path": "html/syntax/parsing/math-parse01.html",
-            "url": "/html/syntax/parsing/math-parse01.html"
+            "url": "/_mozilla/html/syntax/parsing/math-parse01.html"
           }
         ]
       }
     },
     "reftest_nodes": {}
   },
   "reftest_nodes": {},
   "rev": null,
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css-shapes/basic-shape-circle-ellipse-serialization.html
@@ -0,0 +1,76 @@
+<!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 right 5px top)", "circle(at right 5px top 0%)");
+checkEquals("ellipse(at right 10px top)", "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>