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.)
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/")
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
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 \\
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\
65 document.documentElement.removeAttribute(\"class\");\n\
67 image.src = imageURI;\n\
69 <\/script>" $canvasTestName