<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" onload="runTest()">
  <!--======================================================================-->
  <!--=  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="SVGWG" author="ED" status="accepted"
    version="$Revision: 1.4 $" testname="$RCSfile: struct-dom-14-f.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGElementInstance">
      <p>
        Test SVGElementInstance.childNodes.
      </p>
      <p>
        The test has an optional subtest that indicates whether SVGElementInstance.firstChild and
        SVGElementInstance.childNodes.item(0) are strictly equal. The status of this subtest is
        displayed by a circle in the middle of the testframe, it will be yellow if the objects are
        not strictly equal, and green if they are.
      </p>
    </d:testDescription>
    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
      <p>
        Run the test. No interaction required.
      </p>
    </d:operatorScript>
    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
      <p>
        The test is passed if there is a green rect visible,
        and there is a yellow or dark green circle in the middle. 
        If there's any red visible the test has failed. 
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: struct-dom-14-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">

    <defs>
      <g id="defsg1">
        <circle id="defscircle3" cx="80" cy="180" r="25"/>
        <circle id="defscircle4" cx="1000" cy="180" r="25"/>
        <use xlink:href="#defscircle4" transform="translate(-600, 0)"/>
      </g>
      <script>
        <![CDATA[
        function runTest()
        {
          try 
          {
            var use = document.getElementById("use1");
            var instanceroot = use.instanceRoot;
            
            if (instanceroot.firstChild.correspondingElement !== instanceroot.childNodes.item(0).correspondingElement)
              throw("failed");
            if (instanceroot.firstChild.nextSibling.correspondingElement !== instanceroot.childNodes.item(1).correspondingElement)
              throw("failed");
            if (instanceroot.lastChild.correspondingElement !== instanceroot.childNodes.item(instanceroot.childNodes.length-1).correspondingElement)
              throw("failed");

            // indicate test passed
            document.getElementById("status").setAttribute("fill", "lime");
              
            // This is an optional part of the test, which indicates whether SVGElementInstance(List) follows the normal DOM NodeList conventions and 
            // whether the returned objects are actually the same objects as those that the SVGElementInstance traversal attributes return.
            if (instanceroot.firstChild !== instanceroot.childNodes.item(0))
              throw("failed");
            if (instanceroot.firstChild.nextSibling !== instanceroot.childNodes.item(1))
              throw("failed");
            if (instanceroot.lastChild !== instanceroot.childNodes.item(instanceroot.childNodes.length-1))
              throw("failed");
            
            // indicate status of the optional part of the test 
            document.getElementById("optional").setAttribute("fill", "green");
          }
          catch(e)
          {
          }
        }
      ]]>
      </script>
    </defs>

    <use id="use1" xlink:href="#defsg1"/>

    <rect id="status" width="100%" height="100%" fill="red"/>
    <circle id="optional" cx="50%" cy="50%" r="10%" fill="yellow"/>

  </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>
