<!--
     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">
  <title>Test invalidation of very small objects that have been scaled up</title>
  <!--
    From https://bugzilla.mozilla.org/show_bug.cgi?id=465996

    The very small graphic that has been scaled up to be visible should
    invalidate correctly when moved.
  -->
  <script type="text/javascript">//<![CDATA[

function move_small_object()
{
  document.getElementById('circle').setAttribute("transform", "translate(-.2, -.2)");
  document.documentElement.removeAttribute('class');
  if (window.testRunner)
    testRunner.notifyDone();
}

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

setTimeout(move_small_object, 100);

  //]]></script>
  <rect width="100%" height="100%" fill="lime"/>
  <g transform="scale(300, 300)">
    <circle id="circle" cx=".05" cy=".05" r=".05"
            fill="red" stroke="black" stroke-width="0.005" />
  </g>
</svg>
