<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers sideways-rl writing mode</title>
<meta charset="utf-8">
<link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<style>
.box {
  float: left;
  width: 200px;
  height: 200px;
}
#scroller {
  writing-mode: sideways-lr;
  overflow: scroll;
  width: 300px;
  height: 300px;
}
#container{
  width: 600px;
  height: 600px;
}
#target {
  background-color: #ff0;
}
</style>
<body>
<div id="scroller">
  <div id="container">
    <!--  ROW-1  -->
    <div class="row">
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
    </div>

    <!--  ROW-2  -->
    <div class="row">
      <div class="box"></div>
      <div class="box" id="target"></div>
      <div class="box"></div>
    </div>

    <!--  ROW-3  -->
    <div class="row">
      <div class="box"></div>
      <div class="box"></div>
      <div class="box"></div>
    </div>
  </div>
</div>

<script>
// In sideways-lr mode, X corresponds to the block axis and is oriented rightward.
// Y corresponds to the inline axis and is oriented upward.
// So the beginning edges are the bottom and left edges and the ending edges are the top and right edges.

// According to the spec, y be min(0, max(y, element padding edge height - element scrolling area height)).
// So y is nonpositive and decreases upward.

// This assumes that the horizontal scrollbar is on the bottom side and the vertical scrollbar is on the right side.

var target = document.getElementById("target");
var scroller = document.getElementById("scroller");
var scrollbar_width = scroller.offsetWidth - scroller.clientWidth;

var scroller_width = scroller.offsetWidth;
var scroller_height = scroller.offsetHeight;
var box_width = target.offsetWidth;
var box_height = target.offsetHeight;

var expectedX = {
  blockStart: box_width,
  blockCenter: (3*box_width - scroller_width)/2 + scrollbar_width/2,
  blockEnd: 2*box_width - scroller_width + scrollbar_width,
};

var expectedY = {
  inlineStart: -box_height,
  inlineCenter: -((3*box_height - scroller_height)/2) - scrollbar_width/2,
  inlineEnd: -(2*box_height - scroller_height) - scrollbar_width,
};

[
  [{block: "start", inline: "start"}, expectedX.blockStart, expectedY.inlineStart],
  [{block: "start", inline: "center"}, expectedX.blockStart, expectedY.inlineCenter],
  [{block: "start", inline: "end"}, expectedX.blockStart, expectedY.inlineEnd],
  [{block: "center", inline: "start"}, expectedX.blockCenter, expectedY.inlineStart],
  [{block: "center", inline: "center"}, expectedX.blockCenter, expectedY.inlineCenter],
  [{block: "center", inline: "end"}, expectedX.blockCenter, expectedY.inlineEnd],
  [{block: "end", inline: "start"}, expectedX.blockEnd, expectedY.inlineStart],
  [{block: "end", inline: "center"}, expectedX.blockEnd, expectedY.inlineCenter],
  [{block: "end", inline: "end"}, expectedX.blockEnd, expectedY.inlineEnd],
].forEach(([input, expectedX, expectedY]) => {
  test(() => {
    scroller.scrollTo(0, 0);
    target.scrollIntoView(input);
    assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX");
    assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY");
  }, `scrollIntoView(${JSON.stringify(input)})`);
})

</script>

</body>
</html>
