/*
 * Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 * for details. All rights reserved. Use of this source code is governed by a
 * BSD-style license that can be found in the LICENSE file.
 */
/**
 * @assertion Point offsetTo(Element parent)
 * Provides the offset of this element's borderEdge relative to the specified
 * parent.
 * This is the Dart equivalent of jQuery's position method. Unlike jQuery's
 * position, however, parent can be any parent element of this, rather than
 * only this's immediate offsetParent. If the specified element is not an
 * offset parent or transitive offset parent to this element, an ArgumentError
 * is thrown.
 * @description Checks expected offset values
 */
import "dart:html";
import "../../../Utils/expect.dart";
import "../testcommon.dart";

main() {
  document.body?.setInnerHtml('''

<div style="position: absolute; left: 10px; top: 10px" id="div1">
  some
  <div style="position: absolute; left: 50px; top: 50px" id="div2">
    text
  </div>
</div>''', treeSanitizer: new NullTreeSanitizer());

  var div1 = document.body?.querySelector('#div1');
  var div2 = document.body?.querySelector('#div2');

  var b = document.body;
  if (b != null) {
    Expect.equals(10, div1?.offsetTo(b).x, "div1 relative to body x");
    Expect.equals(10, div1?.offsetTo(b).y, "div1 relative to body y");

    if (div1 != null) {
      Expect.equals(50, div2?.offsetTo(div1).x, "div2 relative to div1 x");
      Expect.equals(50, div2?.offsetTo(div1).y, "div2 relative to div1 y");
    } else {
      Expect.fail("div is null");
    }

    // indirect offsetParent
    Expect.equals(60, div2?.offsetTo(b).x, "div2 relative to body x");
    Expect.equals(60, div2?.offsetTo(b).y, "div2 relative to body y");
  } else {
    Expect.fail("Body is null");
  }
}
