<script>
var arr = new Array("var%20x=' ';",  // Space    %20
                    "var%20x='#';",  // #        %23
                    "var%20x='$';",  // $        %24
                    "var%20x='%';",  // %        %25
                    "var%20x='&';",  // &        %26
                    "var%20x='/';",  // /        %2F
                    "var%20x=':';",  // :        %3A
                    "var%20x=';';",  // ;        %3B
                    "var%20x='<';",  // <        %3C
                    "var%20x='=';",  // =        %3D
                    "var%20x='>';",  // >        %3E
                    "var%20x='?';",  // ?        %3F
                    "var%20x='@';",  // @        %40
                    "var%20x='[';",  // [        %5B
                    "var%20x='\\';",  // \        %5C
                    "var%20x=']';",  // ]        %5D
                    "var%20x='^';",  // ^        %5E
                    "var%20x='`';",  // '        %60
                    "var%20x='{';",  // {        %7B
                    "var%20x='|';",  // |        %7C
                    "var%20x='}';",  // }        %7D
                    "var%20x='~';"); // ~        %7E

    
function makeLinks()
{
    var str = "javascript:";
    var anchor, anchorText;
    for (key in arr)
    {
        anchor = document.createElement("a");
        anchor.setAttribute("href", str+arr[key]);
        anchorText = document.createTextNode(arr[key]);
        anchor.appendChild(anchorText);
        document.body.appendChild(anchor);
        document.body.appendChild(document.createElement("br"));
    }
}

</script>
<body onload="makeLinks();">
This test is for <a href="rdar://problem/5310312">rdar://problem/5310312</a> and can be run manually only.<br>
<a href="rdar://problem/5379908">rdar://problem/5379908</a> tracks the effort to enhance DRT to make this into a layout test.<br>
<br>
<b>Directions:</b>
<ol>
<li> drag each link below to the bookmarks bar to create bookmarks
<li> open the JavaScript console (in the debug menu)
<li> click on all the bookmarks you've just created
</ol>
<b>Expected results:</b>
no parse errors in the JavaScript console<br>
<br>
</body>