<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers scroll-margin</title>
<meta charset="utf-8">
<link rel="author" title="Sandra Sun" href="mailto:sunyunjia@chromium.org">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#scroll-margin">
<script src="../../../../../resources/testharness.js"></script>
<script src="../../../../../resources/testharnessreport.js"></script>

<style>
#scroller {
  width: 200px;
  height: 200px;
  overflow: scroll;
}
#content {
  width: 500px;
  height: 500px;
}
#target {
  position: relative;
  left: 200px;
  top: 200px;
  width: 100px;
  height: 100px;
  scroll-margin-top: 4px;
  scroll-margin-right: 8px;
  scroll-margin-bottom: 12px;
  scroll-margin-left: 16px;
  background-color: lightgreen;
}
</style>

<div id="scroller">
  <div id="content">
    <div id="target"></div>
  </div>
</div>
<div id="log"></div>

<script>
var target = document.getElementById("target");
var scroller = document.getElementById("scroller");

var expectedXLeft = 200 - 16;
var expectedXRight = 200 - scroller.clientWidth + target.clientWidth + 8;
var expectedXCenter = 200 - (scroller.clientWidth / 2) +
                      (target.clientWidth + 8 - 16) / 2;

var expectedYTop = 200 - 4;
var expectedYBottom = 200 - scroller.clientHeight + target.clientHeight + 12;
var expectedYCenter = 200 - (scroller.clientHeight / 2) +
                      (target.clientHeight + 12 - 4) / 2;

// This formats dict as a string suitable as test name.
// format_value() is provided by testharness.js,
// which also preserves sign for -0.
function format_dict(dict) {
  const props = [];
  for (let prop in dict) {
    props.push(`${prop}: ${format_value(dict[prop])}`);
  }
  return `{${props.join(", ")}}`;
}

[
  [{block: "center", inline: "center"}, expectedXCenter, expectedYCenter],
  [{block: "start", inline: "start"}, expectedXLeft, expectedYTop],
  [{block: "end", inline: "end"}, expectedXRight, expectedYBottom],
].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(${format_dict(input)})`);
})
</script>