<!DOCTYPE html>
<html>
<head>
<title>Chars allowed for custom element type </title>
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@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 'x-' + 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() {
    baseCharsSingle.testEach(composeName, checkValidName);
    baseCharsRanges.testEach(composeName, checkValidName);
}, 'Registering valid custom element types with base char');

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

test(function() {
    digitCharsRanges.testEach(composeName, checkValidName);
}, 'Registering valid custom element types with digit chars');

test(function() {
    (new CharsArray(['.', '-', '_'])).testEach(composeName, checkValidName)
}, 'Registering valid custom element types with characters \'.\', \'-\', \'_\'');

test(function() {
    combiningChars.testEach(composeName, checkValidName);
}, 'Registering valid custom element types with combining char');

test(function() {
    extenderChars.testEach(composeName, checkValidName);
}, 'Registering valid custom element types with extender char');
</script>
</body>
</html>
