<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers vertical-rl writing mode</title>
<meta charset="utf-8">
<link rel="author" title="Suneel Kota" href="mailto:suneel.kota@samsung.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: vertical-rl;
  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 vertical-rl mode, X corresponds to the block axis and is oriented
// leftward. Y corresponds to the inline 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.

// This assumes that the horizontal scrollbar is on the bottom 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;
// If scroll bar is on the left side, scroller.scrollLeft won't get bigger than 0,
scroller.scrollLeft = scrollbar_width;
if (scroller.scrollLeft == 0) {
  expectedX = {
    blockStart: -box_width,
    blockCenter: -(((3*box_width - scroller_width)/2) + (scrollbar_width/2)),
    blockEnd: -(((2*box_width) - scroller_width) + scrollbar_width),
  };
} else {
  expectedX = {
    blockStart: -(box_width - scrollbar_width),
    blockCenter: -(((3*box_width - scroller_width)/2) + (scrollbar_width/2) - scrollbar_width),
    blockEnd: -((2*box_width) - scroller_width),
  };
}

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

// As browsers differ in the meaning of scrollLeft when
// in a right-to-left mode, we adjust the expectation
// to match the semantics of scrollLeft.
// In vertical-rl mode, the scroll x coordinate should be nonpositive per the the spec.
// But some browsers is nonnegative, so we adjust the expectation.
scroller.scrollLeft = -1000;
if(scroller.scrollLeft === 0) {
  expectedX = {
    blockStart: ((2*box_width) - scroller_width) + scrollbar_width,
    blockCenter: ((3*box_width - scroller_width)/2) + (scrollbar_width/2),
    blockEnd: box_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>
