<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="test()">
  <!--======================================================================-->
  <!--=  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="[reviewer]" author="ED" status="empty"
    version="$Revision: 1.4 $" testname="$RCSfile: struct-dom-13-f.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/[chapter]#[section]">
      <p>
        Test for checkIntersection and getIntersectionList.
      </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 passes if 17 green rectangles are displayed and if the legend indicates PASSED.
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: struct-dom-13-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>
		<style type="text/css">
			.passed { fill: lime }
			.failed { fill: red }
			.result { font: 9px monospace; fill: black }
		</style>
	</defs>

	<g visibility="hidden">
		<circle id="c1" cx="40" cy="40" r="10" fill="blue" stroke="lime"/>
		<circle id="c2" cx="10" cy="50" r="10" fill="red" stroke="lime"/>
		<circle id="c3" cx="20" cy="20" r="20" fill="green" stroke="lime"/>
		<line id="l1" x1="5" y1="5" x2="40" y2="20" stroke="black"/>
		<line id="l2" x1="20" y1="20" x2="40" y2="30" stroke="red"/>

		<rect id="r1" x="10" y="10" width="50" height="50" fill="none" stroke="red"/>

		<circle id="c4" cx="80" cy="50" r="10" fill="yellow"/>
	</g>
	
	<script><![CDATA[
	var ypos = 100;
	
	function verify(str, result)
	{
		var g = document.createElementNS("http://www.w3.org/2000/svg", "g");
		var r = document.createElementNS("http://www.w3.org/2000/svg", "rect");
		var t = document.createElementNS("http://www.w3.org/2000/svg", "text");
		t.textContent = str + ": " + (result ? "PASSED" : "FAILED");
		t.setAttribute("class", "result");
		t.setAttribute("x", "10");
		t.setAttribute("y", "7");
		r.setAttribute("y", "1");
		r.setAttribute("width", "5");
		r.setAttribute("height", "5");
		g.setAttribute("class", result ? "passed" : "failed");
		g.appendChild(r);
		g.appendChild(t);
		g.setAttribute("transform", "translate(280 " + ypos + ")");
		ypos += 10;
		document.getElementById("test-body-content").appendChild(g);
	}
		
	function test()
	{
		var root = document.documentElement; //document.getElementById("test-root");
		var rect = root.createSVGRect();
		rect.x = 10;
		rect.y = 10;
		rect.width = 50;
		rect.height = 50;
		
		var tests = { "c1" : true, "c2" : true, "c3" : true, "l1" : true, "l2" : true, "r1" : true, "c4" : false };
		
		verify("checkIntersection", root.checkIntersection);
		
		if(root.checkIntersection)
		{
			for(var test in tests)
			{
				try 
				{
					var elm = document.getElementById(test);
					var result = root.checkIntersection(elm, rect);
				
					verify(test, result == tests[test]);
				} 
				catch(e)
				{
					verify(test, false);
				}
			}
		}
		
		verify("getIntersectionList", root.getIntersectionList);
		
		if(root.getIntersectionList)
		{
			var expected = [ "c1", "c2", "c3", "l1", "l2", "r1" ];
			try 
			{
				var list = root.getIntersectionList(rect, null);
				verify("call", true);
			}
			catch(e)
			{
				verify("call", false);
			}
			
			try
			{
				verify("length", expected.length == list.length);
			}
			catch(e)
			{
				verify("length", false);
			}
			
			for(var i = 0; i < expected.length; i++)
			{
				var elm = document.getElementById(expected[i]);
				try
				{
					verify("has " + expected[i], elm === list.item(i))
				}
				catch(e)
				{
					verify("has " + expected[i], false);
				}
			}
		}
	}

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