| <!doctype html> | |
| <title>CSSKeyframesRule deleteRule() should detach removed keyframe rules</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <link rel="help" href="https://drafts.csswg.org/css-animations-1/#dom-csskeyframesrule-deleterule"> | |
| <script> | |
| "use strict"; | |
| function getKeyframesRule() { | |
| const style = document.createElement("style"); | |
| style.textContent = "@keyframes a { from { opacity: 0 } to { opacity: 1 } }"; | |
| document.head.append(style); | |
| return { style, keyframes: style.sheet.cssRules[0] }; | |
| } | |
| test(() => { | |
| const { style, keyframes } = getKeyframesRule(); | |
| const removed = keyframes.cssRules[0]; | |
| assert_equals(removed.parentRule, keyframes, "setup: parentRule should be the keyframes rule"); | |
| assert_equals(removed.parentStyleSheet, style.sheet, "setup: parentStyleSheet should be the sheet"); | |
| keyframes.deleteRule("from"); | |
| assert_equals(removed.parentRule, null, "parentRule should be null after deletion"); | |
| assert_equals(removed.parentStyleSheet, null, "parentStyleSheet should be null after deletion"); | |
| style.remove(); | |
| }, "deleteRule() nullifies parentRule and parentStyleSheet on the removed keyframe rule"); | |
| test(() => { | |
| const { style, keyframes } = getKeyframesRule(); | |
| const kept = keyframes.cssRules[1]; | |
| assert_equals(kept.keyText, "100%"); | |
| keyframes.deleteRule("from"); | |
| assert_equals(kept.parentRule, keyframes, "kept rule's parentRule should still be the keyframes rule"); | |
| assert_equals(kept.parentStyleSheet, style.sheet, "kept rule's parentStyleSheet should still be the sheet"); | |
| style.remove(); | |
| }, "deleteRule() does not detach rules that were not removed"); | |
| </script> |