#! /bin/csh
#
# shell script for testing 1 student's program 1
#

# location of files provided to the students (that they don't change)
set providedFiles = /p/course/cs367-hasti/public/html/assignments/p1/files

# location of test files
set testFiles = /p/course/cs367-hasti/public/html/assignments/p1/grading/testFiles

# location of solution files
set solnFiles = /p/course/cs367-hasti/public/html/assignments/p1/solution

if ($#argv == 0) then
        echo Usage: $0 directory
        exit 1
endif

if (-e $1) else
  echo "$1" does not exist
  exit
endif

# copy student's files into JAVA subdirectory
cd $argv[1]
mkdir JAVA
cp $providedFiles/Customer.java JAVA/
if (-e *2014*CustomerDatabase.java) then
	cp *2014*CustomerDatabase.java JAVA/CustomerDatabase.java
	if (-e *2014*InteractiveDBTester.java) then
		cp *2014*InteractiveDBTester.java JAVA/InteractiveDBTester.java
	else
		echo "InteractiveDBTester.java missing or misnamed"
		exit
	endif
else
	echo "CustomerDatabase.java missing or misnamed"
	exit
endif

# copy test files
cp $testFiles/CustomerDatabaseTester.java JAVA/
cp $testFiles/*.txt JAVA/ 

cd JAVA/
javac *.java

# test student's CustomerDatabase
if (-e CustomerDatabaseTester.class) then
  echo "testing student's CustomerDatabase"
  java CustomerDatabaseTester >& err_CustomerDatabase.txt
endif

# test student's InteractiveDBTester with student's CustomerDatabase
if (-e InteractiveDBTester.class) then
  echo "testing student's InteractiveDBTester with student's CustomerDatabase"
else
  echo "student InteractiveDBTester didn't compile, substituting our InteractiveDBTester"
  mv InteractiveDBTester.java SAVE_InteractiveDBTester
  cp $solnFiles/InteractiveDBTester.java .
  javac *.java
  if (-e InteractiveDBTester.class) then
    echo "student CustomerDatabase doesn't compile with our InteractiveDBTester"
	exit
  endif
endif
  
  java InteractiveDBTester input1.txt < sf1.txt >& student_sf1.txt 
  diff -wiB student_sf1.txt expected_sf1.txt >& err_sf1.txt
  
  java InteractiveDBTester input1.txt < d1.txt >& student_d1.txt 
  diff -wiB student_d1.txt expected_d1.txt >& err_d1.txt
  
  java InteractiveDBTester input1.txt < r1.txt >& student_r1.txt 
  diff -wiB student_r1.txt expected_r1.txt >& err_r1.txt
  
  java InteractiveDBTester input1.txt < case1.txt >& student_case1.txt 
  diff -wiB student_case1.txt expected_case1.txt >& err_case1.txt
  
  java InteractiveDBTester input2.txt < i2.txt >& student_i2.txt 
  diff -wiB student_i2.txt expected_i2.txt >& err_i2.txt
  
  java InteractiveDBTester input3.txt < user3.txt >& student_user3.txt 
  diff -wiB student_user3.txt expected_user3.txt >& err_user3.txt

# test student's InteractiveDBTester with our CustomerDatabase
if (-e SAVE_InteractiveDBTester) else
  echo "testing student's InteractiveDBTester with our CustomerDatabase"
  mv CustomerDatabase.java SAVE_CustomerDatabase
  cp $solnFiles/CustomerDatabase.java .
  javac *.java
  if (-e InteractiveDBTester.class) then
    echo "student InteractiveDBTester doesn't compile with our CustomerDatabase"
    java InteractiveDBTester input3.txt < user3.txt >& ourDB_user3.txt 
    diff -wiB ourDB_user3.txt expected_user3.txt >& err_ourDB3.txt
  endif
endif

# move error report files to ERR/
mkdir ../ERR
mv err_*.txt ../ERR/

# clean up
\rm -f *.class

# restore student's files
if (-e SAVE_InteractiveDBTester) then 
  \rm -f InteractiveDBTester.java
  \mv SAVE_InteractiveDBTester InteractiveDBTester.java
endif 
if (-e SAVE_CustomerDatabase) then 
  \rm -f CustomerDatabase.java
  \mv SAVE_CustomerDatabase CustomerDatabase.java
endif 
