package testframework;

import java.io.*;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Iterator;

import AST.*;
import junit.framework.TestCase;

public abstract class TestCaseParse extends TestCase {
	
  protected static Program parse(String classpath, String[] sourcefiles) {
    Program program = new Program();
    program.initBytecodeReader(new BytecodeParser());
    program.initJavaParser(
      new JavaParser() {
        public CompilationUnit parse(InputStream is, String fileName) throws IOException, beaver.Parser.Exception {
          return new parser.JavaParser().parse(is, fileName);
        }
      }
    );
    program.initOptions();

    program.addKeyValueOption("-classpath");
    program.addKeyValueOption("-sourcepath");
    program.addKeyValueOption("-bootclasspath");
    program.addKeyValueOption("-extdirs");
    program.addKeyValueOption("-d");
    program.addKeyOption("-verbose");

    program.addOptions(sourcefiles);
    program.addOptions(new String[] { "-classpath", classpath });
    Collection files = program.files();

    for(Iterator iter = files.iterator(); iter.hasNext(); ) {
      String name = (String)iter.next();
      program.addSourceFile(classpath + "/" + name);
    }

    try {
      for(Iterator iter = program.compilationUnitIterator(); iter.hasNext(); ) {
        CompilationUnit unit = (CompilationUnit)iter.next();
        if(unit.fromSource()) {
          Collection errors = new LinkedList();
          unit.errorCheck(errors);
        }
      }
    } catch (Error e) {
    }
    return program;
  }

}
