| <!DOCTYPE html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <div id="test"></div> |
| <script> |
| let hiddenProperties = [ |
| "border-block", |
| "border-block-width", |
| "border-block-style", |
| "border-block-color", |
| "border-inline", |
| "border-inline-width", |
| "border-inline-style", |
| "border-inline-color", |
| "inset", |
| "inset-block", |
| "inset-block-start", |
| "inset-block-end", |
| "inset-inline", |
| "inset-inline-start", |
| "inset-inline-end", |
| "margin-block", |
| "margin-inline", |
| "padding-block", |
| "padding-inline", |
| ]; |
| let element = document.getElementById("test"); |
| let {style} = element; |
| let ownProps = Object.getOwnPropertyNames(style); |
| let cs = getComputedStyle(element); |
| for (let property of hiddenProperties) { |
| test(function() { |
| let camelCase = property.replace(/-(.)/g, (match, $1) => $1.toUpperCase()); |
| style.cssText = ""; |
| let initialStyles = Object.assign({}, cs); |
| |
| // Check that the property is not initially exposed |
| assert_false(property in style, `${property} not in style`); |
| assert_false(camelCase in style, `${camelCase} not in style`); |
| assert_false(ownProps.includes(property), `${property} not in own properties`); |
| assert_false(ownProps.includes(camelCase), `${camelCase} not in own properties`); |
| assert_equals(style[property], undefined, `${property} value is undefined`); |
| assert_equals(style[camelCase], undefined, `${camelCase} value is undefined`); |
| assert_false(property in cs, `${property} not in computed style`); |
| assert_false(camelCase in cs, `${camelCase} not in computed style`); |
| assert_equals(cs[property], undefined, `${property} computed value is undefined`); |
| assert_equals(cs[camelCase], undefined, `${camelCase} computed value is undefined`); |
| |
| // Try to set a value |
| style[property] = "inherit"; |
| style[camelCase] = "inherit"; |
| style.setProperty(property, "inherit"); |
| style.setProperty(camelCase, "inherit"); |
| |
| // Check that it had no effect |
| assert_equals(style.cssText, "", `${property} value ignored in cssText`); |
| assert_equals(style.getPropertyValue(property), "", `${property} value ignored in getPropertyValue`); |
| assert_equals(style.getPropertyValue(camelCase), "", `${camelCase} value ignored in getPropertyValue`); |
| assert_equals(cs.getPropertyValue(property), "", `${property} has no computed value`); |
| assert_equals(cs.getPropertyValue(camelCase), "", `${camelCase} has no computed value`); |
| assert_object_equals(initialStyles, Object.assign({}, cs), `Computed styles remain unaffected`); |
| |
| // Check that enabled longhands cannot be serialized into this shorthand |
| for (let longhand of ownProps) |
| if (longhand.startsWith(camelCase)) |
| style[longhand] = "inherit"; |
| assert_false(new RegExp("(^|;\s*)" + property + ":").test(style.cssText), `longhands can't be serialized into ${property}`); |
| }, `${property} is not exposed`); |
| } |
| </script> |