/*
 * 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 setAttributeNS(String namespaceURI, String qualifiedName,
 * String value)
 * Set the value of the attribute with the specified name and namespace, from
 * the current node.
 * @description Checks expected attributes values after setting
 */
import "dart:html";
import "../../../Utils/expect.dart";
import "../testcommon.dart";

main() {
  Element x = new Element.html(
      '<svg><foo xlink:href="1" xlink:custom="2"></foo></svg>',
      treeSanitizer: new NullTreeSanitizer());
  Element y = x.firstChild as Element;

  y.setAttributeNS(XlinkNamespace, 'href', 'foo');
  Expect.equals('foo', y.getAttributeNS(XlinkNamespace, 'href'),
      'change standard attribute');

  y.setAttributeNS(XlinkNamespace, 'custom', 'bar');
  Expect.equals('bar', y.getAttributeNS(XlinkNamespace, 'custom'),
      'change custom attribute');

  y.setAttributeNS(XlinkNamespace, 'new', 'one');
  Expect.equals(
      'one', y.getAttributeNS(XlinkNamespace, 'new'), 'add new attribute');
}
