<!doctype html>
<meta charset=utf-8>
<title>Document.createAttribute</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=attributes.js></script>
<script src=productions.js></script>
<div id=log>
<script>
var xml_document;
setup(function() {
  xml_document = document.implementation.createDocument(null, null, null);
});

invalid_names.forEach(function(name) {
  test(function() {
    assert_throws("INVALID_CHARACTER_ERR", function() {
      document.createAttribute(name, "test");
    });
  }, "HTML document.createAttribute(" + format_value(name) + ") should throw");

  test(function() {
    assert_throws("INVALID_CHARACTER_ERR", function() {
      xml_document.createAttribute(name, "test");
    });
  }, "XML document.createAttribute(" + format_value(name) + ") should throw");
});

valid_names.forEach(name => {
  test(() => {
    let attr = document.createAttribute(name);
    attr_is(attr, "", name.toLowerCase(), null, null, name.toLowerCase());
  }, `HTML document.createAttribute(${format_value(name)})`);

  test(() => {
    let attr = xml_document.createAttribute(name);
    attr_is(attr, "", name, null, null, name);
  }, `XML document.createAttribute(${format_value(name)})`);
});

var tests = ["title", "TITLE", null, undefined];
tests.forEach(function(name) {
  test(function() {
    var attribute = document.createAttribute(name);
    attr_is(attribute, "", String(name).toLowerCase(), null, null, String(name).toLowerCase());
    assert_equals(attribute.ownerElement, null);
  }, "HTML document.createAttribute(" + format_value(name) + ")");

  test(function() {
    var attribute = xml_document.createAttribute(name);
    attr_is(attribute, "", String(name), null, null, String(name));
    assert_equals(attribute.ownerElement, null);
  }, "XML document.createAttribute(" + format_value(name) + ")");
});
</script>
