#/bin/sh # Compare the output of ../src/indent to correct output # generated by earlier versions INDENT=../src/indent # First, make sure the executable exists if test -x $INDENT; then if test -d ./output; then echo '****' echo 'Errors remain; output directory still exists' echo '****' ls -ld ./output exit 1 fi echo -n "Regression testing " $INDENT --version echo else echo '****' echo First, you must make $INDENT echo '****' echo exit 1 fi # Code to be tested with default options EXAMPLES="do.c else.c for.c func-def.c lshift.c ncs.c \ proto.c typedef.h no-newline.c emacs-compatible.h fp.c unary.c \ struct_param.c no-newline2.c no-newline3.c wide.c" BUGS="case-label.c one-line-1.c one-line-2.c one-line-3.c \ one-line-4.c struct-decl.c sizeof-in-while.c line-break-comment.c \ macro.c enum.c elif.c nested.c wrapped-string.c" INDENTSRC="args.c backup.h backup.c dirent_def.h globs.c indent.h \ indent.c indent_globs.h io.c lexi.c memcpy.c parse.c pr_comment.c \ sys.h version.h" mkdir output echo -n "Generating indent et al with default settings..." for i in $EXAMPLES $INDENTSRC $BUGS do $INDENT -npro $i -o output/$i done echo "Done." # Cases testing certain options echo -n "Generating special option examples..." SPECIALS="typedef-bug.c bug-hp.c bug-di.c newlined-parms.c indent.pro.c \ comments1.c comments1-fca.c ncs-on-return.c sob.c continue.c continue-lp.c \ kr.c struct-decl-kr.c embedded-cuddle1.c embedded-cuddle2.c kr-proc-decls.c \ bbb-test.c preesc-comment.c if-decl-else-decl.c cp-indent.c comments.c \ elipsis-attribute.c comments2.c comments3.c comments4.c brackets.c brackets33.c \ brackets34.c brackets35.c brackets36.c brackets37.c brackets38.c \ initializers.c else-if.c else-comment-br.c else-comment-bl.c \ else-comment-br-ce.c const.c case.c case-br.c scope.c scope-br.c \ comment-break.c cdb.c bbreak.c bad-break.c pre.c dont-line-up-parentheses.c \ bad-comment.c unknown-type.c unknown-type-npsl.c bug-npsl.c bug-psl.c" ARGS="-bad" $INDENT -npro $ARGS bad-break.c -o output/bad-break.c $INDENT -npro $ARGS bad-comment.c -o output/bad-comment.c ARGS="-cdb" $INDENT -npro $ARGS cdb.c -o output/cdb.c ARGS="-kr" $INDENT -npro $ARGS kr.c -o output/kr.c $INDENT -npro $ARGS struct-decl.c -o output/struct-decl-kr.c $INDENT -npro $ARGS embedded-cuddle1.c -o output/embedded-cuddle1.c $INDENT -npro $ARGS embedded-cuddle2.c -o output/embedded-cuddle2.c $INDENT -npro $ARGS kr-proc-decls.c -o output/kr-proc-decls.c ARGS="-cli23 -bli8 -di50 -cbi1 -ci7 -i5" $INDENT -npro $ARGS case.c -o output/case.c $INDENT -npro $ARGS -br case.c -o output/case-br.c $INDENT -npro $ARGS scope.c -o output/scope.c $INDENT -npro $ARGS -br scope.c -o output/scope-br.c ARGS="-nlp -ci3 -fca" $INDENT -npro $ARGS continue.c -o output/continue.c ARGS="-lp" $INDENT -npro $ARGS continue.c -o output/continue-lp.c ARGS="-sob" $INDENT -npro $ARGS sob.c -o output/sob.c ARGS="-ncs -TUNCH" $INDENT -npro $ARGS typedef-bug.c -o output/typedef-bug.c $INDENT -npro $ARGS ncs-on-return.c -o output/ncs-on-return.c ARGS="-kr -i2" $INDENT -npro $ARGS bug-hp.c -o output/bug-hp.c ARGS="-orig" $INDENT -npro $ARGS bug-di.c -o output/bug-di.c $INDENT -npro $ARGS newlined-parms.c -o output/newlined-parms.c ARGS="-bad -bap -nbc -bl -c36 -cd36 -ncdb -nce -ci8 -cli0 -cs -d0 \ -di1 -nfca -i2 -ip0 -l80 -nlp -npcs -npsl -nsc -nsob -ss -nv" $INDENT -npro $ARGS indent.pro.c -o output/indent.pro.c ARGS="-fca" $INDENT -npro $ARGS comments1.c -o output/comments1-fca.c ARGS="-bbb" $INDENT -npro $ARGS bbb-test.c -o output/bbb-test.c $INDENT -npro comments1.c -o output/comments1.c $INDENT -npro unknown-type.c -o output/unknown-type.c $INDENT -npro preesc-comment.c -o output/preesc-comment.c ARGS="-npsl" $INDENT -npro $ARGS if-decl-else-decl.c -o output/if-decl-else-decl.c $INDENT -npro $ARGS unknown-type.c -o output/unknown-type-npsl.c $INDENT -npro $ARGS bug-npsl.c -o output/bug-npsl.c $INDENT -npro bug-npsl.c -o output/bug-psl.c ARGS="-cp9" $INDENT -npro $ARGS cp-indent.c -o output/cp-indent.c ARGS="-di7" $INDENT -npro $ARGS comments.c -o output/comments.c ARGS="-ci5 -T aClient" $INDENT -npro $ARGS elipsis-attribute.c -o output/elipsis-attribute.c ARGS="-npsl -npcs -di3" $INDENT -npro $ARGS comments2.c -o output/comments2.c $INDENT -npro $ARGS comments3.c -o output/comments3.c ARGS="-cdb -sc" $INDENT -npro $ARGS comments4.c -o output/comments4.c $INDENT -npro brackets.c -o output/brackets.c $INDENT -npro --line-length33 brackets.c -o output/brackets33.c $INDENT -npro --line-length34 brackets.c -o output/brackets34.c $INDENT -npro --line-length35 brackets.c -o output/brackets35.c $INDENT -npro --line-length36 brackets.c -o output/brackets36.c $INDENT -npro --line-length37 brackets.c -o output/brackets37.c $INDENT -npro --line-length38 brackets.c -o output/brackets38.c $INDENT -npro --line-length40 bbreak.c -o output/bbreak.c ARGS="-ci5" $INDENT -npro $ARGS initializers.c -o output/initializers.c ARGS="-nhnl --brace-indent0 --indent-level2 --dont-line-up-parentheses --continuation-indentation4 --paren-indentation0 --line-length80" $INDENT -npro $ARGS else-if.c -o output/else-if.c ARGS="" $INDENT -npro -bl else-comment.c -o output/else-comment-bl.c $INDENT -npro -br else-comment.c -o output/else-comment-br.c $INDENT -npro -br -ce else-comment.c -o output/else-comment-br-ce.c ARGS="-kr -cp0 -l132 -lps -br -psl" $INDENT -npro $ARGS const.c -o output/const.c ARGS="--dont-break-procedure-type --ignore-newlines" $INDENT -npro $ARGS comment-break.c -o output/comment-break.c ARGS="-ppi 5" $INDENT -npro $ARGS pre.c -o output/pre.c ARGS="-i4 -l100 -nlp" $INDENT -npro $ARGS dont-line-up-parentheses.c -o output/dont-line-up-parentheses.c # Check line counting of input file $INDENT -npro line-count.c -o /dev/null 2>&1 | cut -d: -f3 > output/line-count.c echo "Done." ERR=output/errors # Now diff all the new files with the old standard echo echo "Diffing generated code against standard..." for i in $EXAMPLES $INDENTSRC $SPECIALS $BUGS; do echo -n ...$i... diff --initial-tab standard/$i output/$i > output/$i-diffs 2>&1 if [ -s output/$i-diffs ]; then echo -n ERROR: $i failed | tee -a $ERR else rm output/$i-diffs fi echo done echo "Diffing generated code against standard...Done." # Testing indent (x) == indent (indent (x)) echo echo -n "Testing meta-indent..." ARGS="-bacc -nbad -nbap -nbc -br -cdb -nce -ci4 -cli4 -cs -nfc1 \ -fca -i4 -ip0 -l78 -lp -npcs -psl -sc -ss -ts4" $INDENT -npro $ARGS meta-indent.c -o output/meta-indent.c-1 diff --initial-tab output/meta-indent.c-1 standard/meta-indent.c > output/meta-diffs if [ -s output/meta-diffs ]; then echo ERROR: 1st Meta test failed | tee -a $ERR else rm output/meta-diffs fi for j in 1 2 3 4 5; do i=`expr $j + 1` $INDENT -npro $ARGS output/meta-indent.c-$j -o output/meta-indent.c-$i diff --initial-tab output/meta-indent.c-$j output/meta-indent.c-$i > output/meta-diffs-$j-$i if [ -s output/meta-diffs-$j-$i ]; then echo ERROR: Meta test $i failed | tee -a $ERR else rm output/meta-diffs-$j-$i fi done echo "Done" # This section was added when `pr_comment.c' was rewritten, to test # the new comment-handling code. echo echo Testing new comment stuff... A1="-fca" A2="-fc1" A3="-fca -fc1" A4="-fca -fc1 -cdb" A5="-fca -fc1 -cdb -sc" A6="-fca -fc1 -sc" A7="-sc -fc1" A8="-cdb -fc1" A9="-sc -cdb -fc1" A10="-sc -cdb" $INDENT -npro -st boxed.c > output/boxed.c-0 $INDENT -npro -st $A1 boxed.c > output/boxed.c-1 $INDENT -npro -st $A2 boxed.c > output/boxed.c-2 $INDENT -npro -st $A3 boxed.c > output/boxed.c-3 $INDENT -npro -st $A4 boxed.c > output/boxed.c-4 $INDENT -npro -st $A5 boxed.c > output/boxed.c-5 $INDENT -npro -st $A6 boxed.c > output/boxed.c-6 $INDENT -npro -st $A7 boxed.c > output/boxed.c-7 $INDENT -npro -st $A8 boxed.c > output/boxed.c-8 $INDENT -npro -st $A9 boxed.c > output/boxed.c-9 $INDENT -npro outer.c -o output/outer.c-0 $INDENT -npro $A1 outer.c -o output/outer.c-1 $INDENT -npro $A2 outer.c -o output/outer.c-2 $INDENT -npro $A3 outer.c -o output/outer.c-3 $INDENT -npro $A4 outer.c -o output/outer.c-4 $INDENT -npro $A5 outer.c -o output/outer.c-5 $INDENT -npro $A6 outer.c -o output/outer.c-6 $INDENT -npro $A7 outer.c -o output/outer.c-7 $INDENT -npro $A8 outer.c -o output/outer.c-8 $INDENT -npro $A9 outer.c -o output/outer.c-9 A1="-fc1 -fca" A2="-fc1 -fca -cdb" A3="-fc1 -fca -cdb -sc" A4="-fc1 -fca -sc" A5="-fc1 -fca -l 50 -lc 50" A6="-fc1 -fca -l 50 -lc 50 -cdb" A7="-fc1 -fca -l 50 -lc 50 -sc" A8="-fc1 -fca -l 50 -lc 50 -sc -cdb" $INDENT -npro newlines.c -o output/newlines.c-0 $INDENT -npro $A1 newlines.c -o output/newlines.c-1 $INDENT -npro $A2 newlines.c -o output/newlines.c-2 $INDENT -npro $A3 newlines.c -o output/newlines.c-3 $INDENT -npro $A4 newlines.c -o output/newlines.c-4 $INDENT -npro $A5 newlines.c -o output/newlines.c-5 $INDENT -npro $A6 newlines.c -o output/newlines.c-6 $INDENT -npro $A7 newlines.c -o output/newlines.c-7 $INDENT -npro $A8 newlines.c -o output/newlines.c-8 A1="-l 50 -lc 50" A2="-l 50 -lc 50 -c 20" A3="-l 50 -lc 50 -cd 30" A4="-c 20 -cd 30" A5="-fc1 -fca" A6="-l 50 -lc 50 -fc1 -fca" A7="-cp 10" A8="-fc1 -fca -l50 -lc50 -c 30 -cd 20 -cp 8" A9="-cdb -sc -l 50 -lc 50 -fca -fc1" $INDENT -npro cplus.c -o output/cplus.c-0 $INDENT -npro $A1 cplus.c -o output/cplus.c-1 $INDENT -npro $A2 cplus.c -o output/cplus.c-2 $INDENT -npro $A3 cplus.c -o output/cplus.c-3 $INDENT -npro $A4 cplus.c -o output/cplus.c-4 $INDENT -npro $A5 cplus.c -o output/cplus.c-5 $INDENT -npro $A6 cplus.c -o output/cplus.c-6 $INDENT -npro $A7 cplus.c -o output/cplus.c-7 $INDENT -npro $A8 cplus.c -o output/cplus.c-8 $INDENT -npro $A9 cplus.c -o output/cplus.c-9 A1="-sc -cdb -fc1" A2="-i 10 -fc1" $INDENT -npro tabs.c -o -fc1 output/tabs.c-0 $INDENT -npro $A1 tabs.c -o output/tabs.c-1 $INDENT -npro $A2 tabs.c -o output/tabs.c-2 $INDENT -npro cplus-one.c -o output/cplus-one.c $INDENT -npro class-func.cc -o output/class-func.cc $INDENT -npro empty.c -o output/empty.c $INDENT -npro already-starred.c -o output/already-starred.c $INDENT -npro box-comm.c -o output/box-comm.c $INDENT -npro long-comm.c -o output/long-comm.c $INDENT -npro ind-star.c -o output/ind-star.c $INDENT -npro first-in-block.c -o output/first-in-block.c # currently fails $INDENT -npro two-on-line.c -o output/two-on-line.c $INDENT -npro method.c -o output/method.c A1="-fca" $INDENT -npro right-margin-comment.c $A1 -o output/right-margin-comment.c # These aren't really comment testing, they test the indent control # statements '*INDENT-ON*' and '*INDENT-OFF*' $INDENT -npro on-off-1.c -o output/on-off-1.c $INDENT -npro on-off-2.c -o output/on-off-2.c cd output ERR=errors # currently fails: two-on-line.c for i in boxed.c-* outer.c-* newlines.c-* cplus.c-* tabs.c-* cplus-one.c class-func.cc \ empty.c already-starred.c box-comm.c long-comm.c ind-star.c first-in-block.c \ on-off-1.c on-off-2.c \ method.c right-margin-comment.c do echo -n ...$i... diff --initial-tab ../standard/$i $i > $i-diffs 2>&1 if [ -s $i-diffs ] then echo -n ERROR: $i failed | tee -a $ERR echo >> $ERR else rm $i-diffs fi echo done echo Testing new comment stuff...Done. # Now see if any errors occured. If so, bitch and moan, otherwise, # remove the output directory. # if test -s $ERR then echo '**** Errors occured:' cat $ERR echo '**** Errors occured: ./output not removed' echo else cd .. rm -rf output echo echo Regression test successfully completed. echo fi