<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.3" reviewer="CL" author="CM" status="accepted"
    version="$Revision: 1.8 $" testname="$RCSfile: types-dom-02-f.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/types.html#BasicDOMInterfaces">
      <p>
        This tests that the animVal properties that are objects
        are always distinct from their corresponding baseVal properties.
        This is tested for interfaces SVGAnimatedNumberList, SVGAnimatedLength,
        SVGAnimatedLengthList, SVGAnimatedAngle, SVGAnimatedRect,
        SVGAnimatedTransformList and SVGAnimatedPreserveAspectRatio.
      </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>
        Once loaded, the test shows 7 rectangles
        representing seven sub-tests reflecting
        the result of checking that an animVal object is
        not the same object as its corresponding baseVal object.
        Each rectangle will be either black to indicate that
        the sub-test wasn't run, red to indicate that the
        sub-test failed, and green to indicate that the
        sub-test passed.
      </p>
      <p>
        The test is passed if all 7 rectangles are green.
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: types-dom-02-f.svg,v $</title>
  <defs>
    <font-face
      font-family="SVGFreeSansASCII"
      unicode-range="U+0-7F">
      <font-face-src>
        <font-face-uri xlink:href="../custom/resources/SVGFreeSans.svg#ascii"/>
      </font-face-src>
    </font-face>
  </defs>
  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">

    <text x='210' y='55' text-anchor='end'>animVal != baseVal:</text>

    <g font-size='14' transform='translate(500)rotate(90)'>
      <rect id='r1b' x='40' y='60' width='20' height='20'/>
      <text x='70' y='75'>SVGAnimatedNumberList</text>
      <rect id='r2b' x='40' y='90' width='20' height='20'/>
      <text x='70' y='105'>SVGAnimatedLength</text>
      <rect id='r3b' x='40' y='120' width='20' height='20'/>
      <text x='70' y='135'>SVGAnimatedLengthList</text>
      <rect id='r4b' x='40' y='150' width='20' height='20'/>
      <text x='70' y='165'>SVGAnimatedAngle</text>
      <rect id='r5b' x='40' y='180' width='20' height='20'/>
      <text x='70' y='195'>SVGAnimatedRect</text>
      <rect id='r6b' x='40' y='210' width='20' height='20'/>
      <text x='70' y='225'>SVGAnimatedTransformList</text>
      <rect id='r7b' x='40' y='240' width='20' height='20'/>
      <text x='70' y='255'>SVGAnimatedPreserveAspectRatio</text>
    </g>

    <g display='none'>
      <text id='text' rotate='0 20 40'>abc</text>
      <circle id='circle' r='50'/>
      <marker id='marker' orient='1.5708rad'/>
      <svg id='svg' viewBox='10 20 30 40'/>
    </g>

    <script><![CDATA[
      function $(id) { return document.getElementById(id); }

      var text = $('text'),
          circle = $('circle'),
          marker = $('marker'),
          svg = $('svg');

      function expect_value(id, fn, value) {
        try {
          if (fn() === value) {
            $(id).setAttribute('fill', 'green');
            return;
          }
        } catch (e) {
        }
        $(id).setAttribute('fill', 'red');
      }

      // SVGAnimatedNumberList: rotate on text
      expect_value
        ('r1b',
         function() { return text.rotate.animVal != text.rotate.baseVal; },
         true);

      // SVGAnimatedLength: r on circle
      expect_value
        ('r2b',
         function() { return circle.r.animVal != text.rotate.baseVal; },
         true);

      // SVGAnimatedLengthList: x on text
      expect_value
        ('r3b',
         function() { return text.x.animVal != text.x.baseVal; },
         true);

      // SVGAnimatedAngle: orient on marker
      expect_value
        ('r4b',
         function() { return marker.orientAngle.animVal != marker.orientAngle.baseVal; },
         true);

      // SVGAnimatedRect: viewBox on svg
      expect_value
        ('r5b',
         function() { return svg.viewBox.animVal != svg.viewBox.baseVal; },
         true);

      // SVGAnimatedTransformList: transform on circle
      expect_value
        ('r6b',
         function() { return circle.transform.animVal != circle.transform.baseVal; },
         true);

      // SVGAnimatedPreserveAspectRatio: preserveAspectRatio on svg
      expect_value
        ('r7b',
         function() { return svg.preserveAspectRatio.animVal != svg.preserveAspectRatio.baseVal; },
         true);
    ]]></script>

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