package ilog.irl;

/**
 * @version	Last modified on Fri May 27 18:34:12 2005 by hak
 * @author	<a href="mailto:hak@ilog.fr">Hassan A&iuml;t-Kaci</a>
 * @copyright	&copy; 2003 <a href="http://www.ilog.fr/">ILOG, S.A.</a>
 */

// import java.io.PrintStream;
// import java.io.FileOutputStream;
// import ilog.language.io.FileTools;

import java.util.Date;
import java.util.Iterator;
import java.io.IOException;
import java.io.PrintStream;
import java.io.FileOutputStream;
import ilog.language.io.FileTools;
import ilog.language.util.Error;
import ilog.language.util.ArrayList;

public class TestParserScript
{
  static Tokenizer tokenizer = new Tokenizer();
  static Parser parser = new Parser(tokenizer);
  static ArrayList buggyFiles = new ArrayList();
  static PrintStream log = System.out;
  static String logFile;

  final public static void main (String args[])
    {
      FileTools.setSeparator('/');

      for (int i=0; i < args.length; i++) run(args[i]);

      dashes();
      writeReport(args.length,System.out);
      dashes();

      try
	{
	  log = new PrintStream(new FileOutputStream("Test.log"),true);
	  writeReport(args.length,log);
	  System.out.println("*** Wrote summary file: Test.log");
	}
      catch (IOException e)
	{
	  e.printStackTrace();
	}
    }

  final static void writeReport (int howMany, PrintStream out)
    {
      out.print("*** Tested " + howMany + " files");
      if (!buggyFiles.isEmpty())
	{
	  out.println(", among which the following "+buggyFiles.size()+" have errors:");
	  int n = 0;
	  for (Iterator i=buggyFiles.iterator(); i.hasNext();)
	    out.println((++n)+"\t"+i.next());
	}
      else
	out.println("; no errors found in any file!");
      out.println("*** Test log created on " + new Date());
    }  

  final static void dashes ()
    {
      for (int i=0; i<=80; i++) System.out.print("-");	    
      System.out.println();
    }
  
  final static void run (String file)
    {
      try
	{
	  dashes();
	  logFile = "log/"+FileTools.prefix(file)+".log";
 	  log = new PrintStream(new FileOutputStream(logFile),true);
	  parser.setOutputStream(log);
	  parser.errorManager().setErrorStream(log);
	  tokenizer.setFile(file);
	  System.out.println("*** Testing file: "+file);
	  log.println("*** Parsing file: "+file);
	  parser.setStart();
	  parser.parse();
	}
      catch (IOException e)
	{
	  parser.errorManager().reportError(new Error().setLabel("IO Error: ")
	                                      .setMsg(e.getMessage()+" - giving up!")
			                      .setSee("..."));
	}
      catch (Throwable e)
        {
        }
      finally
	{
	  parser.errorManager().tallyErrors();
	  if (parser.errorManager().hasErrors())
	    buggyFiles.add(file+"\t["+logFile+"]");
// 	    buggyFiles.add(file);
	  System.out.println("*** See test log file: "+logFile);
	  parser.errorManager().reset();
	}
    }	   
}


