1 # Very rough testing framework for the annotator. Running 'make all' will 2 # look for all myClass.goal files in this directory, run the annotator on the 3 # corresponding .jaif and .java files, and then output the difference in a 4 # myClass.diff file in this directory. 5 # 6 # To test just one file, use (for example) 'make myClass.diff'. 7 8 # Put user-specific changes in your own Makefile.user. 9 # Make will silently continue if that file does not exist. 10 -include Makefile.user 11 12 # Override these in Makefile.user if the java and javac commands are not on 13 # your execution path. Example from Makefile.user: 14 # JAVA=${JAVA_HOME}/bin/java 15 # JAVAC=${JAVA_HOME}/bin/javac 16 export JAVA?=java -ea 17 export JAVAC?=javac 18 export XJAVAC?=javac 19 20 export SHELL=/bin/bash -o pipefail 21 22 23 DIFFS := $(wildcard *.goal) 24 DISABLED := $(shell grep -le "@skip-test" $(DIFFS)) 25 FILTERED := $(filter-out $(DISABLED),$(DIFFS)) 26 DIFFS := $(patsubst %.goal, %.diff, $(FILTERED)) 27 28 DEBUG := 29 # Use this to enable some debugging. 30 # DEBUG := --debug 31 32 default : all 33 34 .PHONY: all 35 all : $(DIFFS) abbreviated ad-hoc system-test source-extension results 36 37 .PHONY: abbreviated 38 abbreviated: 39 ${MAKE} -C abbreviated 40 41 .PHONY: ad-hoc 42 ad-hoc: 43 ${MAKE} -C ad-hoc 44 45 .PHONY: source-extension 46 source-extension: 47 ${MAKE} -C source-extension 48 49 .PHONY: system-test 50 system-test: 51 ${MAKE} -C system-test 52 53 # Display results of all .diff files. 54 .PHONY: results 55 results: bin/VerifyDiffs.class 56 @echo "" 57 @echo "=== RESULTS ===" 58 @echo "" 59 @$(JAVA) -cp bin VerifyDiffs --show_all 60 61 # Remakes the little java program that checks and compares diffs 62 bin/VerifyDiffs.class : VerifyDiffs.java 63 @$(JAVAC) -g -cp ../bincompile -d bin VerifyDiffs.java 64 65 # Compiles all the test cases (be verbose about this). 66 compile : 67 mkdir -p bin 68 $(XJAVAC) -g -cp ../bin -d bin *.java 69 70 .PRECIOUS : bin/annotator/tests/%.class 71 bin/annotator/tests/%.class: %.java 72 mkdir -p bin 73 # Added "-Xlint:-options" to see if it permits Jenkins job to succeed, due to 74 # problem "target value 1.8 is obsolete and will be removed in a future release" 75 $(XJAVAC) -Xlint:-options -g -cp bin:../annotation-file-utilities.jar -d bin -sourcepath . $*.java 76 77 # Actually runs the annotator to create the annotated java file. 78 .PRECIOUS: %.output 79 %.output: %.jaif %.java bin/annotator/tests/%.class ../lib/plume-core.jar ../bin ../annotation-file-utilities.jar 80 $(JAVA) \ 81 -cp ../bin:../annotation-file-utilities.jar:bin \ 82 annotator.Main \ 83 ${DEBUG} \ 84 --abbreviate=false \ 85 -d $*-output \ 86 $*.jaif \ 87 $*.java \ 88 2>&1 | tee $*.log 89 find "$*-output" -name '*.java' -print | xargs cat > "$*.output" 90 rm -rf $*-output 91 92 # Compare the output of the annotator and the goal file. 93 %.diff: %.goal %.output 94 -diff -u $*.goal $*.output >& $*.diff 95 96 # Remove all .diff, .log files from the tests directory. 97 .PHONY: clean 98 clean : 99 rm -rf bin 100 rm -f *.diff 101 rm -f *.log 102 rm -f *.output 103 (cd abbreviated && make clean) 104 (cd ad-hoc && make clean) 105