<script>

function test() {
    if (window.testRunner)
        testRunner.dumpAsText();

    var undefined;

    var features = [
        ["org.w3c.svg", "1.0"],
        ["org.w3c.svg.static", "1.0"],
        ["org.w3c.svg.animation", "1.0"],
        ["org.w3c.svg.dynamic", "1.0"],
        ["org.w3c.dom", "1.0"],
        ["org.w3c.dom.svg", "1.0"],
        ["org.w3c.dom.svg.static", "1.0"],
        ["org.w3c.dom.svg.animation", "1.0"],
        ["org.w3c.dom.svg.dynamic", "1.0"],
        ["org.w3c.svg.all", "1.0"],
        ["org.w3c.dom.svg.all", "1.0"],

        ["http://www.w3.org/TR/SVG11/feature#SVG", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#SVGDOM", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#SVG-static", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#SVGDOM-static", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#SVG-animation", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#SVGDOM-animation", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#SVG-dynamic", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#SVGDOM-dynamic", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#CoreAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Structure", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#ContainerAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#ConditionalProcessing", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Image", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Style", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#ViewportAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Shape", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Text", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#BasicText", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#PaintAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#BasicPaintAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#OpacityAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#GraphicsAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#BaseGraphicsAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Marker", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#ColorProfile", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Gradient", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Pattern", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Clip", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#BasicClip", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Mask", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Filter", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#BasicFilter", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#DocumentEventsAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#GraphicalEventsAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#AnimationEventsAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Cursor", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Hyperlinking", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#XlinkAttribute", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#ExternalResourcesRequired", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#View", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Script", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Animation", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Font", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#BasicFont", "1.1"],
        ["http://www.w3.org/TR/SVG11/feature#Extensibility", "1.1"]]

    for (var i = 0; i < features.length; ++i)
    {
        var item = features[i];
        if (item[1] == "omitted")
            var hasFeature = document.implementation.hasFeature(item[0]);
        else
            var hasFeature = document.implementation.hasFeature(item[0], item[1]);

        var item0String = item[0];
        if (typeof item0String == "string")
            item0String = '"' + item0String + '"';
        var item1String = item[1];
        if (typeof item1String == "string" && item[1] != "omitted")
            item1String = '"' + item1String + '"';
        var message = item0String + ', ' + item1String + ': ' + hasFeature;

        var div = document.createElement('div');
        div.innerHTML = message;
        document.body.appendChild(div);
    }
}

</script>

<body onload="test()">
</body>
