| Index: LayoutTests/fast/canvas/script-tests/canvas-scroll-path-into-view.js
|
| diff --git a/LayoutTests/fast/canvas/script-tests/canvas-scroll-path-into-view.js b/LayoutTests/fast/canvas/script-tests/canvas-scroll-path-into-view.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8cf2a4e802e798ab5928ea9f9424638136f5aca8
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/canvas/script-tests/canvas-scroll-path-into-view.js
|
| @@ -0,0 +1,158 @@
|
| +var CShape = function(context, usePathObject) {
|
| + this._context = context;
|
| +
|
| + if (usePathObject)
|
| + this._path = new Path2D();
|
| + else
|
| + this._path = context;
|
| +};
|
| +
|
| +CShape.prototype.usePathObject = function() {
|
| + return this._path instanceof Path2D;
|
| +};
|
| +
|
| +CShape.prototype.createShape = function() {
|
| + // override
|
| +};
|
| +
|
| +CShape.prototype.draw = function() {
|
| + var context = this._context;
|
| + var path = this._path;
|
| +
|
| + context.beginPath();
|
| + this.createShape();
|
| + if (this.usePathObject())
|
| + context.stroke(path);
|
| + else
|
| + context.stroke();
|
| +};
|
| +
|
| +CShape.prototype.scroll = function() {
|
| + var context = this._context;
|
| + var path = this._path;
|
| +
|
| + if (this.usePathObject())
|
| + context.scrollPathIntoView(path);
|
| + else
|
| + context.scrollPathIntoView();
|
| +};
|
| +
|
| +var overrideShape = function(overrideMethod) {
|
| + var shape = function() {
|
| + CShape.apply(this, arguments);
|
| + };
|
| +
|
| + shape.prototype = new CShape;
|
| + shape.prototype.createShape = overrideMethod;
|
| + return shape;
|
| +};
|
| +
|
| +var CRect = overrideShape(function() {
|
| + var path = this._path;
|
| +
|
| + path.rect(-50, -50, 100, 100);
|
| +});
|
| +
|
| +var CCapsule = overrideShape(function() {
|
| + var path = this._path;
|
| +
|
| + path.arc(-35, 0, 50, Math.PI / 2, Math.PI * 1.5, false);
|
| + path.lineTo(35, -50);
|
| + path.arc(50, 0, 50, Math.PI * 1.5, Math.PI / 2, false);
|
| + path.lineTo(-35, 50);
|
| +});
|
| +
|
| +var CStar = overrideShape(function() {
|
| + var path = this._path;
|
| +
|
| + path.moveTo(0, -50);
|
| + path.lineTo(-15, -10);
|
| + path.lineTo(-50, -10);
|
| + path.lineTo(-15, 10);
|
| + path.lineTo(-35, 50);
|
| + path.lineTo(0, 20);
|
| + path.lineTo(35, 50);
|
| + path.lineTo(15, 10);
|
| + path.lineTo(50, -10);
|
| + path.lineTo(15, -10);
|
| + path.lineTo(0, -50);
|
| +});
|
| +
|
| +var CCurve = overrideShape(function() {
|
| + var path = this._path;
|
| +
|
| + path.moveTo(-50, -50);
|
| + path.bezierCurveTo(-50, 10, 50, 10, 50, 50);
|
| +});
|
| +
|
| +var container = document.querySelector("div[class='container']");
|
| +var canvas = document.querySelector("canvas");
|
| +var context = canvas.getContext("2d");
|
| +
|
| +function getRealValue(shape, degree, usePathObject) {
|
| + // reset scroll
|
| + container.scrollTop = 0;
|
| + container.scrollLeft = 0;
|
| +
|
| + // draw shape stroke on canvas
|
| + usePathObject = usePathObject == undefined || usePathObject == null ? false : true;
|
| + var s = new shape(context, usePathObject);
|
| +
|
| + context.clearRect(0, 0, 400, 400);
|
| + context.save();
|
| + context.translate(200, 200);
|
| + if (degree != 0 && degree != undefined && degree != null)
|
| + context.rotate(Math.PI / 180 * degree);
|
| + s.draw();
|
| + s.scroll();
|
| + context.stroke();
|
| + context.restore();
|
| +
|
| + return container.scrollTop;
|
| +}
|
| +
|
| +function scrollTest(shape, degree, usePathObject, expectedValue) {
|
| + var classes = [ "", "border", "padding", "padding border", "margin" ];
|
| + var offset = [ 0, 500, 500, 1000, 500 ];
|
| +
|
| + for (var i = 0; i < classes.length; i++) {
|
| + canvas.className = classes[i];
|
| + window.testValue = getRealValue(shape, degree, usePathObject);
|
| + shouldBe("testValue", String(expectedValue + offset[i]));
|
| + }
|
| +}
|
| +
|
| +description("Series of tests to ensure correct results of scrolling path into view on canvas");
|
| +debug("Test case 1: scrollPathIntoView() / CTM == identity");
|
| +scrollTest(CRect, 0, false, 150);
|
| +scrollTest(CCapsule, 0, false, 150);
|
| +scrollTest(CCurve, 0, false, 150);
|
| +scrollTest(CStar, 0, false, 150);
|
| +debug("");
|
| +
|
| +debug("Test case 2: scrollPathIntoView() / CTM != identity");
|
| +scrollTest(CRect, 20, false, 136);
|
| +scrollTest(CCapsule, 42, false, 126);
|
| +scrollTest(CCurve, 63, false, 133);
|
| +scrollTest(CStar, 40, false, 160);
|
| +debug("");
|
| +
|
| +debug("Test case 3: scrollPathIntoView(path2d) / CTM == identity");
|
| +scrollTest(CRect, 0, true, 150);
|
| +scrollTest(CCapsule, 0, true, 150);
|
| +scrollTest(CCurve, 0, true, 150);
|
| +scrollTest(CStar, 0, true, 150);
|
| +debug("");
|
| +
|
| +debug("Test case 4: scrollPathIntoView(path2d) / CTM != identity");
|
| +scrollTest(CRect, 20, true, 136);
|
| +scrollTest(CCapsule, 42, true, 126);
|
| +scrollTest(CCurve, 63, true, 133);
|
| +scrollTest(CStar, 40, true, 160);
|
| +debug("");
|
| +
|
| +debug("Test case 5: exceptions");
|
| +shouldThrow("context.scrollPathIntoView(null);");
|
| +shouldThrow("context.scrollPathIntoView([]);");
|
| +shouldThrow("context.scrollPathIntoView({});");
|
| +debug("");
|
|
|