// 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 that ArgumentError is thrown if parent is not an
/// offset parent or transitive offset parent.
/// @needsreview:
/// - warning "Removing disallowed attribute <IFRAME iframe="">"

import "dart:html";
import "../../../Utils/expect.dart";
import "../testcommon.dart";

main() {
  IFrameElement x = new Element.html('''<iframe  class="x">
         </iframe>''', treeSanitizer: new NullTreeSanitizer()) as IFrameElement;
  IFrameElement y = new Element.html('''<iframe  class="y">
         </iframe>''', treeSanitizer: new NullTreeSanitizer()) as IFrameElement;
  document.body?.append(x);
  document.body?.append(y);

  Expect.throws(() {
    y.offsetTo(x);
  }, (e) => e is ArgumentError);
}
