<!DOCTYPE html>
<html>
<head>
<title>First char allowed for custom element type </title>
<meta name="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru">
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="assert" content="The custom element type identifies a custom element interface and is a sequence of characters that must match the NCName production">
<meta name="timeout" content="long">
<link rel="help" href="https://dvcs.w3.org/hg/webcomponents/raw-file/default/spec/custom/index.html#concepts">
<link rel="help" href="http://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../testcommon.js"></script>
<link rel="stylesheet" href="/resources/testharness.css">
</head>
<body>
<div id="log"></div>
<script>
function composeName(charCode) {
    return String.fromCharCode(charCode) + '-x' + charCode.toString(16);
}

// NCName definition from http://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName
// NCName     ::= (Letter | '_') (NCNameChar)*
// NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender
// Letter     ::= BaseChar | Ideographic

test(function() {
    testCharCode(getCharCode('_'), composeName, checkValidName);
}, 'Registering valid custom element name starting with \'_\' char');

test(function() {
    baseCharsSingle.testEach(composeName, checkValidName);
    baseCharsRanges.testEach(composeName, checkValidName);
}, 'Registering valid custom element name starting with base char');

test(function() {
    ideographicCharsSingle.testEach(composeName, checkValidName);
    ideographicCharsRanges.testEach(composeName, checkValidName);
}, 'Registering valid custom element name starting with ideographic char');

test(function() {
    (new CharsArray(['.', '-', ':', '+', '='])).testEach(composeName, checkInvalidName);
}, 'Registering custom element starting with invalid character (general) should fail');

test(function() {
    combiningChars.testEach(composeName, checkInvalidName);
}, 'Registering custom element starting with invalid character (combining char) should fail');

test(function() {
    extenderChars.testEach(composeName, checkInvalidName);
}, 'Registering custom element starting with invalid character (extender char) should fail');

test(function() {
    digitCharsRanges.testEach(composeName, checkInvalidName);
}, 'Registering custom element starting with invalid character (digit char) should fail');
</script>
</body>
</html>
