| #!/bin/bash |
| |
| # Include our configuration |
| . ${PREVIOUS_PWD}/CI/ft-tests.config |
| |
| # Arguments |
| FONT=$1 |
| SIZE=$2 |
| COMMIT_A=$3 |
| COMMIT_B=$4 |
| |
| # This script generates diffs and html reports from the metrics previously |
| # generated. |
| |
| EXIT=0 |
| |
| metrics_dir="$(basename ${FONT})/${SIZE}/" |
| diff_dir="${TEST_OUTDIR}/${COMMIT_A}_${COMMIT_B}_diffs/${metrics_dir}" |
| mkdir -p "${diff_dir}" |
| |
| OUTDIR_A="${TEST_OUTDIR}/${COMMIT_A}/$(basename ${FONT})/${SIZE}/" |
| OUTDIR_B="${TEST_OUTDIR}/${COMMIT_B}/$(basename ${FONT})/${SIZE}/" |
| |
| RELATIVE_OUTDIR_A="${COMMIT_A}/$(basename ${FONT})/${SIZE}/" |
| RELATIVE_OUTDIR_B="${COMMIT_B}/$(basename ${FONT})/${SIZE}/" |
| |
| # Function below generates a page to compare images. The image should change |
| # between the two versions on mouse over to easily spot differences. |
| function write_img_comp() { |
| echo "<!DOCTYPE html> |
| <html> |
| <head> |
| <style> |
| .comp { |
| width: $(identify -format '%w' $1)px; |
| height: $(identify -format '%h' $1)px; |
| background: url(\"${RELATIVE_OUTDIR_A}/$(basename $1)\") no-repeat; |
| display: inline-block; |
| } |
| .comp:hover { |
| background: url(\"${RELATIVE_OUTDIR_B}/$(basename $1)\") no-repeat; |
| } |
| .diff { |
| width: $(identify -format '%w' $1)px; |
| height: $(identify -format '%h' $1)px; |
| background: url(\"${diff_dir}/$(basename $1 .png)_diff.png\") no-repeat; |
| display: inline-block; |
| } |
| </style> |
| </head> |
| <body> |
| <h2> |
| Comparison of $(basename $1) between commits ${COMMIT_A} and ${COMMIT_B} |
| </h2> |
| <div class=\"comp\"></div> |
| <div class=\"diff\"></div> |
| </body> |
| </html>" |
| } |
| |
| # Here we start generating html report. It is just a simple table of pass / fail |
| # results. |
| echo "<!DOCTYPE html> |
| <html> |
| <head> |
| <style> |
| table, tr { |
| border: 1px solid black; |
| display:table; |
| margin-right:auto; |
| margin-left:auto; |
| width:100%; |
| } |
| |
| th.fail { |
| color: red |
| } |
| |
| th.pass { |
| color: green |
| } |
| |
| </style> |
| </head> |
| <body> |
| |
| <h2>Freetype2 Difference Report</h2> |
| <h3> |
| Commit A: ${COMMIT_A} |
| Commit B: ${COMMIT_B} |
| </h3> |
| <h3> |
| Font: $(basename $1) |
| </h3> |
| <h3> |
| Size: $2 |
| </h3> |
| <table>" |
| |
| PASS=() |
| FAIL=() |
| FILES=${OUTDIR_A}/* |
| |
| for f in $FILES |
| do |
| filename=$(basename $f) |
| extension="${filename##*.}" |
| |
| # If is png compare with imagick |
| if [[ "$extension" == "png" ]]; |
| then |
| diif_cmd=$(compare -metric AE -highlight-color Red -lowlight-color PaleGreen $f ${OUTDIR_B}/$(basename $f)\ |
| "${diff_dir}/$(basename $f .png)_diff.png" &> /dev/null) |
| result=$? |
| # Else if txt compare with |
| else |
| diif_cmd=$(diff $f ${OUTDIR_B}/$(basename $f) &>\ |
| $diff_dir/$(basename $f .$extension).diff) # we only care about return result |
| result=$? |
| fi |
| |
| # Generate approriate diff page |
| PAGE="$(basename $f .$extension)_${COMMIT_A}_${COMMIT_B}_diff.html" |
| if [ "$result" -eq "0" ]; |
| then |
| PASS+="$f " |
| else |
| if [[ "$extension" == "png" ]]; |
| then |
| write_img_comp $f &> "${TEST_OUTDIR}/${COMMIT_A}_${COMMIT_B}_diffs/$PAGE" |
| else |
| DISPLAY=-1 pretty-diff $f ${OUTDIR_B}/$(basename $f) |
| mv /tmp/diff.html "${TEST_OUTDIR}/${COMMIT_A}_${COMMIT_B}_diffs/$PAGE" |
| fi |
| FAIL+="$f " |
| fi |
| done |
| |
| # Below we fill out the results table |
| echo "<tr><th class=\"fail\">FAIL</th></tr>" |
| |
| for f in $FAIL |
| do |
| filename=$(basename $f) |
| extension="${filename##*.}" |
| if [[ "$filename" != "bench.txt" ]]; |
| then |
| EXIT=1 |
| fi |
| PAGE="$(basename $f .$extension).html" |
| echo " |
| <tr> |
| <td><a href=\"${COMMIT_A}_${COMMIT_B}_diffs/$(basename $f .$extension)_${COMMIT_A}_${COMMIT_B}_diff.html\">$(basename $f)</a></td> |
| </tr>" |
| done |
| |
| echo "<tr><th class=\"pass\">PASS</th></tr>" |
| |
| for f in $PASS |
| do |
| echo " |
| <tr> |
| <td><a href=\"${COMMIT_A}_${COMMIT_B}_diffs/${COMMIT_A}/${metrics_dir}/$(basename $f)\">$(basename $f)</a></td> |
| </tr>" |
| done |
| |
| echo " |
| </table> |
| |
| </body> |
| </html>" |
| |
| # Move our tests results into dir so html refrences work |
| cp -R ${TEST_OUTDIR}/${COMMIT_A}/ ${TEST_OUTDIR}/${COMMIT_A}_${COMMIT_B}_diffs &> /dev/null |
| cp -R ${TEST_OUTDIR}/${COMMIT_B}/ ${TEST_OUTDIR}/${COMMIT_A}_${COMMIT_B}_diffs &> /dev/null |
| |
| exit $EXIT |