| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| |
| <body> |
| <h1>SVG 1.1 dynamic animation tests</h1> |
| |
| <svg id='outer-svg' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xml:space='preserve'> |
| <!-- sequential animations --> |
| <rect id='plain' x='0' y='0' width='32' height='32' fill='green'> |
| <animate id='plain-anim' attributeName='x' from='0' to='128' begin='0s' dur='4s' fill='freeze'/> |
| </rect> |
| |
| <!-- sequential animations --> |
| <rect id='sequential' x='0' y='32' width='32' height='32' fill='green'> |
| <animate attributeName='x' from='0' to='32' begin='0s' dur='1s' fill='freeze'/> |
| <animate attributeName='x' from='64' to='128' begin='3s' dur='1s' fill='freeze'/> |
| </rect> |
| |
| <!-- accumulating values --> |
| <rect id='accumulating' x='0' y='64' width='32' height='32' fill='green'> |
| <animate attributeName='x' values='0; 256; 128' additive='sum' accumulate='sum' begin='0s' dur='4s' fill='freeze'/> |
| </rect> |
| |
| <!-- repeating --> |
| <rect id='repeating' x='0' y='96' width='32' height='32' fill='green'> |
| <animate attributeName='x' values='0; 256; 128; 0; 128' begin='0s' dur='2s' fill='freeze' repeatCount='2'/> |
| </rect> |
| |
| <!-- nested --> |
| <svg id='nested-svg' x='0' y='128'> |
| <rect id='nested' x='0' y='0' width='32' height='32' fill='green'> |
| <animate attributeName='x' from='0' to='128' begin='0s' dur='4s' fill='freeze'/> |
| </rect> |
| </svg> |
| |
| <script> |
| var svg = document.getElementById('outer-svg'), |
| nestedsvg = document.getElementById('nested-svg'); |
| var tests, curIdx = 0; |
| |
| var plain = document.getElementById('plain'); |
| var sequential = document.getElementById('sequential'); |
| var accumulating = document.getElementById('accumulating'); |
| var repeating = document.getElementById('repeating'); |
| var nested = document.getElementById('nested'); |
| |
| function runTest() { |
| var test = tests[curIdx++]; |
| |
| svg.setCurrentTime(test.time[0]); |
| nestedsvg.setCurrentTime(test.time[1]); |
| |
| setTimeout(function() { |
| for (var attr in test.values) { |
| shouldBe(attr + '.animVal.value', String(test.values[attr])); |
| } |
| |
| if (curIdx == tests.length) { |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| else |
| runTest(); |
| }, 0); |
| } |
| |
| function executeTests() { |
| nestedsvg.pauseAnimations(); |
| svg.pauseAnimations(); |
| |
| tests = [ |
| // Test invalid values. |
| { time: ['tintin', NaN], values: { 'plain.x': 0, 'sequential.x': 0, 'accumulating.x': 0, 'repeating.x': 0, 'nested.x': 0 } }, |
| |
| // Test out-of-range values. |
| { time: [-1, -1], values: { 'plain.x': 0, 'sequential.x': 0, 'accumulating.x': 0, 'repeating.x': 0, 'nested.x': 0 } }, |
| { time: [ 5, 5], values: { 'plain.x': 128, 'sequential.x': 128, 'accumulating.x': 128, 'repeating.x': 128, 'nested.x': 128 } }, |
| |
| // Test changing time only for all elements. |
| { time: [0, 0], values: { 'plain.x': 0, 'sequential.x': 0, 'accumulating.x': 0, 'repeating.x': 0, 'nested.x': 0 } }, |
| { time: [1, 1], values: { 'plain.x': 32, 'sequential.x': 32, 'accumulating.x': 128, 'repeating.x': 128, 'nested.x': 32 } }, |
| { time: [2, 2], values: { 'plain.x': 64, 'sequential.x': 32, 'accumulating.x': 256, 'repeating.x': 0, 'nested.x': 64 } }, |
| { time: [3, 3], values: { 'plain.x': 96, 'sequential.x': 64, 'accumulating.x': 192, 'repeating.x': 128, 'nested.x': 96 } }, |
| { time: [4, 4], values: { 'plain.x': 128, 'sequential.x': 128, 'accumulating.x': 128, 'repeating.x': 128, 'nested.x': 128 } }, |
| |
| // Test changing time only for the nested svg element. |
| { time: [0, 0], values: { 'plain.x': 0, 'sequential.x': 0, 'accumulating.x': 0, 'repeating.x': 0, 'nested.x': 0 } }, |
| { time: [0, 1], values: { 'plain.x': 0, 'sequential.x': 0, 'accumulating.x': 0, 'repeating.x': 0, 'nested.x': 32 } }, |
| { time: [0, 2], values: { 'plain.x': 0, 'sequential.x': 0, 'accumulating.x': 0, 'repeating.x': 0, 'nested.x': 64 } }, |
| { time: [0, 3], values: { 'plain.x': 0, 'sequential.x': 0, 'accumulating.x': 0, 'repeating.x': 0, 'nested.x': 96 } }, |
| { time: [0, 4], values: { 'plain.x': 0, 'sequential.x': 0, 'accumulating.x': 0, 'repeating.x': 0, 'nested.x': 128 } }, |
| |
| // Test changing time only for the outer svg element. |
| { time: [0, 0], values: { 'plain.x': 0, 'sequential.x': 0, 'accumulating.x': 0, 'repeating.x': 0, 'nested.x': 0 } }, |
| { time: [1, 0], values: { 'plain.x': 32, 'sequential.x': 32, 'accumulating.x': 128, 'repeating.x': 128, 'nested.x': 0 } }, |
| { time: [2, 0], values: { 'plain.x': 64, 'sequential.x': 32, 'accumulating.x': 256, 'repeating.x': 0, 'nested.x': 0 } }, |
| { time: [3, 0], values: { 'plain.x': 96, 'sequential.x': 64, 'accumulating.x': 192, 'repeating.x': 128, 'nested.x': 0 } }, |
| { time: [4, 0], values: { 'plain.x': 128, 'sequential.x': 128, 'accumulating.x': 128, 'repeating.x': 128, 'nested.x': 0 } }, |
| ]; |
| |
| runTest(); |
| } |
| |
| // Begin test async |
| if (window.testRunner) { |
| testRunner.dumpAsText() |
| testRunner.waitUntilDone() |
| } |
| executeTests(); |
| </script> |
| </svg> |
| |
| <p id="description"></p> |
| <div id="console"></div> |
| </body> |
| </html> |
| |