<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers sideways-rl writing mode and rtl direction</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-rl;
  direction: rtl;
  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-rl mode and rtl direction, X corresponds to the block axis and is oriented leftward.
// Y corresponds to the inline axis and is oriented upward.
// So the beginning edges are the bottom and right edges and the ending edges are the top and left edges.

// According to the spec, x be min(0, max(x, element padding edge width - element scrolling area width)).
// So x is nonpositive and decreases leftward.
// 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 left 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>
