<!--
     Any copyright is dedicated to the Public Domain.
     http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
     xmlns:xlink="http://www.w3.org/1999/xlink">
  <title>Testing that dynamic changes to the element for a given ID are reflected in gradients</title>
  <style>
    .foo stop { stop-color:lime; }
  </style>
  <defs id="d">
    <linearGradient id="g" gradientUnits="objectBoundingBox" x2="0" y2="1">
      <stop stop-color="red" offset="0"/>
      <stop stop-color="red" offset="1"/>
    </linearGradient>
  </defs>
 
  <rect id="u1" width="100%" height="100%" fill="url(#g)"/>

  <script>
  function doTest() {
    document.getElementById("g").setAttribute("class", "foo");
    document.documentElement.removeAttribute("class");
    if (window.testRunner)
      testRunner.notifyDone();
  }

  if (window.testRunner)
    testRunner.waitUntilDone();

  setTimeout(doTest, 100);
  </script>
</svg>
