<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="CM" author="ED" status="accepted"
    version="$Revision: 1.6 $" testname="$RCSfile: types-dom-06-f.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/types.html#InterfaceSVGStringList">
      <p>
        This tests parts of the SVGStringList interface. Particularly it tests that
        strings that are taken from one SVGStringList and then inserted into another
        SVGStringList duplicates the value instead of removing the value from the
        first list when it's inserted into the second list.
      </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 has passed if there are three green rectangles visible and no red. Red is an indication that the test failed.
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: types-dom-06-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>
			<script type="application/ecmascript">
				function runtest()
				{
					try {
						var r1 = document.getElementById("r1");
						var r2 = document.getElementById("r2");
						var r3 = document.getElementById("r3");
						var i0 = r1.requiredFeatures.getItem(0);
						var i1 = r1.requiredFeatures.getItem(1);
						
						if(i0 != "http://www.w3.org/TR/SVG11/feature#Shape")
						{
							r1.removeAttribute("requiredFeatures");
							return;
						}
						if(i1 != "this.is.a.bogus.feature.string")
						{
							r1.removeAttribute("requiredFeatures");
							return;
						}
						if(r1.requiredFeatures.numberOfItems != 2)
						{
							r1.removeAttribute("requiredFeatures");
							return;
						}
						r2.requiredFeatures.appendItem(i1);
						if(r1.requiredFeatures.numberOfItems != 2)
						{
							r1.removeAttribute("requiredFeatures");
							return;
						}
						if(r2.requiredFeatures.numberOfItems != 1)
						{
							r1.removeAttribute("requiredFeatures");
							return;
						}
						r3.requiredFeatures.insertItemBefore(i0,0);
						if(r3.requiredFeatures.numberOfItems != 2)
						{
							r3.setAttribute("fill", "red");
							return;
						}
						if(r1.requiredFeatures.numberOfItems != 2)
						{
							r1.removeAttribute("requiredFeatures");
							return;
						}
					}
					catch(e)
					{
						var f = document.getElementById("fail");
						f.setAttribute("fill", "red");
					}				
				}
			</script>
		</defs>
		
		<text x="50%" y="70" text-anchor="middle">SVGStringList DOM</text>
		
		<!-- background images -->
		<g>
			<rect width="100" height="100" fill="lime" transform="translate(80 100)"/>
			<rect width="100" height="100" fill="lime" transform="translate(190 100)"/>
			<rect width="100" height="100" fill="red" transform="translate(300 100)"/>
		</g>
		
		<!-- tests -->
		<rect id="r1" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Shape this.is.a.bogus.feature.string" width="100" height="100" fill="red" transform="translate(100 100)"/>
		<rect id="r2" width="100" height="100" fill="red" transform="translate(190 100)"/>
		<rect id="r3" width="100" height="100" fill="lime" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Shape" transform="translate(300 100)"/>
		
		<rect id="fail" width="100%" height="100%" fill="none"/>
  </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>
