| Index: third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-flipY.html
|
| diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-flipY.html b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-flipY.html
|
| deleted file mode 100644
|
| index de9d21c32223cb41cbe8c255e08034f2be62936c..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-flipY.html
|
| +++ /dev/null
|
| @@ -1,553 +0,0 @@
|
| -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
| -<html>
|
| -<head>
|
| -<script src="../../resources/js-test.js"></script>
|
| -</head>
|
| -<body>
|
| -<script>
|
| -
|
| -description("Ensure correct behavior of drawImage with ImageBitmaps along with flipY option.");
|
| -window.jsTestIsAsync = true;
|
| -
|
| -function jsWrapperClass(node)
|
| -{
|
| - // returns the ClassName of node
|
| - if (!node)
|
| - return "[null]";
|
| - var string = Object.prototype.toString.apply(node);
|
| -
|
| - // string will be of the form [object ClassName]
|
| - return string.substr(8, string.length - 9);
|
| -}
|
| -
|
| -function shouldBeType(expression, className)
|
| -{
|
| - shouldBe("jsWrapperClass(" + expression + ")", "'" + className + "'");
|
| -}
|
| -
|
| -function shouldNotBeCalled() {
|
| - testFailed("createImageBitmap promise rejected.");
|
| - finishJSTest();
|
| -}
|
| -
|
| -function shouldBeRed(x, y) {
|
| - d = ctx.getImageData(x, y, 1, 1).data;
|
| - if (d[0] == 255 && d[1] == 0 && d[2] == 0 && d[3] == 255) {
|
| - testPassed("This pixel is red.");
|
| - return;
|
| - }
|
| - testFailed("This pixel is expected to be red, but it is actually " + d);
|
| -}
|
| -
|
| -function shouldBeGreen(x, y) {
|
| - d = ctx.getImageData(x, y, 1, 1).data;
|
| - if (d[0] == 0 && d[1] == 255 && d[2] == 0 && d[3] == 255) {
|
| - testPassed("This pixel is green.");
|
| - return;
|
| - }
|
| - testFailed("This pixel is expected to be green, but it is actually " + d);
|
| -}
|
| -
|
| -function shouldBeBlue(x, y) {
|
| - d = ctx.getImageData(x, y, 1, 1).data;
|
| - if (d[0] == 0 && d[1] == 0 && d[2] == 255 && d[3] == 255) {
|
| - testPassed("This pixel is blue.");
|
| - return;
|
| - }
|
| - testFailed("This pixel is expected to be blue, but it is actually " + d);
|
| -}
|
| -
|
| -function shouldBeBlack(x, y) {
|
| - d = ctx.getImageData(x, y, 1, 1).data;
|
| - if (d[0] == 0 && d[1] == 0 && d[2] == 0 && d[3] == 255) {
|
| - testPassed("This pixel is black.");
|
| - return;
|
| - }
|
| - testFailed("This pixel is expected to be black, but it is actually " + d);
|
| -}
|
| -
|
| -function shouldBeClear(x, y) {
|
| - // should be transparent black pixels
|
| - d = ctx.getImageData(x, y, 1, 1).data;
|
| - if (d[0] == 0 && d[1] == 0 && d[2] == 0 && d[3] == 0) {
|
| - testPassed("This pixel is transparent black.");
|
| - return;
|
| - }
|
| - testFailed("This pixel is expected to be transparent black, but it is actually " + d);
|
| -}
|
| -
|
| -function drawPattern(ctx) {
|
| - // Draw a four-color pattern
|
| - ctx.beginPath();
|
| - ctx.fillStyle = "rgb(255, 0, 0)";
|
| - ctx.fillRect(0, 0, 10, 10);
|
| - ctx.fillStyle = "rgb(0, 255, 0)";
|
| - ctx.fillRect(10, 0, 10, 10);
|
| - ctx.fillStyle = "rgb(0, 0, 255)";
|
| - ctx.fillRect(0, 10, 10, 10);
|
| - ctx.fillStyle = "rgb(0, 0, 0)";
|
| - ctx.fillRect(10, 10, 10, 10);
|
| -}
|
| -
|
| -function clearContext(context) {
|
| - context.clearRect(0, 0, 50, 50);
|
| -}
|
| -
|
| -var bitmap;
|
| -var image;
|
| -var testBitmap; // this is an ImageBitmap that is uncropped. We use this to test createImageBitmap(testBitmap)
|
| -var d; // image.imageData
|
| -var elements;
|
| -var options;
|
| -
|
| -var imageWidth = 20;
|
| -var imageHeight = 20;
|
| -
|
| -// Draw to an auxillary canvas.
|
| -var aCanvas = document.createElement("canvas");
|
| -aCanvas.width = imageWidth;
|
| -aCanvas.height = imageHeight;
|
| -var aCtx = aCanvas.getContext("2d");
|
| -drawPattern(aCtx);
|
| -
|
| -var canvas = document.createElement("canvas");
|
| -canvas.setAttribute("width", "50");
|
| -canvas.setAttribute("height", "50");
|
| -var ctx = canvas.getContext("2d");
|
| -
|
| -image = new Image();
|
| -image.onload = imageLoaded;
|
| -image.src = aCanvas.toDataURL();
|
| -
|
| -var imageLoaded = false;
|
| -var imageBitmapLoaded = false;
|
| -var blobLoaded = false;
|
| -
|
| -function imageLoaded() {
|
| - createImageBitmap(image).then(imageBitmapLoadedCallback, shouldNotBeCalled);
|
| - d = aCtx.getImageData(0, 0, 20, 20);
|
| - imageLoaded = true;
|
| - loaded();
|
| -}
|
| -
|
| -function imageBitmapLoadedCallback(imageBitmap) {
|
| - testBitmap = imageBitmap;
|
| -
|
| - shouldBe("testBitmap.width", "imageWidth");
|
| - shouldBe("testBitmap.height", "imageHeight");
|
| -
|
| - // width and height are readonly
|
| - testBitmap.width = 42;
|
| - testBitmap.height = 42;
|
| - shouldBe("testBitmap.width", "imageWidth");
|
| - shouldBe("testBitmap.height", "imageHeight");
|
| -
|
| - imageBitmapLoaded = true;
|
| - loaded();
|
| -}
|
| -
|
| -var xhr = new XMLHttpRequest();
|
| -xhr.open("GET", 'resources/pattern.png');
|
| -xhr.responseType = 'blob';
|
| -xhr.send();
|
| -xhr.onload = function() {
|
| - blob = xhr.response;
|
| - blobLoaded = true;
|
| - loaded();
|
| -}
|
| -
|
| -function loaded() {
|
| - if (imageLoaded && imageBitmapLoaded && blobLoaded) {
|
| - // check all elements and all options
|
| - elements = [image, aCanvas, d, testBitmap, blob];
|
| - options = ["none", "flipY"];
|
| - // elements = [image, aCanvas, d, testBitmap, blob];
|
| - // wait for callback to finish before each check to ensure synchronous behavior
|
| - nextCheck(0, 0);
|
| - }
|
| -}
|
| -
|
| -function nextCheck(elementIndex, optionIndex) {
|
| - if (elementIndex == elements.length) {
|
| - finishJSTest();
|
| - return;
|
| - }
|
| - var element = elements[elementIndex];
|
| - imageBitmaps = {};
|
| - debug("Checking " + jsWrapperClass(element) + " with imageOrientation: " + options[optionIndex] + ".");
|
| - var p1 = createImageBitmap(element, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.noCrop = image });
|
| - var p2 = createImageBitmap(element, 0, 0, 10, 10, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.crop = image });
|
| - var p3 = createImageBitmap(element, 5, 5, 10, 10, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.cropCenter = image });
|
| - var p4 = createImageBitmap(element, 10, 10, 10, 10, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.cropRight = image });
|
| - var p5 = createImageBitmap(element, -10, -10, 60, 60, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.overCrop = image });
|
| - var p6 = createImageBitmap(element, 10, 10, 50, 50, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.overCropRight = image });
|
| - var p7 = createImageBitmap(element, 10, 10, -10, -10, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.negativeCrop = image });
|
| - var p8 = createImageBitmap(element, -30, -30, 30, 30, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.empty = image });
|
| - var p9 = createImageBitmap(element, 40, 30, 30, 30, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.emptyTwo = image });
|
| - Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9]).then(function() {
|
| - checkNoCrop(imageBitmaps.noCrop, options[optionIndex]);
|
| - checkCrop(imageBitmaps.crop, options[optionIndex]);
|
| - checkCropCenter(imageBitmaps.cropCenter, options[optionIndex]);
|
| - checkCropRight(imageBitmaps.cropRight, options[optionIndex]);
|
| - checkOverCrop(imageBitmaps.overCrop, options[optionIndex]);
|
| - checkOverCropRight(imageBitmaps.overCropRight, options[optionIndex]);
|
| - checkCrop(imageBitmaps.negativeCrop, options[optionIndex]);
|
| - checkEmpty(imageBitmaps.empty, options[optionIndex]);
|
| - checkEmpty(imageBitmaps.emptyTwo, options[optionIndex]);
|
| - if (optionIndex == 3)
|
| - nextCheck(elementIndex + 1, 0);
|
| - else
|
| - nextCheck(elementIndex, optionIndex + 1);
|
| - }, shouldNotBeCalled);
|
| -}
|
| -
|
| -function checkNoCrop(imageBitmap, option) {
|
| - debug("Check no crop.");
|
| - bitmap = imageBitmap;
|
| - shouldBeType("bitmap", "ImageBitmap");
|
| - shouldBe("bitmap.width", "imageWidth");
|
| - shouldBe("bitmap.height", "imageHeight");
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeBlue(9, 9);
|
| - shouldBeBlack(11, 9);
|
| - shouldBeRed(9, 11);
|
| - shouldBeGreen(11, 11);
|
| - shouldBeGreen(19, 19);
|
| - shouldBeClear(1, 21);
|
| - shouldBeClear(21, 1);
|
| - shouldBeClear(21, 21);
|
| - } else {
|
| - shouldBeRed(9, 9);
|
| - shouldBeGreen(11, 9);
|
| - shouldBeBlue(9, 11);
|
| - shouldBeBlack(11, 11);
|
| - shouldBeBlack(19, 19);
|
| - shouldBeClear(1, 21);
|
| - shouldBeClear(21, 1);
|
| - shouldBeClear(21, 21);
|
| - }
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0, 10, 10);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeBlue(4, 4);
|
| - shouldBeBlack(6, 4);
|
| - shouldBeRed(4, 6);
|
| - shouldBeGreen(6, 6);
|
| - shouldBeGreen(9, 9);
|
| - shouldBeClear(1, 11);
|
| - shouldBeClear(11, 1);
|
| - shouldBeClear(11, 11);
|
| - } else {
|
| - shouldBeRed(4, 4);
|
| - shouldBeGreen(6, 4);
|
| - shouldBeBlue(4, 6);
|
| - shouldBeBlack(6, 6);
|
| - shouldBeBlack(9, 9);
|
| - shouldBeClear(1, 11);
|
| - shouldBeClear(11, 1);
|
| - shouldBeClear(11, 11);
|
| - }
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 10, 10, 10, 10);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeBlue(14, 14);
|
| - shouldBeBlack(16, 14);
|
| - shouldBeRed(14, 16);
|
| - shouldBeGreen(16, 16);
|
| - shouldBeGreen(19, 19);
|
| - shouldBeClear(11, 21);
|
| - shouldBeClear(21, 11);
|
| - shouldBeClear(21, 21);
|
| - } else {
|
| - shouldBeRed(14, 14);
|
| - shouldBeGreen(16, 14);
|
| - shouldBeBlue(14, 16);
|
| - shouldBeBlack(16, 16);
|
| - shouldBeBlack(19, 19);
|
| - shouldBeClear(11, 21);
|
| - shouldBeClear(21, 11);
|
| - shouldBeClear(21, 21);
|
| - }
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 10, 10, 10, 10, 10, 10, 10, 10);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeClear(9, 9);
|
| - shouldBeGreen(11, 11);
|
| - shouldBeGreen(19, 19);
|
| - shouldBeClear(1, 21);
|
| - shouldBeClear(21, 1);
|
| - shouldBeClear(21, 21);
|
| - } else {
|
| - shouldBeClear(9, 9);
|
| - shouldBeBlack(11, 11);
|
| - shouldBeBlack(19, 19);
|
| - shouldBeClear(1, 21);
|
| - shouldBeClear(21, 1);
|
| - shouldBeClear(21, 21);
|
| - }
|
| -}
|
| -
|
| -function checkCrop(imageBitmap, option) {
|
| - debug("Check crop.");
|
| - bitmap = imageBitmap;
|
| - shouldBeType("bitmap", "ImageBitmap");
|
| - shouldBe("bitmap.width", "10");
|
| - shouldBe("bitmap.height", "10");
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeRed(1, 1);
|
| - shouldBeRed(9, 9);
|
| - shouldBeClear(12, 12);
|
| - shouldBeClear(1, 12);
|
| - shouldBeClear(12, 1);
|
| - } else {
|
| - shouldBeRed(1, 1);
|
| - shouldBeRed(9, 9);
|
| - shouldBeClear(12, 12);
|
| - shouldBeClear(1, 12);
|
| - shouldBeClear(12, 1);
|
| - }
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0, 20, 20);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeRed(1, 1);
|
| - shouldBeRed(18, 18);
|
| - shouldBeClear(22, 22);
|
| - shouldBeClear(1, 22);
|
| - shouldBeClear(22, 1);
|
| - } else {
|
| - shouldBeRed(1, 1);
|
| - shouldBeRed(18, 18);
|
| - shouldBeClear(22, 22);
|
| - shouldBeClear(1, 22);
|
| - shouldBeClear(22, 1);
|
| - }
|
| -}
|
| -
|
| -function checkCropCenter(imageBitmap, option) {
|
| - debug("Check crop center.");
|
| - bitmap = imageBitmap;
|
| - shouldBeType("bitmap", "ImageBitmap");
|
| - shouldBe("bitmap.width", "10");
|
| - shouldBe("bitmap.height", "10");
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeBlue(4, 4);
|
| - shouldBeBlack(6, 4);
|
| - shouldBeRed(4, 6);
|
| - shouldBeGreen(6, 6);
|
| - shouldBeGreen(9, 9);
|
| - shouldBeClear(11, 11);
|
| - shouldBeClear(1, 11);
|
| - shouldBeClear(11, 1);
|
| - } else {
|
| - shouldBeRed(4, 4);
|
| - shouldBeGreen(6, 4);
|
| - shouldBeBlue(4, 6);
|
| - shouldBeBlack(6, 6);
|
| - shouldBeBlack(9, 9);
|
| - shouldBeClear(11, 11);
|
| - shouldBeClear(1, 11);
|
| - shouldBeClear(11, 1);
|
| - }
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0, 20, 20);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeBlue(8, 8);
|
| - shouldBeBlack(11, 8);
|
| - shouldBeRed(8, 11);
|
| - shouldBeGreen(11, 11);
|
| - shouldBeGreen(18, 18);
|
| - shouldBeClear(22, 22);
|
| - shouldBeClear(1, 21);
|
| - shouldBeClear(21, 1);
|
| - } else {
|
| - shouldBeRed(8, 8);
|
| - shouldBeGreen(11, 8);
|
| - shouldBeBlue(8, 11);
|
| - shouldBeBlack(11, 11);
|
| - shouldBeBlack(18, 18);
|
| - shouldBeClear(22, 22);
|
| - shouldBeClear(1, 21);
|
| - shouldBeClear(21, 1);
|
| - }
|
| -}
|
| -
|
| -function checkCropRight(imageBitmap, option) {
|
| - debug("Check crop right.");
|
| - bitmap = imageBitmap;
|
| - shouldBeType("bitmap", "ImageBitmap");
|
| - shouldBe("bitmap.width", "10");
|
| - shouldBe("bitmap.height", "10");
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeBlack(1, 1);
|
| - shouldBeBlack(9, 9);
|
| - shouldBeClear(11, 11);
|
| - shouldBeClear(1, 11);
|
| - shouldBeClear(11, 1);
|
| - } else {
|
| - shouldBeBlack(1, 1);
|
| - shouldBeBlack(9, 9);
|
| - shouldBeClear(11, 11);
|
| - shouldBeClear(1, 11);
|
| - shouldBeClear(11, 1);
|
| - }
|
| -}
|
| -
|
| -function checkOverCrop(imageBitmap, option) {
|
| - debug("Check over crop.");
|
| - bitmap = imageBitmap;
|
| - shouldBeType("bitmap", "ImageBitmap");
|
| - shouldBe("bitmap.width", "60");
|
| - shouldBe("bitmap.height", "60");
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeClear(1, 59);
|
| - shouldBeClear(9, 51);
|
| - shouldBeBlue(10, 30);
|
| - shouldBeBlue(19, 39);
|
| - shouldBeBlack(20, 30);
|
| - shouldBeBlack(29, 39);
|
| - shouldBeRed(10, 40);
|
| - shouldBeRed(19, 49);
|
| - shouldBeGreen(20, 40);
|
| - shouldBeGreen(29, 49);
|
| - shouldBeClear(31, 59);
|
| - shouldBeClear(1, 29);
|
| - shouldBeClear(30, 30);
|
| - } else {
|
| - shouldBeClear(1, 1);
|
| - shouldBeClear(9, 9);
|
| - shouldBeRed(11, 11);
|
| - shouldBeRed(19, 19);
|
| - shouldBeGreen(21, 19);
|
| - shouldBeBlue(19, 21);
|
| - shouldBeBlack(21, 21);
|
| - shouldBeBlack(29, 29);
|
| - shouldBeClear(32, 1);
|
| - shouldBeClear(1, 32);
|
| - shouldBeClear(32, 32);
|
| - }
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0, 30, 30);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeClear(1, 29);
|
| - shouldBeClear(4, 25);
|
| - shouldBeBlue(5, 15);
|
| - shouldBeBlue(9, 19);
|
| - shouldBeBlack(10, 15);
|
| - shouldBeBlack(14, 19);
|
| - shouldBeRed(5, 21);
|
| - shouldBeRed(9, 24);
|
| - shouldBeGreen(11, 21);
|
| - shouldBeGreen(14, 24);
|
| - shouldBeClear(16, 29);
|
| - shouldBeClear(1, 14);
|
| - shouldBeClear(15, 15);
|
| - } else {
|
| - shouldBeClear(1, 1);
|
| - shouldBeClear(4, 4);
|
| - shouldBeRed(6, 6);
|
| - shouldBeRed(9, 9);
|
| - shouldBeGreen(11, 9);
|
| - shouldBeBlue(9, 11);
|
| - shouldBeBlack(11, 11);
|
| - shouldBeBlack(14, 14);
|
| - shouldBeClear(16, 1);
|
| - shouldBeClear(1, 16);
|
| - shouldBeClear(16, 16);
|
| - }
|
| -}
|
| -
|
| -function checkOverCropRight(imageBitmap, option) {
|
| - debug("Check over crop right.");
|
| - bitmap = imageBitmap;
|
| - shouldBe("bitmap.width", "50");
|
| - shouldBe("bitmap.height", "50");
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeBlack(1, 40);
|
| - shouldBeBlack(9, 49);
|
| - shouldBeClear(10, 49);
|
| - shouldBeClear(1, 39);
|
| - shouldBeClear(10, 40);
|
| - } else {
|
| - shouldBeBlack(1, 1);
|
| - shouldBeBlack(9, 9);
|
| - shouldBeClear(11, 11);
|
| - shouldBeClear(1, 11);
|
| - shouldBeClear(11, 1);
|
| - }
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0, 20, 20);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeBlack(0, 16);
|
| - shouldBeBlack(3, 19);
|
| - shouldBeClear(4, 19);
|
| - shouldBeClear(0, 15);
|
| - shouldBeClear(4, 15);
|
| - } else {
|
| - shouldBeBlack(1, 1);
|
| - shouldBeBlack(3, 3);
|
| - shouldBeClear(5, 5);
|
| - shouldBeClear(1, 5);
|
| - shouldBeClear(5, 1);
|
| - }
|
| -
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 10, 10, 20, 20, 0, 0, 20, 20);
|
| - if (option == "flipY" || option == "bottomLeft") {
|
| - shouldBeClear(1, 1);
|
| - shouldBeClear(3, 3);
|
| - shouldBeClear(5, 5);
|
| - shouldBeClear(1, 5);
|
| - shouldBeClear(5, 1);
|
| - } else {
|
| - shouldBeClear(1, 1);
|
| - shouldBeClear(3, 3);
|
| - shouldBeClear(5, 5);
|
| - shouldBeClear(1, 5);
|
| - shouldBeClear(5, 1);
|
| - }
|
| -}
|
| -
|
| -// For an empty image, the orientation doesn't matter
|
| -function checkEmpty(imageBitmap, option) {
|
| - debug("Check empty.");
|
| - bitmap = imageBitmap;
|
| - shouldBeType("bitmap", "ImageBitmap");
|
| - shouldBe("bitmap.width", "30");
|
| - shouldBe("bitmap.height", "30");
|
| -
|
| - // nothing should be drawn
|
| - clearContext(ctx);
|
| - ctx.drawImage(imageBitmap, 0, 0);
|
| - shouldBeClear(1, 1);
|
| - shouldBeClear(9, 9);
|
| - shouldBeClear(11, 11);
|
| - shouldBeClear(22, 22);
|
| -}
|
| -</script>
|
| -</body>
|
| -</html>
|
|
|