<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers scroll-padding</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-padding">
<script src="../../../../../resources/testharness.js"></script>
<script src="../../../../../resources/testharnessreport.js"></script>

<style>
#scroller {
  width: 200px;
  height: 200px;
  overflow: scroll;
  scroll-padding-top: 4px;
  scroll-padding-right: 8px;
  scroll-padding-bottom: 12px;
  scroll-padding-left: 16px;
}
#content {
  width: 500px;
  height: 500px;
}
#target {
  position: relative;
  left: 200px;
  top: 200px;
  width: 100px;
  height: 100px;
  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 + 8 + target.clientWidth;
var expectedXCenter = 200 - (16 + scroller.clientWidth - 8) / 2 +
                      target.clientWidth / 2;

var expectedYTop = 200 - 4;
var expectedYBottom = 200 - scroller.clientHeight + 12 + target.clientHeight;
var expectedYCenter = 200 - (4 + scroller.clientHeight - 12) / 2 +
                      target.clientHeight / 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>