tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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