<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="ED" author="CM" status="accepted"
    version="$Revision: 1.6 $" testname="$RCSfile: types-dom-05-b.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 assigning a valid length or angle string to
        valueAsString on an SVGLength or SVGAngle will affect that object's
        unitType, and that assigning an invalid string will throw
        a DOMException with code SYNTAX_ERR.
      </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 the test is loaded, four rectangles are presented, indicating
        the result of passing a valid or invalid string to an
        SVGLength or SVGAngle object, as indicated.  Each rectangle
        will be black if the sub-test did not run, red if it
        failed or green if it passed.
      </p>
      <p>
        The test is passed if all four rectangles are green.
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: types-dom-05-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">

    <text x='10' y='30'>Test side effects of assigning to valueAsString</text>

    <rect id='r1' x='10' y='40' width='30' height='30'/>
    <rect id='r2' x='10' y='80' width='30' height='30'/>
    <rect id='r3' x='10' y='120' width='30' height='30'/>
    <rect id='r4' x='10' y='160' width='30' height='30'/>
    <g font-size='15'>
      <text x='50' y='60'>Valid string on SVGLength</text>
      <text x='50' y='100'>Invalid string on SVGLength</text>
      <text x='50' y='140'>Valid string on SVGAngle</text>
      <text x='50' y='180'>Invalid string on SVGAngle</text>
    </g>

    <circle id='c' r='1em' display='none'/>
    <marker id='m' orient='20rad' display='none'/>
    <script>
      var b,
          c = document.getElementById('c');
          m = document.getElementById('m');
      
      b = false;
      try {
        if (c.r.baseVal.unitType != 3) { /* SVGLength.SVG_LENGTHTYPE_EMS */
          throw 1;
        }
        c.r.baseVal.valueAsString = '2px';
        if (c.r.baseVal.unitType == 5) { /* SVGLength.SVG_LENGTHTYPE_PX */
          b = true;
        }
      } catch (e) {
      }
      document.getElementById('r1').setAttribute('fill', b ? 'green' : 'red');

      b = false;
      try {
        c.r.baseVal.valueAsString = 'rubbish';
      } catch (e) {
        b = e.code == 12; // SYNTAX_ERR
      }
      document.getElementById('r2').setAttribute('fill', b ? 'green' : 'red');

      b = false;
      try {
        if (m.orientAngle.baseVal.unitType != 3) { /* SVGAngle.SVG_ANGLETYPE_RAD */
          throw 1;
        }
        m.orientAngle.baseVal.valueAsString = '2grad';
        if (m.orientAngle.baseVal.unitType == 4) { /* SVGAngle.SVG_ANGLETYPE_GRAD */
          b = true;
        }
      } catch (e) {
      }
      document.getElementById('r3').setAttribute('fill', b ? 'green' : 'red');

      b = false;
      try {
        m.orientAngle.baseVal.valueAsString = 'rubbish';
      } catch (e) {
        b = e.code == 12; // SYNTAX_ERR
      }
      document.getElementById('r4').setAttribute('fill', b ? 'green' : 'red');
    </script>

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