<svg id="svg-root" width="100%" height="100%"
  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink">
  <!--======================================================================-->
  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
  <!--=  Institute of Technology, European Research Consortium for         =-->
  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
  <!--=  All Rights Reserved.                                              =-->
  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
  <!--======================================================================-->
  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
    template-version="1.4" reviewer="CL" author="Microsoft" status="accepted"
    version="$Revision: 1.4 $" testname="$RCSfile: struct-svg-01-f.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/struct.html#SVGElement">
      <p>
        The default values for 'width' and 'height' are '100%' and 'x' and 'y' are '0' for the 'svg' element.
      </p>
    </d:testDescription>
    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
      <p>
        Empty 'svg' element is referenced via 'getElementById()'. From that reference, 'width', 'height', 'x', and 'y' are evaluated
        via 'baseVal.valueAsString'. A failure of one or more tests is indicated by the word 'FAIL' in red text.
      </p>
    </d:operatorScript>
    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
      <p>
        Test passes if there is no red visible on the page.
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: struct-svg-01-f.svg,v $</title>
  <defs>
    <font-face
      font-family="SVGFreeSansASCII"
      unicode-range="U+0-7F">
      <font-face-src>
        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
      </font-face-src>
    </font-face>
  </defs>
  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">

    <svg id="testSVG" />

    <text x="20" y="40">Initial value of the 'svg' tag's 'width' attribute: </text>
    <text x="20" y="60" id="widthResult" />

    <text x="20" y="100">Initial value of the 'svg' tag's 'height' attribute: </text>
    <text x="20" y="120" id="heightResult" />

    <text x="20" y="160">Initial value of the 'svg' tag's 'x' attribute: </text>
    <text x="20" y="180" id="xResult" />

    <text x="20" y="220">Initial value of the 'svg' tag's 'y' attribute: </text>
    <text x="20" y="240" id="yResult" />

    <text id="failText" x="350" y="350" font-size="50" fill="red">FAIL</text>

    <script type="text/javascript"><![CDATA[
        try
        {
            var testSVG = document.getElementById("testSVG");
            var pass = true;

            var initialWidth = testSVG.width.baseVal.valueAsString;
            document.getElementById("widthResult").appendChild(document.createTextNode(initialWidth));

            if("100%" != initialWidth)
            {
                pass = false;
            }

            var initialHeight = testSVG.height.baseVal.valueAsString;
            document.getElementById("heightResult").appendChild(document.createTextNode(initialHeight));

            if("100%" != initialHeight)
            {
                pass = false;
            }

            var initialX = testSVG.x.baseVal.valueAsString;
            document.getElementById("xResult").appendChild(document.createTextNode(initialX ));

            if("0" != initialX )
            {
                pass = false;
            }

            var initialY = testSVG.y.baseVal.valueAsString;
            document.getElementById("yResult").appendChild(document.createTextNode(initialY));

            if("0" != initialY )
            {
                pass = false;
            }

            if(pass)
            {
                document.getElementById("failText").setAttribute("display", "none");    
            }
        }
        catch(ex)
        {
          //alert('ERROR: ' + ex.message);
        }]]>
    </script>

  </g>
  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
    <text id="revision" x="10" y="340" stroke="none"
      fill="black">$Revision: 1.4 $</text>
  </g>
  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
  <!-- comment out this watermark once the test is approved -->
  <!--
  <g id="draft-watermark">
    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
  </g>
  -->
</svg>

