/*
 * 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 void remove()
 * Removes this node from the DOM
 * @description Checks expected dom after removal
 */
import "dart:html";
import "../../../Utils/expect.dart";

main() {
  //-------
  var x = new Element.html('<span><div></div></span>');
  var div = x.firstChild;

  div?.remove();
  Expect.isNull(x.firstChild, 'removal of the only child');

  //-------
  x = new Element.html('<span><div></div><pre></pre></span>');
  div = x.firstChild;

  div?.remove();
  Expect.isTrue(x.firstChild is PreElement, 'removal of one of children');

  //-------
  x = new Element.html('<span><div><h1></h1></div><pre></pre></span>');
  div = x.firstChild;

  div?.remove();
  Expect.isTrue(x.firstChild is PreElement, 'removal of subtree');
}
