| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>Href - mpath 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 path1 = createSVGElement(t, 'path', svg, |
| { 'id': 'MyPath1', 'd': 'M 0,0 L 100,0' }); |
| var path2 = createSVGElement(t, 'path', svg, |
| { 'id': 'MyPath2', 'd': 'M 0,0 L 0,100' }); |
| var rect = createSVGElement(t, 'rect', svg, |
| { 'width': '10px', 'height': '10px' }); |
| var animateMotion = createSVGElement(t, 'animateMotion', rect, |
| { 'dur': '10s' }); |
| var mpath = createSVGElement(t, 'mpath', animateMotion); |
| mpath.setAttribute('href', '#MyPath1'); |
| mpath.setAttributeNS(XLINKNS, 'xlink:href', '#MyPath2'); |
| assert_equals(mpath.href.baseVal, '#MyPath1'); |
| |
| return waitEvent(animateMotion, 'begin').then(function() { |
| svg.pauseAnimations(); |
| svg.setCurrentTime(1); |
| var ctm = rect.getCTM(); |
| assert_equals(ctm.e, 10); |
| assert_equals(ctm.f, 0); |
| |
| svg.setCurrentTime(5); |
| ctm = rect.getCTM(); |
| assert_equals(ctm.e, 50); |
| assert_equals(ctm.f, 0); |
| }); |
| }, 'Test for mpath when setting both href and xlink:href'); |
| |
| promise_test(function(t) { |
| var svg = document.getElementById('svg'); |
| var path1 = createSVGElement(t, 'path', svg, |
| { 'id': 'MyPath1', 'd': 'M 0,0 L 100,0' }); |
| var path2 = createSVGElement(t, 'path', svg, |
| { 'id': 'MyPath2', 'd': 'M 0,0 L 0,100' }); |
| var rect = createSVGElement(t, 'rect', svg, |
| { 'width': '10px', 'height': '10px' }); |
| var animateMotion = createSVGElement(t, 'animateMotion', rect, |
| { 'dur': '10s' }); |
| var mpath = createSVGElement(t, 'mpath', animateMotion); |
| mpath.setAttribute('href', '#MyPath1'); |
| mpath.setAttributeNS(XLINKNS, 'xlink:href', '#MyPath2'); |
| |
| return waitEvent(animateMotion, 'begin').then(function() { |
| svg.pauseAnimations(); |
| svg.setCurrentTime(5); |
| var ctm = rect.getCTM(); |
| assert_equals(ctm.e, 50); |
| assert_equals(ctm.f, 0); |
| |
| mpath.removeAttribute('href'); |
| assert_equals(mpath.href.baseVal, '#MyPath2'); |
| |
| ctm = rect.getCTM(); |
| assert_equals(ctm.e, 0); |
| assert_equals(ctm.f, 50); |
| }); |
| }, 'Test for mpath when removing href but we still have xlink:href'); |
| |
| promise_test(function(t) { |
| var svg = document.getElementById('svg'); |
| var path1 = createSVGElement(t, 'path', svg, |
| { 'id': 'MyPath1', 'd': 'M 0,0 L 100,0' }); |
| var path2 = createSVGElement(t, 'path', svg, |
| { 'id': 'MyPath2', 'd': 'M 0,0 L 0,100' }); |
| var rect = createSVGElement(t, 'rect', svg, |
| { 'width': '10px', 'height': '10px' }); |
| var animateMotion = createSVGElement(t, 'animateMotion', rect, |
| { 'dur': '10s' }); |
| var mpath = createSVGElement(t, 'mpath', animateMotion); |
| mpath.setAttribute('href', '#MyPath1'); |
| mpath.setAttributeNS(XLINKNS, 'xlink:href', '#MyPath2'); |
| |
| return waitEvent(animateMotion, 'begin').then(function() { |
| svg.pauseAnimations(); |
| svg.setCurrentTime(5); |
| var ctm = rect.getCTM(); |
| assert_equals(ctm.e, 50); |
| assert_equals(ctm.f, 0); |
| |
| mpath.removeAttributeNS(XLINKNS, 'href'); |
| assert_equals(mpath.href.baseVal, '#MyPath1'); |
| |
| ctm = rect.getCTM(); |
| assert_equals(ctm.e, 50); |
| assert_equals(ctm.f, 0); |
| }); |
| }, 'Test for mpath when removing xlink:href but we still have href'); |
| |
| </script> |
| </body> |