// Manage the files for the testing program
// Obtains the name of an executable file as well as names of directories 
// containing test input and expected output for that input
// Creates a report noting when the actual output obtained from running the 
// program on the test input differs from the expected output

// Beth Katz, August 2004

#include <iostream>
#include <string>
#include <cstdlib>
#include <vector>
#include "testing.h"

using namespace std;

int main (int argc, char * const argv[]) {
   if (argc != 4) {
      cerr << "Need exactly 3 command line arguments: "
           << "executableName inputDirectory expectedOutputDirectory\n";
      cerr << argc << " arguments provided" << endl;
      exit(2);
   } else {
      string execName(argv[1]);
      string inputDirName(argv[2]);
      string expectedOutDirName(argv[3]);
      vector<string> fileList;
      vector<string> outputList;
      string command; 
      string outputFilename;
      int result;
      
      if (fileExists(argv[1])) {
         cout << "Will run " << execName << endl;
      } else {
         cerr << "Executable file doesn't exist. Quitting.\n";
         exit(4);
      }
      
      fillFileList(argv[2], fileList);
      if (fileList.empty( )) {
         cerr << "No testing input files. Quitting.\n";
         exit(4);
      } else {
         printFileList("Input files", fileList);
         fillFileList(argv[3], outputList);
         if (outputList.empty( )) {
            cerr << "No testing output files. Quitting.\n";
            exit(4);
         } else {
            outputFilename = processIDstring( ) + ".out";
            result = runProgram(execName, inputDirName, fileList[0], 
                                outputFilename);
            
            // at this point, the file with name outputFilename contains the
            // result of having run the program with name execname with input
            // from inputDirName/filelist[0] 
            
            removeFile(outputFilename); // clean up when you're done with file
                                        // probably do this where you opened it
         }           
      }
   }
   return 0;
}