Bug 1823881 [wpt PR 36130] - Integrate script to generate object-view-box tests to...
[gecko.git] / testing / web-platform / tests / css / css-images / tools / generate-object-fit-and-position-canvas-tests.sh
blobaeeee5284cd71e8c601f8b2420456813ce138344
1 #!/bin/bash
3 # Any copyright is dedicated to the Public Domain.
4 # http://creativecommons.org/publicdomain/zero/1.0/
6 # Script to generate <canvas src> reftest files for "object-fit" and
7 # "object-position", from corresponding reftest files that use <object>.
9 # This script expects to be run from the parent directory.
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[@]}
17 for ((i = 0; i < $numImageFiles; i++)); do
19 imageFile=${imageFileArr[$i]}
20 canvasAttrs=${canvasAttributeArr[$i]}
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/")
31 # Replace "o" suffix in filename with "c" (for "canvas")
32 canvasTestName=$(echo $origTestName |
33 sed "s/o.html/c.html/")
35 # Generate testcase
36 # (converting <object data="..."> to <canvas width="..." height="...">
37 echo "Generating $canvasTestName from $origTestName."
38 hg cp $origTestName $canvasTestName
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
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