/*
 * 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 Element insertAdjacentElement(String where, Element element)
 * Inserts element into the DOM at the specified location.
 * @description Checks insert for possible values of [where]
 */
import "dart:html";
import "../../../Utils/expect.dart";

main() {
  var div, x;
  IFrameElement? iframe;

  void init() {
    div = new Element.html('<div><iframe>Content</iframe></div>') as DivElement;
    iframe = div.firstChild;
    x = new PreElement();
  }

  init();
  iframe?.insertAdjacentElement('beforeBegin', x);
  Expect.equals('<div><pre></pre><iframe>Content</iframe></div>', div.outerHtml,
      'beforeBegin');

  init();
  iframe?.insertAdjacentElement('afterBegin', x);
  Expect.equals('<div><iframe><pre></pre>Content</iframe></div>', div.outerHtml,
      'afterBegin');

  init();
  iframe?.insertAdjacentElement('beforeEnd', x);
  Expect.equals('<div><iframe>Content<pre></pre></iframe></div>', div.outerHtml,
      'beforeEnd');

  init();
  iframe?.insertAdjacentElement('afterEnd', x);
  Expect.equals('<div><iframe>Content</iframe><pre></pre></div>', div.outerHtml,
      'afterEnd');
}
