Index: third_party/WebKit/LayoutTests/animations/3d/transform-origin-vs-functions.html |
diff --git a/third_party/WebKit/LayoutTests/animations/3d/transform-origin-vs-functions.html b/third_party/WebKit/LayoutTests/animations/3d/transform-origin-vs-functions.html |
index 84ae53821177f80cb4df3bdee700f877638dd75c..98580b634f07eec0312ef188be07d21f00fda253 100644 |
--- a/third_party/WebKit/LayoutTests/animations/3d/transform-origin-vs-functions.html |
+++ b/third_party/WebKit/LayoutTests/animations/3d/transform-origin-vs-functions.html |
@@ -1,138 +1,76 @@ |
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
- "http://www.w3.org/TR/html4/strict.dtd"> |
-<html> |
- <head> |
- <meta http-equiv="Content-type" content="text/html; charset=utf-8"> |
- <title>transform-origin vs. Transform Functions</title> |
- <style type="text/css" media="screen"> |
- #a { |
- top: 0px; |
- left: 0px; |
- position: absolute; |
- perspective: 800; |
- width: 800px; |
- height: 600px; |
- } |
- #b1 { |
- top: 80px; |
- left: 300px; |
- width: 200px; |
- height: 200px; |
- position: absolute; |
- background-color: #282; |
- animation-duration: 2s; |
- animation-iteration-count: infinite; |
- animation-timing-function: linear; |
- transform-origin: center center 200px; |
- } |
- @keyframes b1 { |
- from { transform: rotateY(0deg); } |
- 5% { transform: rotateY(90deg); } |
- 20% { transform: rotateY(90deg); } |
- 50% { transform: rotateY(180deg); } |
- 75% { transform: rotateY(270deg); } |
- to { transform: rotateY(360deg); } |
- } |
- #b2 { |
- top: 320px; |
- left: 300px; |
- width: 200px; |
- height: 200px; |
- position: absolute; |
- background-color: #282; |
- animation-duration: 2s; |
- animation-iteration-count: infinite; |
- animation-timing-function: linear; |
- } |
- @keyframes b2 { |
- from { transform: translateZ(200px) rotateY(0deg) translateZ(-200px) } |
- 5% { transform: translateZ(200px) rotateY(90deg) translateZ(-200px) } |
- 20% { transform: translateZ(200px) rotateY(90deg) translateZ(-200px) } |
- 50% { transform: translateZ(200px) rotateY(180deg) translateZ(-200px) } |
- 75% { transform: translateZ(200px) rotateY(270deg) translateZ(-200px) } |
- to { transform: translateZ(200px) rotateY(360deg) translateZ(-200px) } |
- } |
- </style> |
- |
- <script type="text/javascript" charset="utf-8"> |
- if (window.testRunner) { |
- testRunner.dumpAsText(); |
- testRunner.waitUntilDone(); |
- } |
+<!DOCTYPE html> |
+<script src="../../resources/testharness.js"></script> |
+<script src="../../resources/testharnessreport.js"></script> |
+<script src="../resources/helpers.js"></script> |
+<style> |
+ #a { |
+ height: 600px; |
+ left: 0px; |
+ perspective: 800; |
+ position: absolute; |
+ top: 0px; |
+ width: 800px; |
+ } |
+ #b1 { |
+ animation-duration: 2s; |
+ animation-iteration-count: infinite; |
+ animation-name: b1; |
+ animation-timing-function: linear; |
+ background-color: #282; |
+ height: 200px; |
+ left: 300px; |
+ position: absolute; |
+ top: 80px; |
+ transform-origin: center center 200px; |
+ width: 200px; |
+ } |
+ @keyframes b1 { |
+ from { transform: rotateY(0deg); } |
+ 5% { transform: rotateY(90deg); } |
+ 20% { transform: rotateY(90deg); } |
+ 50% { transform: rotateY(180deg); } |
+ 75% { transform: rotateY(270deg); } |
+ to { transform: rotateY(360deg); } |
+ } |
+ #b2 { |
+ animation-duration: 2s; |
+ animation-iteration-count: infinite; |
+ animation-name: b2; |
+ animation-timing-function: linear; |
+ background-color: #282; |
+ height: 200px; |
+ left: 300px; |
+ position: absolute; |
+ top: 320px; |
+ width: 200px; |
+ } |
+ @keyframes b2 { |
+ from { transform: translateZ(200px) rotateY(0deg) translateZ(-200px) } |
+ 5% { transform: translateZ(200px) rotateY(90deg) translateZ(-200px) } |
+ 20% { transform: translateZ(200px) rotateY(90deg) translateZ(-200px) } |
+ 50% { transform: translateZ(200px) rotateY(180deg) translateZ(-200px) } |
+ 75% { transform: translateZ(200px) rotateY(270deg) translateZ(-200px) } |
+ to { transform: translateZ(200px) rotateY(360deg) translateZ(-200px) } |
+ } |
+</style> |
+<div id="a"> |
+ <div id="b1"> </div> |
+ <div style="transform:translateZ(-200px); transform-style:preserve-3d;"> |
+ <div id="b2"> </div> |
+ </div> |
+</div> |
+<script> |
+ 'use strict'; |
- resultEntries = []; |
+ test(function() { |
+ const epsilon = 0.0001; |
- const expected = { |
- "b1" : [ 0,0,-1,0, 0,1,0,0, 1,0,0,0, 0,0,0,1 ], |
- "b2" : [ 0,0,-1,0, 0,1,0,0, 1,0,0,0, -200,0,200,1 ] |
- }; |
+ b1.style.animationDelay = '-0.25s'; |
+ const expectedB1 = 'matrix3d(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1)'; |
+ assert_true(matricesApproxEqual(getComputedStyle(b1).transform, expectedB1, epsilon), 'b1'); |
- const tolerance = 0.2; |
- function isEqual(actual, desired) |
- { |
- var diff = Math.abs(actual - desired); |
- return diff <= tolerance; |
- } |
- |
- var numSnapshots = 0; |
- |
- function snapshot(id) |
- { |
- var e = document.getElementById(id); |
- var t = window.getComputedStyle(e).transform; |
- var a = t.split("("); |
- var array = a[1].split(","); |
- var pass = true; |
- for (i = 0; i < 16; ++i) { |
- var actual = parseFloat(array[i]); |
- var expect = expected[id][i]; |
- if (!isEqual(actual, expect)) { |
- resultEntries.push("FAIL(element '"+id+"' matrix["+i+"]' was:"+actual+", expected:"+expect+")<br>"); |
- pass = false; |
- } |
- } |
- |
- if (pass) |
- resultEntries.push("PASS(element '"+id+"' matches expected value)<br>"); |
- |
- numSnapshots++; |
- if (numSnapshots == 2) { |
- resultEntries.sort(); |
- document.getElementById('result').innerHTML = resultEntries.join(""); |
- if (window.testRunner) |
- testRunner.notifyDone(); |
- } |
- } |
- |
- function snapshotOnTimeout(id) { |
- setTimeout("snapshot('" + id + "')", 250); |
- } |
- |
- function startAnimation(id) |
- { |
- var element = document.getElementById(id); |
- element.addEventListener('animationstart', function() { |
- // delay to give hardware animations a chance to start |
- window.setTimeout("snapshotOnTimeout('" + id + "')", 0); |
- }, false); |
- element.style.animationName = id; |
- } |
- |
- function start() |
- { |
- startAnimation('b1'); |
- startAnimation('b2'); |
- } |
- |
- </script> |
- </head> |
- <body onload="start()"> |
- <div id="a"> |
- <div id="b1"> </div> |
- <div style="transform:translateZ(-200px); transform-style:preserve-3d;"> |
- <div id="b2"> </div> |
- </div> |
- </div> |
- </body> |
- <div id="result"> </div> |
-</html> |
+ b2.style.animationDelay = '-0.25s'; |
+ const expectedB2 = 'matrix3d(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -200, 0, 200, 1)'; |
+ assert_true(matricesApproxEqual(getComputedStyle(b2).transform, expectedB2, epsilon), 'b2'); |
+ }, "3D transform functions compose"); |
+</script> |