blob: 46c2533dd0d83c5338372cb44ac53152d8d2dd0d [file] [log] [blame]
# System test of annotation tools
# This test runs most of the AFU tools, on a single program
# source-ann/AnnotationTest.java that contains an annotation in every
# possible location.
ANNCAT ?= ../../../scene-lib/anncat
JAVAVERSION = $(shell $(JAVA) -version 2>&1)
ifeq (1.7.,$(findstring 1.7.,$(JAVAVERSION)))
XJAVACTARGET = -source 7 -target 7
endif
#Switch the lines below to deactivate this test
all: clean results
#all: warn_and_exit
warn_and_exit:
@echo ""
@echo "******************************************************"
@echo "Warning: The sytem test has been temporarily disabled!"
@echo "******************************************************"
@echo ""
results: out1 check-out2 out3 out4.class check-out5
clean:
rm -rf out[1-5]*
# Step 1: Compile the source with annotations.
out1:
mkdir out1
${XJAVAC} ${XJAVACTARGET} -d out1 source-ann/AnnotationTest.java || (\rm -rf out1 && false)
# Step 2: Convert the annotated class file to an annotation file.
# Do we get the right annotations?
out2.jaif:
CLASSPATH=`pwd`/out1 ${ANNCAT} --class out1/annotations/tests/AnnotationTest.class --out --index out2.jaif
out2.diff: out2.jaif
diff -u expected-annos.jaif out2.jaif > out2.diff
.PHONY: check-out2
# Fail if out2.diff is non-empty
check-out2: out2.diff
[ ! -s out2.diff ] || (cat out2.diff && false)
# Step 3: Compile the source without annotations.
out3:
mkdir out3
${XJAVAC} ${XJAVACTARGET} -d out3 source-plain/AnnotationTest.java || (\rm -rf out3 && false)
# Step 4: Insert annotations into the class file.
# Can debug with: javap -v out4.class
out4.class: out3
CLASSPATH=`pwd`/out1 ${ANNCAT} --index expected-annos.jaif --out --class out3/annotations/tests/AnnotationTest.class --to out4.class
# Step 5: Convert the annotation-inserted class file to an annotation file.
# Do we get the right annotations?
# (The annotation-compiled and annotation-inserted class files tend to differ
# for stupid reasons (e.g., order of items in the constant pool), so we don't
# compare them.)
out5.jaif: out4.class
CLASSPATH=`pwd`/out1 ${ANNCAT} --class out4.class --out --index out5.jaif
out5.diff: out5.jaif
diff -u expected-annos.jaif out5.jaif > out5.diff
.PHONY: check-out5
# Fail if out5.diff is non-empty
check-out5: out5.diff
[ ! -s out5.diff ] || (cat out5.diff && false)