<?xml version="1.0" standalone="yes"?>
<svg xmlns = "http://www.w3.org/2000/svg">
  <foreignObject x="10" y="10" width="800" height="150">
    <body xmlns="http://www.w3.org/1999/xhtml" onload="start();">
      <script type="text/javascript">
        if (window.testRunner)
            testRunner.dumpAsText();

        function start()
        { 
          // select the span that's editable
          document.getElementById("insertlisthere").focus();

          // insert an ordered list into the span
          document.execCommand("insertorderedlist", false, null);
          log(document.getElementById("insertlisthere").outerHTML);
          log("PASS");
        }
        function log(str) {
            var li = document.createElement("li");
            li.appendChild(document.createTextNode(str));
            var console = document.getElementById("console");
            console.appendChild(li);
        }
      </script>
      <div contenteditable="true" id="insertlisthere">.</div>
      <ul id="console"></ul>
    </body>
  </foreignObject>
</svg>
