/*
 * 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.
 * MDN: Cloning a node copies all of its attributes and their values,
 * including intrinsic (in–line) listeners. 
 * @description Checks that attributes are copied
 */
import "dart:html";
import "../../../Utils/expect.dart";
import "../testcommon.dart";

main() {
  var x = new Element.html(
      '<div id="id1" foo="foo1">'
      '<pre id="id2" foo="foo2"></pre>text'
      '</div>',
      treeSanitizer: new NullTreeSanitizer());

  Element y = x.clone(false) as Element;
  Expect.mapEquals({'id': 'id1', 'foo': 'foo1'}, y.attributes, 'shallow copy');

  y = x.clone(true) as Element;
  Expect.mapEquals({'id': 'id1', 'foo': 'foo1'}, y.attributes, 'deep copy');

  var pre = y.querySelector('pre');
  Expect.mapEquals(
      {'id': 'id2', 'foo': 'foo2'}, pre?.attributes, 'deep copy, children');
}
