forked from mirrors/gecko-dev
		
	 7bf99e1fc3
			
		
	
	
		7bf99e1fc3
		
	
	
	
	
		
			
			Differential Revision: https://phabricator.services.mozilla.com/D41827 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			200 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const CANVAS_WIDTH = 200;
 | |
| const CANVAS_HEIGHT = 100;
 | |
| 
 | |
| async function runDrawWindowTests(snapshotCallback, transparentBackground) {
 | |
|   function make_canvas() {
 | |
|     var canvas = document.createElement("canvas");
 | |
|     canvas.setAttribute("height", CANVAS_HEIGHT);
 | |
|     canvas.setAttribute("width", CANVAS_WIDTH);
 | |
|     document.body.appendChild(canvas);
 | |
|     return canvas;
 | |
|   }
 | |
| 
 | |
|   var testCanvas = make_canvas();
 | |
|   var refCanvas = make_canvas();
 | |
| 
 | |
|   var testCx = testCanvas.getContext("2d");
 | |
|   var refCx = refCanvas.getContext("2d");
 | |
| 
 | |
|   var testWrapCx = SpecialPowers.wrap(testCx);
 | |
|   var refWrapCx = SpecialPowers.wrap(refCx);
 | |
| 
 | |
|   function clearRef(fillStyle) {
 | |
|     refCx.setTransform(1, 0, 0, 1, 0, 0);
 | |
|     refCx.fillStyle = fillStyle;
 | |
|     refCx.fillRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
 | |
|   }
 | |
|   function clearTest(fillStyle) {
 | |
|     testCx.setTransform(1, 0, 0, 1, 0, 0);
 | |
|     testCx.fillStyle = fillStyle;
 | |
|     testCx.fillRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
 | |
|   }
 | |
|   function clear(fillStyle) {
 | |
|     clearRef(fillStyle);
 | |
|     clearTest(fillStyle);
 | |
|   }
 | |
| 
 | |
|   // Basic tests of drawing the whole document on a background
 | |
| 
 | |
|   clear("white");
 | |
|   await snapshotCallback(
 | |
|     testWrapCx,
 | |
|     0,
 | |
|     0,
 | |
|     CANVAS_WIDTH,
 | |
|     CANVAS_HEIGHT,
 | |
|     "rgb(255, 255, 255)"
 | |
|   );
 | |
|   refCx.fillStyle = "fuchsia";
 | |
|   refCx.fillRect(10, 10, 20, 20);
 | |
|   refCx.fillStyle = "aqua";
 | |
|   refCx.fillRect(50, 10, 20, 20);
 | |
|   refCx.fillStyle = "yellow";
 | |
|   refCx.fillRect(90, 10, 20, 20);
 | |
|   assertSnapshots(
 | |
|     testCanvas,
 | |
|     refCanvas,
 | |
|     true /* equal */,
 | |
|     null /*no fuzz*/,
 | |
|     "full draw of source on white background",
 | |
|     "reference"
 | |
|   );
 | |
| 
 | |
|   clearTest("white");
 | |
|   await snapshotCallback(
 | |
|     testWrapCx,
 | |
|     0,
 | |
|     0,
 | |
|     CANVAS_WIDTH,
 | |
|     CANVAS_HEIGHT,
 | |
|     "rgb(255, 255, 0)"
 | |
|   );
 | |
|   assertSnapshots(
 | |
|     testCanvas,
 | |
|     refCanvas,
 | |
|     !transparentBackground /* not equal */,
 | |
|     null /*no fuzz*/,
 | |
|     "full draw of source on yellow background",
 | |
|     "reference"
 | |
|   );
 | |
| 
 | |
|   clearRef("yellow");
 | |
|   refCx.fillStyle = "fuchsia";
 | |
|   refCx.fillRect(10, 10, 20, 20);
 | |
|   refCx.fillStyle = "aqua";
 | |
|   refCx.fillRect(50, 10, 20, 20);
 | |
|   refCx.fillStyle = "yellow";
 | |
|   refCx.fillRect(90, 10, 20, 20);
 | |
| 
 | |
|   assertSnapshots(
 | |
|     testCanvas,
 | |
|     refCanvas,
 | |
|     transparentBackground /* equal */,
 | |
|     null /*no fuzz*/,
 | |
|     "full draw of source on yellow background",
 | |
|     "reference"
 | |
|   );
 | |
| 
 | |
|   // Test drawing a region within the document.
 | |
| 
 | |
|   clear("white");
 | |
| 
 | |
|   testCx.translate(17, 31);
 | |
|   await snapshotCallback(testWrapCx, 40, 0, 40, 40, "white");
 | |
| 
 | |
|   refCx.fillStyle = "aqua";
 | |
|   refCx.fillRect(17 + 10, 31 + 10, 20, 20);
 | |
| 
 | |
|   assertSnapshots(
 | |
|     testCanvas,
 | |
|     refCanvas,
 | |
|     true /* equal */,
 | |
|     null /*no fuzz*/,
 | |
|     "draw of subrect of source with matching background",
 | |
|     "reference"
 | |
|   );
 | |
| 
 | |
|   clear("blue");
 | |
| 
 | |
|   testCx.translate(17, 31);
 | |
|   await snapshotCallback(testWrapCx, 40, 0, 35, 45, "green");
 | |
| 
 | |
|   if (transparentBackground) {
 | |
|     refCx.fillStyle = "green";
 | |
|   } else {
 | |
|     refCx.fillStyle = "white";
 | |
|   }
 | |
|   refCx.fillRect(17, 31, 35, 45);
 | |
|   refCx.fillStyle = "aqua";
 | |
|   refCx.fillRect(17 + 10, 31 + 10, 20, 20);
 | |
| 
 | |
|   assertSnapshots(
 | |
|     testCanvas,
 | |
|     refCanvas,
 | |
|     true /* equal */,
 | |
|     null /*no fuzz*/,
 | |
|     "draw of subrect of source with different background",
 | |
|     "reference"
 | |
|   );
 | |
| 
 | |
|   // Test transparency of background not disturbing what is behind
 | |
|   clear("blue");
 | |
| 
 | |
|   testCx.translate(17, 31);
 | |
|   await snapshotCallback(testWrapCx, 40, 0, 35, 45, "transparent");
 | |
| 
 | |
|   if (!transparentBackground) {
 | |
|     refCx.fillStyle = "white";
 | |
|     refCx.fillRect(17, 31, 35, 45);
 | |
|   }
 | |
|   refCx.fillStyle = "aqua";
 | |
|   refCx.fillRect(17 + 10, 31 + 10, 20, 20);
 | |
| 
 | |
|   assertSnapshots(
 | |
|     testCanvas,
 | |
|     refCanvas,
 | |
|     true /* equal */,
 | |
|     null /*no fuzz*/,
 | |
|     "draw of subrect of source with different background",
 | |
|     "reference"
 | |
|   );
 | |
| 
 | |
|   // Test that multiple drawWindow calls draw at correct positions.
 | |
|   clear("blue");
 | |
| 
 | |
|   testCx.translate(9, 3);
 | |
|   // 5, 8 is 5, 2 from the corner of the fuchsia square
 | |
|   await snapshotCallback(testWrapCx, 5, 8, 30, 25, "maroon");
 | |
|   // 35, 0 is 15, 10 from the corner of the aqua square
 | |
|   await snapshotCallback(testWrapCx, 35, 0, 50, 40, "transparent");
 | |
|   testCx.translate(15, 0);
 | |
|   // 85, 5 is 5, 5 from the corner of the yellow square
 | |
|   await snapshotCallback(testWrapCx, 85, 5, 30, 25, "transparent");
 | |
| 
 | |
|   if (transparentBackground) {
 | |
|     refCx.fillStyle = "maroon";
 | |
|     refCx.fillRect(9, 3, 30, 25);
 | |
|     refCx.fillStyle = "fuchsia";
 | |
|     refCx.fillRect(9 + 5, 3 + 2, 20, 20);
 | |
|   } else {
 | |
|     refCx.fillStyle = "white";
 | |
|     refCx.fillRect(9, 3, 50, 40);
 | |
|   }
 | |
|   refCx.fillStyle = "aqua";
 | |
|   refCx.fillRect(9 + 15, 3 + 10, 20, 20);
 | |
|   if (!transparentBackground) {
 | |
|     refCx.fillStyle = "white";
 | |
|     refCx.fillRect(9 + 15, 3, 30, 25);
 | |
|   }
 | |
|   refCx.fillStyle = "yellow";
 | |
|   refCx.fillRect(9 + 15 + 5, 3 + 0 + 5, 20, 20);
 | |
| 
 | |
|   assertSnapshots(
 | |
|     testCanvas,
 | |
|     refCanvas,
 | |
|     true /* equal */,
 | |
|     null /*no fuzz*/,
 | |
|     "multiple drawWindow calls on top of each other",
 | |
|     "reference"
 | |
|   );
 | |
| }
 |