<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="../../resources/js-test-pre.js"/>
</head>
<body>

<div id="console"/>

<div id="foo"/>
<div id="bar"/>

<svg id="svg-root" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <g id="test-body-content">
    <defs>
      <rect id="rect"/>
    </defs>
    <svg id="svgTree1">
      <rect id="subElem1"/>
    </svg>
    <svg>
      <rect id="subElem2"/>
    </svg>
    <svg id="svgTree3">
      <use xlink:href="#rect"/>
    </svg>
    <svg id="svgTree4">
      <rect id="foo"/>
    </svg>
    <svg id="svgTree5">
      <rect id="bar"/>
      <rect id="bar"/>
    </svg>
    <rect id="siblingElem1"/>
    <foreignObject id="foreign">
      <div id="nonsvg"/>
    </foreignObject>
  </g>
</svg>

<div id="foo"/>

<script><![CDATA[
  if (window.testRunner)
    testRunner.dumpAsText();
  var svgTree1 = document.getElementById("svgTree1");

  // Test support for "getElementById" on svgTree1
  var subElem1 = svgTree1.getElementById("subElem1");
  shouldBeTrue("null != subElem1");
  shouldBe(subElem1.id, "subElem1");

  // Test that "getElementById" on svgTree1 can't access children in other subtrees
  shouldBeTrue("null == svgTree1.getElementById('subElem2')");

  // Test that "getElementById" on svgTree1 can't access elements that are not its children
  shouldBeTrue("null == svgTree1.getElementById('siblingElem1')");

  // Test that an element outside of the subtree referenced through <use> is not found
  var svgTree3 = document.getElementById("svgTree3");
  shouldBeTrue("null == svgTree3.getElementById('rect')");

  // Test that the <svg> being searched on is not found itself
  shouldBeTrue("null == svgTree3.getElementById('svgTree3')");

  // Test that search in svg returns the id from the subtree, not the div with the same id
  var root = document.getElementById("svg-root");
  var svgTree4 = document.getElementById("svgTree4");
  shouldBeTrue("svgTree4.firstChild.nextSibling == root.getElementById('foo')");

  // Test that search in svg subtree returns the first of the duplicates, not the div with the same id
  var svgTree5 = document.getElementById("svgTree5");
  var bar = root.getElementById("bar");
  shouldBeTrue("svgTree5.firstChild.nextSibling == bar");

  // Test that search in svg subtree returns the first of the duplicates
  shouldBeTrue("svgTree5.firstChild.nextSibling == svgTree5.getElementById('bar')");

  // Test that non SVG content can be found in the svg subtree
  var nonsvg = root.getElementById("nonsvg");
  var foreign = root.getElementById("foreign");
  shouldBeTrue("foreign.firstChild.nextSibling == nonsvg");
]]></script>

</body>
</html>
