<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
      <g id="g" stroke="orange" stroke-width="2px">
        <rect id="rect" width="100" height="100" fill="blue" />
      </g>
    </svg>
    <div id="log"></div>
    <script><![CDATA[
      if (window.layoutTestController)
          layoutTestController.dumpAsText();

      function debugLog(s) {
        var logDiv = document.getElementById("log");
        logDiv.appendChild(document.createTextNode(s));
        logDiv.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "br"));
      }

      function printStyle(elementId) {
        var element = document.getElementById(elementId);
        var style = document.defaultView.getComputedStyle(element);
      
        for (var x = 0; x < style.length; x++) {
          var name = style.item(x);
          var value = style.getPropertyValue(name);
          var cssValue = style.getPropertyCSSValue(name);
  
          debugLog(elementId + ": style.getPropertyValue(" + name + ") : " + value);
          debugLog(elementId + ": style.getPropertyCSSValue(" + name + ") : " + cssValue);
        }
      }
      
      printStyle("rect");
      printStyle("g");
    ]]></script>
  </body>
</html>
