X-Git-Url: https://mattmccutchen.net/mgear/mgear.git/blobdiff_plain/21a503712996ac153f7e7b79596d8f3a372c1a97..b811570b2cb4d27923b09d8b2e286dd234f5fab0:/testsuite diff --git a/testsuite b/testsuite index 3329a66..f7ec807 100755 --- a/testsuite +++ b/testsuite @@ -1,7 +1,7 @@ #!/bin/bash -# Test suite for Mage. +# Test suite for mgear. -echo "Test suite for Mage" +echo "Test suite for mgear" cd "$(dirname "$0")" Z=test-zone @@ -18,7 +18,7 @@ section=Initialization trap 'echo; echo "TEST SUITE FAILED in section $section!" >&2' ERR #set -x -ln -s ../mage.mk mage.mk +ln -s ../mgear.mk . function fail { false @@ -30,9 +30,10 @@ function start_section { echo "SECTION: $1" } -function do_mage { +function do_mgear { echo "Running: make $*" - make "$@" 2>&1 | tee mage.log + make --warn-undefined-variables "$@" 2>&1 | tee mgear.log + assert_not_saw 'warning: undefined variable' } function assert_contents { @@ -46,20 +47,18 @@ function assert_contents { # Options can be passed to grep: assert_saw -i override function assert_saw { - if grep -q "$@" mage.log; then + if grep -q "$@" mgear.log; then echo "Good, saw '${@:$#}' in build log." else - echo "Expected '${@:$#}' in build log but didn't see it! Log:" - cat mage.log + echo "Expected '${@:$#}' in build log but didn't see it!" fail fi } function assert_not_saw { - if ! grep -q "$@" mage.log; then - echo "Good, saw '${@:$#}' in build log." + if ! grep -q "$@" mgear.log; then + echo "Good, didn't see '${@:$#}' in build log." else - echo "Did not expect '${@:$#}' in build log but saw it! Log:" - cat mage.log + echo "Did not expect '${@:$#}' in build log but saw it!" fail fi } @@ -70,6 +69,15 @@ function assert_generated { assert_saw "$1.tmp" } +function assert { + if eval $*; then + echo "Good, $* returned true." + else + echo "Expected $* to return true but it returned false!" + fail + fi +} + function remember_mtime { while [ $# != 0 ]; do eval "orig_mtime_${1//[^A-Za-z]/}=$(stat --format=%Y $1)" @@ -104,15 +112,25 @@ function assert_not_touched { # Simple makefile for stripping two kinds of comments. # Tests an implicit rule and two competing explicit rules. # Watch those dollar signs! + cat >Makefile <<'EOF' -include mage.mk +include mgear.mk .SECONDARY: + include hc-rule.mk -$(call mg-define-rule,%,%.ssc,sleep 1 && grep 'warn' $$< && sed -e 's_//.*$$$$__' $$< >$$t) -$(call mg-define-rule,index,index.in,sort $$< >$$t) +cmd-ssc=sleep 1 && grep 'warn' $< && sed -e 's_//.*$$__' $< >$@ +$(call mg-define-rule,%,%.ssc,cmd-ssc) +cmd-index=sort $< >$@ +$(call mg-define-rule,index,index.in,cmd-index) + +clean: + $(call mg-clean-cmd,.) +.PHONY: clean EOF + cat >hc-rule.mk <<'EOF' -$(call mg-define-rule,%,%.hc,sed -e 's_#.*$$$$__' $$< >$$t) +cmd-hc=sed -e 's_$(hash).*$$__' $< >$@ +$(call mg-define-rule,%,%.hc,cmd-hc) EOF # Input files. @@ -136,7 +154,7 @@ EOF # Run and make sure the files were compiled correctly. start_section "Initial full build" -do_mage foo bar index +do_mgear foo bar index assert_contents foo <<'EOF' This is the foo file. @@ -166,7 +184,7 @@ assert_saw sort index.in >index.tmp # to bar.g accidentally being too old. start_section "Replay bar warning" -do_mage foo bar index +do_mgear foo bar index assert_uptodate foo assert_uptodate bar @@ -179,7 +197,7 @@ assert_not_saw -i overrid start_section "Override bar" sleep 1 # No racy cleanliness echo NEWCONTENT >bar -do_mage bar +do_mgear bar assert_saw -i overrid assert_contents bar <<>foo.hc -do_mage index foo +do_mgear index foo assert_uptodate index assert_generated foo @@ -203,12 +221,14 @@ EOF # Change the rule for # comments to strip spaces before a #. # Make sure foo is updated properly. +# Also, make sure commas in commands work properly. start_section "Command change for % <- %.hc" cat >hc-rule.mk <<'EOF' -$(call mg-define-rule,%,%.hc,sed -e 's_ *#.*$$$$__' $$< >$$t) +cmd-hc=sed -e 's, *$(hash).*$$,,' $< >$@ +$(call mg-define-rule,%,%.hc,cmd-hc) EOF -do_mage foo +do_mgear foo assert_generated foo assert_contents foo <<'EOF' @@ -226,12 +246,51 @@ start_section "Inconsequential change to foo.hc" sleep 1 # No racy cleanliness remember_mtime foo foo.g sed -e '$s/look: /look:/' -i foo.hc -do_mage foo +do_mgear foo assert_generated foo assert_touched foo.g assert_not_touched foo +# Test cleaning. Remember, bar is still overridden. + +start_section "Cleaning" +do_mgear clean + +assert_saw 'rm.*foo' # Some sort of indication of foo's deletion +assert ! [ -f foo ] # foo deleted +assert ! [ -f foo.g ] # foo.g deleted +assert [ -f bar ] # bar not actually deleted... +assert_contents bar <<bar +do_mgear bar + +assert_saw -i overrid +assert_contents bar <<