<!DOCTYPE html> <meta charset=utf-8> <title>Href - animate element tests</title> <script src='/resources/testharness.js'></script> <script src='/resources/testharnessreport.js'></script> <script src='testcommon.js'></script> <body> <div id='log'></div> <svg id='svg' width='100' height='100' viewBox='0 0 100 100'></svg> <script> 'use strict'; promise_test(function(t) { var svg = document.getElementById('svg'); var rect1 = createSVGElement(t, 'rect', svg, { 'width': '10px', 'height': '10px', 'id': 'rect1' }); var rect2 = createSVGElement(t, 'rect', svg, { 'width': '10px', 'height': '10px', 'id': 'rect2' }); var animate = createSVGElement(t, 'animate', svg, { 'attributeName': 'x', 'from': '0', 'to': '100', 'dur': '10s' }); animate.setAttribute('href', '#rect1'); animate.setAttributeNS(XLINKNS, 'xlink:href', '#rect2'); assert_equals(animate.targetElement, rect1); return waitEvent(animate, 'begin').then(function() { svg.pauseAnimations(); svg.setCurrentTime(5); assert_equals(rect1.x.animVal.value, 50); assert_equals(rect2.x.animVal.value, 0); }); }, 'Test for animate element when setting both href and xlink:href'); promise_test(function(t) { var svg = document.getElementById('svg'); var rect1 = createSVGElement(t, 'rect', svg, { 'width': '10px', 'height': '10px', 'id': 'rect1' }); var rect2 = createSVGElement(t, 'rect', svg, { 'width': '10px', 'height': '10px', 'id': 'rect2' }); var transform = createSVGElement(t, 'animateTransform', svg, { 'attributeName': 'transform', 'type': 'translate', 'from': '0', 'to': '100', 'dur': '10s' }); transform.setAttribute('href', '#rect1'); transform.setAttributeNS(XLINKNS, 'xlink:href', '#rect2'); assert_equals(transform.targetElement, rect1); return waitEvent(transform, 'begin').then(function() { svg.pauseAnimations(); svg.setCurrentTime(5); assert_equals(rect1.getCTM().e, 50); assert_equals(rect2.getCTM().e, 0); }); }, 'Test for animateTransform element when setting both href and xlink:href'); promise_test(function(t) { var svg = document.getElementById('svg'); var circle1 = createSVGElement(t, 'circle', svg, { 'cx': '50', 'cy': '50', 'r': '40', 'id': 'circle1' }); var circle2 = createSVGElement(t, 'circle', svg, { 'cx': '50', 'cy': '50', 'r': '40', 'id': 'circle2' }); var animate = createSVGElement(t, 'animate', svg, { 'attributeName': 'cx', 'from': '50', 'to': '150', 'dur': '10s' }); animate.setAttribute('href', '#circle1'); animate.setAttributeNS(XLINKNS, 'xlink:href', '#circle2'); assert_equals(animate.targetElement, circle1); return waitEvent(animate, 'begin').then(function() { svg.pauseAnimations(); svg.setCurrentTime(5); assert_equals(circle1.cx.animVal.value, 100); assert_equals(circle2.cx.animVal.value, 50); animate.removeAttribute('href'); assert_equals(animate.targetElement, circle2); assert_equals(circle1.cx.animVal.value, 50); assert_equals(circle2.cx.animVal.value, 100); }); }, 'Test for animate element when removing href but we still have xlink:href'); promise_test(function(t) { var svg = document.getElementById('svg'); var circle1 = createSVGElement(t, 'circle', svg, { 'cx': '50', 'cy': '50', 'r': '40', 'id': 'circle1' }); var circle2 = createSVGElement(t, 'circle', svg, { 'cx': '50', 'cy': '50', 'r': '40', 'id': 'circle2' }); var animate = createSVGElement(t, 'animate', svg, { 'attributeName': 'cx', 'from': '50', 'to': '150', 'dur': '10s' }); animate.setAttribute('href', '#circle1'); animate.setAttributeNS(XLINKNS, 'xlink:href', '#circle2'); assert_equals(animate.targetElement, circle1); return waitEvent(animate, 'begin').then(function() { svg.pauseAnimations(); svg.setCurrentTime(5); assert_equals(circle1.cx.animVal.value, 100); assert_equals(circle2.cx.animVal.value, 50); animate.removeAttributeNS(XLINKNS, 'href'); assert_equals(animate.targetElement, circle1); assert_equals(circle1.cx.animVal.value, 100); assert_equals(circle2.cx.animVal.value, 50); }); }, 'Test for animate element when removing xlink:href but we still have href'); </script> </body>