Home | History | Annotate | Download | only in tests
      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