<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="../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='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>
