<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers horizontal-tb 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">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#scroll-an-element">
<script src="../../../../../resources/testharness.js"></script>
<script src="../../../../../resources/testharnessreport.js"></script>

<style>
.box {
  float: left;
  width: 200px;
  height: 200px;
}
#scroller {
  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 horizontal-tb mode and rtl direction, X corresponds to the inline axis
// and is oriented leftward. Y corresponds to the block axis and is oriented
// downward. So the beginning edges are the top and right edges and the ending
// edges are the bottom and left edges.

// According to the spec, x is min(0, max(x, element padding edge width - element scrolling area width)).
// So x is nonpositive and decreases leftward.

// 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 = {
  inlineStart: -box_width,
  inlineCenter: -((3*box_width - scroller_width)/2) - scrollbar_width/2,
  inlineEnd: -(2*box_width - scroller_width) - scrollbar_width,
};

var expectedY = {
    blockStart: box_height,
    blockCenter: (3*box_height - scroller_height)/2 + scrollbar_width/2,
    blockEnd: 2*box_height - scroller_height + scrollbar_width,
};

[
  [{block: "start", inline: "start"}, expectedX.inlineStart, expectedY.blockStart],
  [{block: "start", inline: "center"}, expectedX.inlineCenter, expectedY.blockStart],
  [{block: "start", inline: "end"}, expectedX.inlineEnd, expectedY.blockStart],
  [{block: "center", inline: "start"}, expectedX.inlineStart, expectedY.blockCenter],
  [{block: "center", inline: "center"}, expectedX.inlineCenter, expectedY.blockCenter],
  [{block: "center", inline: "end"}, expectedX.inlineEnd, expectedY.blockCenter],
  [{block: "end", inline: "start"}, expectedX.inlineStart, expectedY.blockEnd],
  [{block: "end", inline: "center"}, expectedX.inlineCenter, expectedY.blockEnd],
  [{block: "end", inline: "end"}, expectedX.inlineEnd, expectedY.blockEnd],
].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>
