/*
 * 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 Node clone(bool deep)
 * Returns a copy of this node.
 * If deep is true, then all of this node's children and decendents are copied
 * as well.
 * If deep is false, then only this node is copied.
 * @description Checks that document is deeply cloned if deep==false.
 * @needsreview issue #16409
 */
import "dart:html";
import "../../../Utils/expect.dart";

// checks than nodes are equal but not identical
void check(Node n1, Node n2) {
  Expect.isNotNull(n1);
  Expect.isNotNull(n2);
  Expect.isFalse(identical(n1, n2));
  Expect.equals(n1.toString(), n2.toString());
  var ch1 = n1.childNodes;
  var ch2 = n2.childNodes;
  Expect.equals(ch1.toString(), ch2.toString());
  for (int k = 0; k < ch1.length; k++) {
    check(ch1[k], ch2[k]);
  }
}

main() {
  Document cd = document.clone(true) as Document;
  Expect.isNotNull(cd, "document.clone(true) == null");
  check(document, cd);
}
