Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(143)

Unified Diff: LayoutTests/fast/canvas/script-tests/canvas-currentTransform.js

Issue 24233004: Support currentTransform in 2D Canvas. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase to upstream Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: LayoutTests/fast/canvas/script-tests/canvas-currentTransform.js
diff --git a/LayoutTests/fast/canvas/script-tests/canvas-currentTransform.js b/LayoutTests/fast/canvas/script-tests/canvas-currentTransform.js
new file mode 100644
index 0000000000000000000000000000000000000000..71b294cf71f650bb17b2861cdc682b26be35f0fb
--- /dev/null
+++ b/LayoutTests/fast/canvas/script-tests/canvas-currentTransform.js
@@ -0,0 +1,305 @@
+description("Series of tests to ensure correct behaviour of canvas.currentTransform");
+var ctx = document.createElement('canvas').getContext('2d');
+
+var matrix = ctx.currentTransform;
+
+debug("Check initial currentTransform values");
+shouldBe("matrix.a", "1");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "1");
+shouldBe("matrix.e", "0");
+shouldBe("matrix.f", "0");
+
+function setCurrentTransform(ctx, a, b, c, d, e, f)
+{
+ matrix.a = a;
+ matrix.b = b;
+ matrix.c = c;
+ matrix.d = d;
+ matrix.e = e;
+ matrix.f = f;
+ ctx.currentTransform = matrix;
+ matrix.a = NaN;
+ matrix.b = NaN;
+ matrix.c = NaN;
+ matrix.d = NaN;
+ matrix.e = NaN;
+ matrix.f = NaN;
+ matrix = ctx.currentTransform;
+ shouldBe("matrix.a", "" + a);
+ shouldBe("matrix.b", "" + b);
+ shouldBe("matrix.c", "" + c);
+ shouldBe("matrix.d", "" + d);
+ shouldBe("matrix.e", "" + e);
+ shouldBe("matrix.f", "" + f);
+}
+
+matrix.a = 2;
+debug("Changing matrix should not affect the CTM");
+shouldBe("ctx.currentTransform.a", "1");
+shouldBe("ctx.currentTransform.b", "0");
+shouldBe("ctx.currentTransform.c", "0");
+shouldBe("ctx.currentTransform.d", "1");
+shouldBe("ctx.currentTransform.e", "0");
+shouldBe("ctx.currentTransform.f", "0");
+
+debug("Reset the CTM to the initial matrix");
+ctx.beginPath();
+ctx.scale(0.5, 0.5);
+matrix = ctx.currentTransform;
+shouldBe("matrix.a", "0.5");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "0.5");
+shouldBe("matrix.e", "0");
+shouldBe("matrix.f", "0");
+setCurrentTransform(ctx, 1, 0, 0, 1, 0, 0);
+ctx.fillStyle = 'green';
+ctx.fillRect(0, 0, 100, 100);
+
+var imageData = ctx.getImageData(1, 1, 98, 98);
+var imgdata = imageData.data;
+shouldBe("imgdata[4]", "0");
+shouldBe("imgdata[5]", "128");
+shouldBe("imgdata[6]", "0");
+
+debug("currentTransform should not affect the current path");
+ctx.beginPath();
+ctx.rect(0,0,100,100);
+ctx.save();
+setCurrentTransform(ctx, 0.5, 0, 0, 0.5, 10, 10);
+ctx.fillStyle = 'red';
+ctx.fillRect(0, 0, 100, 100);
+ctx.restore();
+matrix = ctx.currentTransform;
+shouldBe("matrix.a", "1");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "1");
+shouldBe("matrix.e", "0");
+shouldBe("matrix.f", "0");
+ctx.fillStyle = 'green';
+ctx.fillRect(0, 0, 100, 100);
+
+imageData = ctx.getImageData(1, 1, 98, 98);
+imgdata = imageData.data;
+shouldBe("imgdata[4]", "0");
+shouldBe("imgdata[5]", "128");
+shouldBe("imgdata[6]", "0");
+
+debug("currentTransform should not affect the CTM outside of save() and restore()");
+ctx.beginPath();
+ctx.fillStyle = 'green';
+ctx.save();
+setCurrentTransform(ctx, 0.5, 0, 0, 0.5, 0, 0);
+ctx.fillStyle = 'red';
+ctx.fillRect(0, 0, 100, 100);
+ctx.restore();
+matrix = ctx.currentTransform;
+shouldBe("matrix.a", "1");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "1");
+shouldBe("matrix.e", "0");
+shouldBe("matrix.f", "0");
+ctx.fillRect(0, 0, 100, 100);
+
+imageData = ctx.getImageData(1, 1, 98, 98);
+imgdata = imageData.data;
+shouldBe("imgdata[4]", "0");
+shouldBe("imgdata[5]", "128");
+shouldBe("imgdata[6]", "0");
+
+debug("stop drawing on not-invertible CTM");
+ctx.beginPath();
+ctx.fillStyle = 'green';
+ctx.fillRect(0, 0, 100, 100);
+setCurrentTransform(ctx, 0, 0, 0, 0, 0, 0);
+ctx.fillStyle = 'red';
+ctx.fillRect(0, 0, 100, 100);
+
+imageData = ctx.getImageData(1, 1, 98, 98);
+imgdata = imageData.data;
+shouldBe("imgdata[4]", "0");
+shouldBe("imgdata[5]", "128");
+shouldBe("imgdata[6]", "0");
+
+debug("currentTransform with a not-invertible matrix should only stop the drawing up to the next restore()");
+ctx.beginPath();
+ctx.resetTransform();
+matrix = ctx.currentTransform;
+shouldBe("matrix.a", "1");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "1");
+shouldBe("matrix.e", "0");
+shouldBe("matrix.f", "0");
+ctx.save();
+setCurrentTransform(ctx, 0, 0, 0, 0, 0, 0);
+ctx.fillStyle = 'red';
+ctx.fillRect(0, 0, 100, 100);
+ctx.restore();
+matrix = ctx.currentTransform;
+shouldBe("matrix.a", "1");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "1");
+shouldBe("matrix.e", "0");
+shouldBe("matrix.f", "0");
+ctx.fillStyle = 'blue';
+ctx.fillRect(0, 0, 100, 100);
+
+imageData = ctx.getImageData(1, 1, 98, 98);
+imgdata = imageData.data;
+shouldBe("imgdata[4]", "0");
+shouldBe("imgdata[5]", "0");
+shouldBe("imgdata[6]", "255");
+
+debug("currentTransform should set transform although CTM is not-invertible");
+ctx.beginPath();
+ctx.fillStyle = 'red';
+ctx.fillRect(0, 0, 100, 100);
+setCurrentTransform(ctx, 0, 0, 0, 0, 0, 0);
+ctx.fillStyle = 'green';
+ctx.fillRect(0, 0, 100, 100);
+setCurrentTransform(ctx, 1, 0, 0, 1, 0, 0);
+ctx.fillStyle = 'blue';
+ctx.fillRect(0, 0, 100, 100);
+
+imageData = ctx.getImageData(1, 1, 98, 98);
+imgdata = imageData.data;
+shouldBe("imgdata[4]", "0");
+shouldBe("imgdata[5]", "0");
+shouldBe("imgdata[6]", "255");
+
+debug("Check assigning an invalid object throws exception as expected");
+shouldThrow("ctx.currentTransform = ctx", "'TypeError: Type error'");
+
+debug("Check handling non-finite values. see 2d.transformation.setTransform.nonfinite.html");
+ctx.fillStyle = 'red';
+ctx.fillRect(0, 0, 100, 100);
+
+function setCurrentTransformToNonfinite(ctx, a, b, c, d, e, f)
+{
+ matrix.a = a;
+ matrix.b = b;
+ matrix.c = c;
+ matrix.d = d;
+ matrix.e = e;
+ matrix.f = f;
+ ctx.currentTransform = matrix;
+ matrix.a = NaN;
+ matrix.b = NaN;
+ matrix.c = NaN;
+ matrix.d = NaN;
+ matrix.e = NaN;
+ matrix.f = NaN;
+ matrix = ctx.currentTransform;
+ shouldBe("matrix.a", "1");
+ shouldBe("matrix.b", "0");
+ shouldBe("matrix.c", "0");
+ shouldBe("matrix.d", "1");
+ shouldBe("matrix.e", "100");
+ shouldBe("matrix.f", "10");
+}
+
+ctx.translate(100, 10);
+matrix = ctx.currentTransform;
+shouldBe("matrix.a", "1");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "1");
+shouldBe("matrix.e", "100");
+shouldBe("matrix.f", "10");
+setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, -Infinity, 0, 0, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, NaN, 0, 0, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, -Infinity, 0, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, NaN, 0, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, -Infinity, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, NaN, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, Infinity, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, -Infinity, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, NaN, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, -Infinity, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, NaN, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, 0, -Infinity);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, 0, NaN);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, Infinity, 0, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, Infinity, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, Infinity, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, 0, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, 0, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, Infinity, 0, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, Infinity, 0, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, Infinity, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, Infinity, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, 0, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, 0, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, Infinity, 0, 0, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, Infinity, 0, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, Infinity, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, Infinity, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, Infinity, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, 0, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, 0, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, Infinity, 0, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, Infinity, 0, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, Infinity, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, Infinity, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, Infinity, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, 0, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, 0, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, Infinity, 0, 0, 0, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, 0, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, Infinity, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, Infinity, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, Infinity, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, Infinity, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, 0, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, 0, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, Infinity, 0, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, Infinity, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, Infinity, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, Infinity, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, Infinity, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, 0, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, 0, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, Infinity, 0, 0, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, Infinity, 0, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, Infinity, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, Infinity, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, Infinity, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, 0, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, 0, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, 0, Infinity, 0, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, Infinity, Infinity, 0);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, Infinity, Infinity, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, Infinity, 0, Infinity);
+setCurrentTransformToNonfinite(ctx, 0, 0, 0, 0, Infinity, Infinity);
+matrix = ctx.currentTransform;
+shouldBe("matrix.a", "1");
+shouldBe("matrix.b", "0");
+shouldBe("matrix.c", "0");
+shouldBe("matrix.d", "1");
+shouldBe("matrix.e", "100");
+shouldBe("matrix.f", "10");
+
+ctx.fillStyle = 'green';
+ctx.fillRect(-100, -10, 100, 100);
+
+imageData = ctx.getImageData(1, 1, 98, 98);
+imgdata = imageData.data;
+shouldBe("imgdata[4]", "0");
+shouldBe("imgdata[5]", "128");
+shouldBe("imgdata[6]", "0");

Powered by Google App Engine
This is Rietveld 408576698