#!/bin/bash #/ Usage: script/generate-example fileA fileB #/ script/generate-example directory #/ #/ Generate expected output for a test fixture example or directory of examples. #/ #/ Example: #/ script/generate-example test/fixtures/ruby/and-or.{A,B}.rb #/ script/generate-example test/fixtures/ruby set -e [ $# -eq 0 ] && set -- --help if [[ $1 = -h || $1 = --help ]]; then grep ^#/ <"$0" |cut -c4- exit fi # Work out of the project root directory root=$(cd $(dirname "$0")/.. && pwd) cd "$root" count=0 status () { tput cuu 1 && tput el echo "Generating $1" ((count+=1)) } generate_example () { fileA="$1" fileB="$2" parseFileA="${fileA%%.*}.parseA.txt" parseFileB="${fileB%%.*}.parseB.txt" diffFileAddA="${fileA%%.*}.diff+A.txt" diffFileRemoveA="${fileA%%.*}.diff-A.txt" diffFileAddB="${fileB%%.*}.diff+B.txt" diffFileRemoveB="${fileB%%.*}.diff-B.txt" diffFileAB="${fileA%%.*}.diffA-B.txt" diffFileBA="${fileB%%.*}.diffB-A.txt" status $parseFileA stack exec semantic parse -- --sexpression $fileA > $parseFileA status $parseFileB stack exec semantic parse -- --sexpression $fileB > $parseFileB status $diffFileAddA stack exec semantic diff -- --sexpression /dev/null $fileA > $diffFileAddA status $diffFileRemoveA stack exec semantic diff -- --sexpression $fileA /dev/null > $diffFileRemoveA status $diffFileAddB stack exec semantic diff -- --sexpression /dev/null $fileB > $diffFileAddB status $diffFileRemoveB stack exec semantic diff -- --sexpression $fileB /dev/null > $diffFileRemoveB status $diffFileAB stack exec semantic diff -- --sexpression $fileA $fileB > $diffFileAB status $diffFileBA stack exec semantic diff -- --sexpression $fileB $fileA > $diffFileBA } if [[ -d $1 ]]; then echo "Generating all examples for $1" echo "" for f in $(ls $1/*.A.*); do # echo "${f%%.*}.B."${f##*.}"" generate_example $f "${f%%.*}.B."${f##*.}"" done else echo "Generating examples just for $1 $2" echo "" generate_example $1 $2 fi echo "Done. Generated $count examples."