<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <html xmlns="http://www.w3.org/1999/xhtml" class="reftest-wait"> <head> <title>Valid, invalid, valid</title> <!-- PURPOSE: When manipulating the DOM tree it is quite likely that at some instant the document will be invalid such as during a chain of operations. SVG 1.1, section F.2 states: "Because of situations where a block of scripting changes might cause a given SVG document fragment to go into and out of error, error processing shall occur only at times when document presentation (e.g., rendering to the display device) is updated" A similar requirement exists regarding unsuspend / suspend redraw. This test checks that behaviour. OPERATION: There is a box and a circle. Initially the circle is animated and should move to the right. The animation element is moved to the rectangle. At this point the animation points to an invalid attribute. This attribute is then updated to be valid again. EXPECTED RESULTS: The circle is moved and then the rectangle is moved. There should not be any errors reported in the Javascript console or assertions etc. After the animation is removed from the circle it should reset (I think). Currently this hasn't been implemented (we need to make use of mLastCompositors table in nsSMILAnimationController), so this test is disabled for now. As the code stands now you'll normally get the correct result but under other conditions the circle moves a fraction before the call to pauseAnimations and this effect is not then cleared. --> <script> function moveAnimation() { var svg = document.getElementsByTagName('svg')[0]; svg.pauseAnimations(); svg.setCurrentTime(0.5); doMove(); svg.setCurrentTime(1.0); setTimeout('document.documentElement.removeAttribute("class")', 0); } function doMove() { var anim = document.getElementById('animation-to-move'); anim.parentNode.removeChild(anim); var rect = document.getElementById('target'); rect.appendChild(anim); // The animation is now in error anim.setAttribute('attributeName', 'x'); // Now it's fixed } </script> </head> <body onload="moveAnimation()"> <svg xmlns="http://www.w3.org/2000/svg" width="200px" height="200px"> <rect x="0" y="0" width="199" height="199" style="fill: none; stroke: black"/> <!-- rect to be animated second --> <rect x="-20" y="80" width="40" height="40" fill="royalblue" stroke="black" stroke-width="1" id="target"/> <!-- circle to be animated first --> <circle cx="0" cy="100" r="15" fill="skyblue" stroke="black" stroke-width="1"> <animate attributeName="cx" from="0" to="200" begin="0s" dur="2s" fill="freeze" id="animation-to-move"/> </circle> </svg> </body> </html>