Skip to content

Commit

Permalink
Add test cases covering 'position-anchor' corner cases. (#48496)
Browse files Browse the repository at this point in the history
This change adds 2 reftests covering problems found during testing of
recent WebKit. See https://bugs.webkit.org/show_bug.cgi?id=279588.
  • Loading branch information
Scony authored Oct 7, 2024
1 parent a5cd1b0 commit b3d2e16
Show file tree
Hide file tree
Showing 3 changed files with 184 additions and 0 deletions.
70 changes: 70 additions & 0 deletions css/css-anchor-position/position-anchor-004.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html class=reftest-wait>
<title>Tests 'position-anchor' property when target visibility changes</title>
<link rel="help" href="https://drafts.csswg.org/css-anchor-1/#position-anchor">
<link rel="author" href="mailto:[email protected]">
<link rel="match" href="position-anchor-ref.html">
<script src="/common/reftest-wait.js"></script>
<script src="/common/rendering-utils.js"></script>
<style>
.anchor {
width: 100px;
height: 100px;
background: orange;
}

.target {
position: fixed;
width: 100px;
height: 100px;
background: lime;
top: anchor(bottom);
left: anchor(left);
}

body {
margin: 0;
}

#anchor1 {
anchor-name: --a1;
margin-left: 100px;
}

#target1 {
position-anchor: --a1;
}

#anchor2 {
anchor-name: --a2;
margin-left: 300px;
margin-top: 100px;
}

#target2 {
position-anchor: --a2;
}
</style>

<div id="anchor1" class="anchor">anchor1</div>
<div id="anchor2" class="anchor">anchor2</div>

<div id="target1" class="target">target1</div>
<div id="target2" class="target">target2</div>

<script>
// #target2 should be initially visible.
waitForAtLeastOneFrame().then(() => {
// Change #target2 to be invisible.
document.getElementById('target2').style.display = 'none';
waitForAtLeastOneFrame().then(() => {
// #target2 should be invisible now.
// Change #target2 to be visible.
document.getElementById('target2').style.display = 'flow';
waitForAtLeastOneFrame().then(() => {
// #target2 should be visible and anchor-positioned again now.
takeScreenshot();
});
});
});
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<!DOCTYPE html>
<style>
.anchor {
width: 100px;
height: 100px;
background: orange;
}

.target {
position: fixed;
background: lime;
width: 100px;
height: 100px;
}

body {
margin: 0;
}

#anchor1 {
margin-left: 100px;
}

#target1 {
left: 100px;
top: 100px;
}

#anchor2 {
margin-left: 300px;
margin-top: 100px;
}

#target2 {
left: 300px;
top: 300px;
}
</style>

<div id="anchor1" class="anchor">anchor1</div>
<div id="anchor2" class="anchor">anchor2</div>

<div id="target1" class="target">target1<ul><li>child 1</li><li>child 2</li></ul></div>
<div id="target2" class="target">target2<ul><li>child 1</li><li>child 2</li></ul></div>
70 changes: 70 additions & 0 deletions css/css-anchor-position/position-anchor-target-with-children.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html class=reftest-wait>
<title>Tests 'position-anchor' property impact on target's children when target visibility changes</title>
<link rel="help" href="https://drafts.csswg.org/css-anchor-1/#position-anchor">
<link rel="author" href="mailto:[email protected]">
<link rel="match" href="position-anchor-target-with-children-ref.html">
<script src="/common/reftest-wait.js"></script>
<script src="/common/rendering-utils.js"></script>
<style>
.anchor {
width: 100px;
height: 100px;
background: orange;
}

.target {
position: fixed;
width: 100px;
height: 100px;
background: lime;
top: anchor(bottom);
left: anchor(left);
}

body {
margin: 0;
}

#anchor1 {
anchor-name: --a1;
margin-left: 100px;
}

#target1 {
position-anchor: --a1;
}

#anchor2 {
anchor-name: --a2;
margin-left: 300px;
margin-top: 100px;
}

#target2 {
position-anchor: --a2;
}
</style>

<div id="anchor1" class="anchor">anchor1</div>
<div id="anchor2" class="anchor">anchor2</div>

<div id="target1" class="target">target1<ul><li>child 1</li><li>child 2</li></ul></div>
<div id="target2" class="target">target2<ul><li>child 1</li><li>child 2</li></ul></div>

<script>
// #target2 should be initially visible.
waitForAtLeastOneFrame().then(() => {
// Change #target2 to be invisible.
document.getElementById('target2').style.display = 'none';
waitForAtLeastOneFrame().then(() => {
// #target2 should be invisible now.
// Change #target2 to be visible.
document.getElementById('target2').style.display = 'flow';
waitForAtLeastOneFrame().then(() => {
// #target2 should be visible and anchor-positioned again now.
takeScreenshot();
});
});
});
</script>

0 comments on commit b3d2e16

Please sign in to comment.