| #!/bin/bash -ex |
| |
| function mtime() { |
| stat -c %Y $1 |
| } |
| |
| # Go to top of blueprint tree |
| cd $(dirname ${BASH_SOURCE[0]})/.. |
| TOP=${PWD} |
| |
| export TEMPDIR=$(mktemp -d -t blueprint.test.XXX) |
| |
| function cleanup() { |
| cd "${TOP}" |
| echo "cleaning up ${TEMPDIR}" |
| rm -rf "${TEMPDIR}" |
| } |
| trap cleanup EXIT |
| |
| export OUTDIR="${TEMPDIR}/out" |
| mkdir "${OUTDIR}" |
| |
| export SRCDIR="${TEMPDIR}/src" |
| cp -r tests/test_tree "${SRCDIR}" |
| cp -r "${TOP}" "${SRCDIR}/blueprint" |
| |
| cd "${OUTDIR}" |
| export BLUEPRINTDIR=${SRCDIR}/blueprint |
| #setup |
| ${SRCDIR}/blueprint/bootstrap.bash $@ |
| |
| #confirm no build.ninja file is rebuilt when no change happens |
| ./blueprint.bash |
| |
| OLDTIME_BOOTSTRAP=$(mtime .bootstrap/build.ninja) |
| OLDTIME=$(mtime build.ninja) |
| |
| sleep 2 |
| ./blueprint.bash |
| |
| if [ ${OLDTIME} != $(mtime build.ninja) ]; then |
| echo "unnecessary build.ninja regeneration for null build" >&2 |
| exit 1 |
| fi |
| |
| if [ ${OLDTIME_BOOTSTRAP} != $(mtime .bootstrap/build.ninja) ]; then |
| echo "unnecessary .bootstrap/build.ninja regeneration for null build" >&2 |
| exit 1 |
| fi |
| |
| #confirm no build.ninja file is rebuilt when a new directory is created |
| mkdir ${SRCDIR}/newglob |
| |
| sleep 2 |
| ./blueprint.bash |
| |
| if [ ${OLDTIME} != $(mtime build.ninja) ]; then |
| echo "unnecessary build.ninja regeneration for new empty directory" >&2 |
| exit 1 |
| fi |
| if [ ${OLDTIME_BOOTSTRAP} != $(mtime .bootstrap/build.ninja) ]; then |
| echo "unnecessary .bootstrap/build.ninja regeneration for new empty directory" >&2 |
| exit 1 |
| fi |
| |
| #confirm that build.ninja is rebuilt when a new Blueprints file is added |
| touch ${SRCDIR}/newglob/Blueprints |
| |
| sleep 2 |
| ./blueprint.bash |
| |
| if [ ${OLDTIME} = $(mtime build.ninja) ]; then |
| echo "Failed to rebuild build.ninja for glob addition" >&2 |
| exit 1 |
| fi |
| if [ ${OLDTIME_BOOTSTRAP} = $(mtime .bootstrap/build.ninja) ]; then |
| echo "Failed to rebuild .bootstrap/build.ninja for glob addition" >&2 |
| exit 1 |
| fi |
| |
| #confirm that build.ninja is rebuilt when a glob match is removed |
| OLDTIME=$(mtime build.ninja) |
| OLDTIME_BOOTSTRAP=$(mtime .bootstrap/build.ninja) |
| rm ${SRCDIR}/newglob/Blueprints |
| |
| sleep 2 |
| ./blueprint.bash |
| |
| if [ ${OLDTIME} = $(mtime build.ninja) ]; then |
| echo "Failed to rebuild build.ninja for glob removal" >&2 |
| exit 1 |
| fi |
| if [ ${OLDTIME_BOOTSTRAP} = $(mtime .bootstrap/build.ninja) ]; then |
| echo "Failed to rebuild .bootstrap/build.ninja for glob removal" >&2 |
| exit 1 |
| fi |
| |
| #confirm that build.ninja is not rebuilt when a glob match is removed |
| OLDTIME=$(mtime build.ninja) |
| OLDTIME_BOOTSTRAP=$(mtime .bootstrap/build.ninja) |
| rmdir ${SRCDIR}/newglob |
| |
| sleep 2 |
| ./blueprint.bash |
| |
| if [ ${OLDTIME} != $(mtime build.ninja) ]; then |
| echo "unnecessary build.ninja regeneration for removal of empty directory" >&2 |
| exit 1 |
| fi |
| |
| if [ ${OLDTIME_BOOTSTRAP} != $(mtime .bootstrap/build.ninja) ]; then |
| echo "unnecessary .bootstrap/build.ninja regeneration for removal of empty directory" >&2 |
| exit 1 |
| fi |
| |
| echo tests passed |