<!DOCTYPE html>
<html>
<head>
<title>If namespace is SVG namespace and name is null then error must be thrown</title>
<meta name="author" title="Vasiliy Degtyarev" href="mailto:vasya@unipro.ru">
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="assert" content="If namespace is SVG namespace and name is null then error must be thrown">
<link rel="help" href="http://www.w3.org/TR/custom-elements/#registering-custom-elements">
<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>
test(function() {
    var doc = newHTMLDocument();
    var proto = Object.create(SVGElement.prototype);
    assert_throws('NotSupportedError', function() {
        doc.registerElement('x-svg-a', {prototype: proto});
    }, 'Exception should be thrown in case of attempt to register ' +
        'a custom element with SVG namespace and name is not specified');
}, 'Error should be thrown if namespace is SVG and local name is not specified');


test(function() {
    var doc = newHTMLDocument();
    var proto = Object.create(SVGElement.prototype);
    assert_throws('NotSupportedError', function() {
        doc.registerElement('x-svg-b', {prototype: proto, extends: null});
    }, 'Exception should be thrown in case of attempt to register ' +
        'a custom element with SVG namespace and name is null');
}, 'Error should be thrown if namespace is SVG and local name is null');
</script>
</body>
</html>
