only-child-group.html (4339B)
1 <!DOCTYPE html> 2 <html class="foo"> 3 <title>View transitions: ensure :only-child is supported on view-transition-group</title> 4 <link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/"> 5 <link rel="author" href="mailto:khushalsagar@chromium.org"> 6 7 <script src="/resources/testharness.js"></script> 8 <script src="/resources/testharnessreport.js"></script> 9 10 <style> 11 ::view-transition { 12 background-color: black; 13 } 14 html:only-child { 15 background-color: black; 16 } 17 :root:only-child { 18 background-color: black; 19 } 20 :only-child { 21 background-color: black; 22 } 23 .foo:only-child { 24 background-color: black; 25 } 26 27 ::view-transition-group(root) { 28 background-color: blue; 29 } 30 ::view-transition-group(target) { 31 background-color: blue; 32 } 33 ::view-transition-group(*) { 34 color: blue; 35 } 36 37 ::view-transition-group(root):only-child { 38 background-color: red; 39 } 40 ::view-transition-group(target):only-child { 41 background-color: red; 42 } 43 ::view-transition-group(*):only-child { 44 color: red; 45 } 46 47 </style> 48 <div id="target"></div> 49 <div id="target2"></div> 50 51 <script> 52 function resetState() { 53 if (window.transition) 54 window.transition.skipTransition(); 55 document.documentElement.style.viewTransitionName = ""; 56 target.style.viewTransitionName = ""; 57 target2.style.viewTransitionName = ""; 58 } 59 60 promise_test((t) => { 61 assert_implements(document.startViewTransition, "Missing document.startViewTransition"); 62 t.add_cleanup(resetState); 63 return new Promise(async (resolve, reject) => { 64 window.transition = document.startViewTransition(); 65 window.transition.ready.then(() => { 66 let style = getComputedStyle(document.documentElement, "::view-transition-group(root)"); 67 if (style.backgroundColor == "rgb(255, 0, 0)" && style.color == "rgb(255, 0, 0)") 68 resolve(); 69 else 70 reject(style.backgroundColor + " and " + style.color); 71 }); 72 }); 73 }, ":only-child should match because ::view-transition-group is generated for root element only"); 74 75 promise_test((t) => { 76 assert_implements(document.startViewTransition, "Missing document.startViewTransition"); 77 t.add_cleanup(resetState); 78 return new Promise(async (resolve, reject) => { 79 target.style.viewTransitionName = "target"; 80 window.transition = document.startViewTransition(); 81 window.transition.ready.then(() => { 82 let style = getComputedStyle(document.documentElement, "::view-transition-group(root)"); 83 if (style.backgroundColor == "rgb(0, 0, 255)" && style.color == "rgb(0, 0, 255)") 84 resolve(); 85 else 86 reject(style.backgroundColor + " and " + style.color); 87 }); 88 }); 89 }, ":only-child should not match because ::view-transition-group is generated for multiple elements"); 90 91 promise_test((t) => { 92 assert_implements(document.startViewTransition, "Missing document.startViewTransition"); 93 t.add_cleanup(resetState); 94 return new Promise(async (resolve, reject) => { 95 document.documentElement.style.viewTransitionName = "none"; 96 target.style.viewTransitionName = "target"; 97 window.transition = document.startViewTransition(); 98 window.transition.ready.then(() => { 99 let style = getComputedStyle(document.documentElement, "::view-transition-group(target)"); 100 if (style.backgroundColor == "rgb(255, 0, 0)" && style.color == "rgb(255, 0, 0)") 101 resolve(); 102 else 103 reject(style.backgroundColor + " and " + style.color); 104 }); 105 }); 106 }, ":only-child should match because ::view-transition-group is generated for sub element only"); 107 108 promise_test((t) => { 109 assert_implements(document.startViewTransition, "Missing document.startViewTransition"); 110 t.add_cleanup(resetState); 111 return new Promise(async (resolve, reject) => { 112 document.documentElement.style.viewTransitionName = "none"; 113 target.style.viewTransitionName = "target"; 114 target2.style.viewTransitionName = "target2"; 115 window.transition = document.startViewTransition(); 116 window.transition.ready.then(() => { 117 let style = getComputedStyle(document.documentElement, "::view-transition-group(target)"); 118 if (style.backgroundColor == "rgb(0, 0, 255)" && style.color == "rgb(0, 0, 255)") 119 resolve(); 120 else 121 reject(style.backgroundColor + " and " + style.color); 122 }); 123 }); 124 }, ":only-child should not match because ::view-transition-group is generated for multiple sub elements"); 125 </script>