#!/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 "
Comparison of $(basename $1) between commits ${COMMIT_A} and ${COMMIT_B}
"
}
# Here we start generating html report. It is just a simple table of pass / fail
# results.
echo "
Freetype2 Difference Report
Commit A: ${COMMIT_A}
Commit B: ${COMMIT_B}
Font: $(basename $1)
Size: $2
"
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 "FAIL |
"
for f in $FAIL
do
filename=$(basename $f)
extension="${filename##*.}"
if [[ "$filename" != "bench.txt" ]];
then
EXIT=1
fi
PAGE="$(basename $f .$extension).html"
echo "
$(basename $f) |
"
done
echo "PASS |
"
for f in $PASS
do
echo "
$(basename $f) |
"
done
echo "
"
# 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