generate-object-fit-and-position-canvas-tests.sh (2808B)
1 #!/bin/bash 2 # 3 # Any copyright is dedicated to the Public Domain. 4 # http://creativecommons.org/publicdomain/zero/1.0/ 5 # 6 # Script to generate <canvas src> reftest files for "object-fit" and 7 # "object-position", from corresponding reftest files that use <object>. 8 # 9 # This script expects to be run from the parent directory. 10 11 # Array of image files that we'll use 12 imageFileArr=("support/colors-16x8.png" "support/colors-8x16.png") 13 canvasAttributeArr=('width="16" height="8"' 'width="8" height="16"') 14 numImageFiles=${#imageFileArr[@]} 15 16 17 for ((i = 0; i < $numImageFiles; i++)); do 18 19 imageFile=${imageFileArr[$i]} 20 canvasAttrs=${canvasAttributeArr[$i]} 21 22 # Loop across <object> tests: 23 # (We assume that tests that end with "001" use the first PNG image in 24 # $imageFileArr, and tests that end with "002" use the second PNG image.) 25 let testNum=$i+1 26 for origTestName in object-*-png-*00${testNum}o.html; do 27 # Find the corresponding reference case: 28 origReferenceName=$(echo $origTestName | 29 sed "s/o.html/-ref.html/") 30 31 # Replace "o" suffix in filename with "c" (for "canvas") 32 canvasTestName=$(echo $origTestName | 33 sed "s/o.html/c.html/") 34 35 # Generate testcase 36 # (converting <object data="..."> to <canvas width="..." height="..."> 37 echo "Generating $canvasTestName from $origTestName." 38 hg cp $origTestName $canvasTestName 39 40 # Do string-replacements in testcase to convert it to test canvas: 41 # Adjust html & body nodes: 42 sed -i "s|<html>|<html class=\"reftest-wait\">|" $canvasTestName 43 sed -i "s|<body>|<body onload=\"drawImageToCanvases('$imageFile')\">|" $canvasTestName 44 # Adjust <title>: 45 sed -i "s|object element|canvas element|g" $canvasTestName 46 # Tweak the actual tags (open & close tags, and CSS rule): 47 sed -i "s|object {|canvas {|" $canvasTestName 48 sed -i "s|<object|<canvas|" $canvasTestName 49 sed -i "s|</object>|</canvas>|" $canvasTestName 50 # Drop "data" attr (pointing to image URI) and replace with 51 # width/height attrs to establish the canvas's intrinsic size: 52 sed -i "s|data=\"$imageFile\"|$canvasAttrs|" $canvasTestName 53 54 # Add a <script> block to draw an image into each canvas: 55 sed -i "/<\/style>/a \\ 56 <script>\n\ 57 function drawImageToCanvases(imageURI) {\n\ 58 var image = new Image();\n\ 59 image.onload = function() {\n\ 60 var canvasElems = document.getElementsByTagName(\"canvas\");\n\ 61 for (var i = 0; i < canvasElems.length; i++) {\n\ 62 var ctx = canvasElems[i].getContext(\"2d\");\n\ 63 ctx.drawImage(image, 0, 0);\n\ 64 }\n\ 65 document.documentElement.removeAttribute(\"class\");\n\ 66 }\n\ 67 image.src = imageURI;\n\ 68 }\n\ 69 <\/script>" $canvasTestName 70 done 71 done