<!DOCTYPE HtMl PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>DocType Case Insensitivity</title>
</head>
<body>
<script type="text/javascript" language="javascript">
<!--

if (window.testRunner)
    testRunner.dumpAsText();

if (document.doctype)
    {
    var output = document.doctype.name + ", " + document.doctype.publicId + ", " + document.doctype.systemId;
                
    var expected = "HtMl, -//W3C//DTD HTML 4.01 Transitional//EN, http://www.w3.org/TR/html4/loose.dtd";
    
    if (output == expected)
        {
        document.write("<span style='color:green'>");
        document.write("SUCCESS - This document has a doctype and each component has the correct case<br><br>");
        document.write("name = " + document.doctype.name + "<br>");
        document.write("publicId = " + document.doctype.publicId + "<br>");
        document.write("systemId = " + document.doctype.systemId);
        }
    else
        {
        document.write("<span style='color:red'>");
        document.write("FAILED - This document has a doctype, but one or more components has the wrong case<br><br>");
        document.write("name = " + document.doctype.name + " (should be HtMl)" + "<br>");
        document.write("publicId = " + document.doctype.publicId + " (should be -//W3C//DTD HTML 4.01 Transitional//EN)" + "<br>");
        document.write("systemId = " + document.doctype.systemId + " (should be http://www.w3.org/TR/html4/loose.dtd)");
        }
    }
else
    {
    document.write("FAILED - doctype is null even though there is a &lt;!DOCTYPE ...&gt; declaration");
    }
//-->
</script>

</body>
</html>
