# Semana 9: excepciones y robustez.
#   make           compila todo a build/
#   make test      corre las demostraciones, los ejemplos que fallan a propósito
#                  y las pruebas JUnit
#   make test RUNFLAGS=-ea   las pruebas JUnit con las assertions activadas
#   make errores   muestra los errores de compilación de errores/*.java
#   make clean     borra build/
JAVAC    = javac
JFLAGS   = -Xlint:all -Werror
RUNFLAGS =
SRC      = $(wildcard *.java)
DEMOS    = Propagation ChainDemo ResourceDemo
ERRORES  = $(wildcard errores/*.java)

all: build/.stamp

build/.stamp: $(SRC)
	mkdir -p build
	$(JAVAC) $(JFLAGS) -cp $(JUNIT_JAR) -d build $(SRC)
	touch $@

test: all errores
	@for d in $(DEMOS); do echo "== $$d"; java -cp build $$d || exit 1; done
	@echo "== Propagation crash (debe terminar con error)"
	@! java -cp build Propagation crash
	@echo "== AssertDemo sin -ea"; java -cp build AssertDemo
	@echo "== AssertDemo con -ea (debe terminar con error)"
	@! java -ea -cp build AssertDemo
	java $(RUNFLAGS) -jar $(JUNIT_JAR) execute --class-path build --scan-class-path \
	  --disable-banner --disable-ansi-colors --details=tree

# Cada archivo de errores/ debe fallar al compilar.
errores: all
	@for f in $(ERRORES); do echo "== $$f (no debe compilar)"; \
	  if $(JAVAC) $(JFLAGS) -cp build -d build/errores $$f; then exit 1; fi; done

clean:
	rm -rf build

.PHONY: all test errores clean
