<svg version="1.1" baseProfile="basic" 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">
  <!--======================================================================-->
  <!--=  SVG 1.1 2nd Edition Test Case                                     =-->
  <!--======================================================================-->
  <!--=  Copyright 2009 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="AN" author="AQ" status="accepted"
    version="$Revision: 1.3 $" testname="$RCSfile: struct-dom-12-b.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/struct.html#DOMInterfaces">
        <p>
          This test checks two properties from the SVGElementInstance interface, correspondingElement and correspondingUseElement
        </p>
    </d:testDescription>
    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
      <p>
        Click the grey rectangle on the right side.
      </p>
    </d:operatorScript>
    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
      <p>
        For the test to pass, both lines starting with "Test for" must turn to green
        when the grey rectangle on the right side is clicked, and the grey rectangle
        must also turn green.
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: struct-dom-12-b.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>
      <rect id="reference" x="240" y="1" width="239" height="358"/>
      <script type="text/ecmascript"><![CDATA[
        function test (event) {

        // get pointers to use and reference elements
        var reference = document.getElementById('reference');
        var use = document.getElementById('use');

        // initialize the pass count and colors
        var pass = 0;
        var colors = ['red', 'orange', 'green'];

        // event.target.correspondingUseElement test
        if (event.target.correspondingUseElement === use) {
        document.getElementById('assertion_1').setAttributeNS(null, 'fill', 'green');
        pass++;
        }

        // event.target.correspondingElement test
        if (event.target.correspondingElement === reference) {
        document.getElementById('assertion_2').setAttributeNS(null, 'fill', 'green');
        pass++;
        }

        // show the result
        use.setAttributeNS(null, 'fill', colors[pass]);
        }

      ]]></script>
    </defs>

    <use id="use" xlink:href="#reference" onclick="test(evt)" fill="grey"/>

    <text transform="translate(5,20)">Click on the grey rectangle to start</text>
    <text id="assertion_1" fill="red" transform="translate(5,80)">Test for correspondingUseElement</text>
    <text id="assertion_2" fill="red" transform="translate(5,110)">Test for correspondingElement</text>

  </g>
  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
    <text id="revision" x="10" y="340" stroke="none" fill="black">$Revision: 1.3 $</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>
