package largetests;

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

public class TestJavac extends TestCaseParse {
	  String[] filesToParse = {
			"com/sun/tools/javac/Main.java",
			"com/sun/tools/javac/v8/CommandLine.java",
			"com/sun/tools/javac/v8/JavaCompiler.java",
			"com/sun/tools/javac/v8/Main.java",
			"com/sun/tools/javac/v8/Retro.java",
			"com/sun/tools/javac/v8/code/ByteCodes.java",
			"com/sun/tools/javac/v8/code/CRTFlags.java",
			"com/sun/tools/javac/v8/code/CRTable.java",
			"com/sun/tools/javac/v8/code/ClassFile.java",
			"com/sun/tools/javac/v8/code/ClassReader.java",
			"com/sun/tools/javac/v8/code/ClassWriter.java",
			"com/sun/tools/javac/v8/code/Code.java",
			"com/sun/tools/javac/v8/code/CompleteClassReader.java",
			"com/sun/tools/javac/v8/code/Flags.java",
			"com/sun/tools/javac/v8/code/Kinds.java",
			"com/sun/tools/javac/v8/code/Pool.java",
			"com/sun/tools/javac/v8/code/Scope.java",
			"com/sun/tools/javac/v8/code/Source.java",
			"com/sun/tools/javac/v8/code/Symbol.java",
			"com/sun/tools/javac/v8/code/Symtab.java",
			"com/sun/tools/javac/v8/code/Target.java",
			"com/sun/tools/javac/v8/code/Type.java",
			"com/sun/tools/javac/v8/code/TypeTags.java",
			"com/sun/tools/javac/v8/comp/Attr.java",
			"com/sun/tools/javac/v8/comp/AttrContext.java",
			"com/sun/tools/javac/v8/comp/AttrContextEnv.java",
			"com/sun/tools/javac/v8/comp/Check.java",
			"com/sun/tools/javac/v8/comp/ConstFold.java",
			"com/sun/tools/javac/v8/comp/Enter.java",
			"com/sun/tools/javac/v8/comp/Env.java",
			"com/sun/tools/javac/v8/comp/Flow.java",
			"com/sun/tools/javac/v8/comp/Gen.java",
			"com/sun/tools/javac/v8/comp/Infer.java",
			"com/sun/tools/javac/v8/comp/Items.java",
			"com/sun/tools/javac/v8/comp/Resolve.java",
			"com/sun/tools/javac/v8/comp/Symtab.java",
			"com/sun/tools/javac/v8/comp/Todo.java",
			"com/sun/tools/javac/v8/comp/TransInner.java",
			"com/sun/tools/javac/v8/comp/TransTypes.java",
			"com/sun/tools/javac/v8/parser/Keywords.java",
			"com/sun/tools/javac/v8/parser/Parser.java",
			"com/sun/tools/javac/v8/parser/Scanner.java",
			"com/sun/tools/javac/v8/parser/Tokens.java",
			"com/sun/tools/javac/v8/tree/Pretty.java",
			"com/sun/tools/javac/v8/tree/Tree.java",
			"com/sun/tools/javac/v8/tree/TreeInfo.java",
			"com/sun/tools/javac/v8/tree/TreeMaker.java",
			"com/sun/tools/javac/v8/tree/TreeScanner.java",
			"com/sun/tools/javac/v8/tree/TreeTranslator.java",
			"com/sun/tools/javac/v8/util/Abort.java",
			"com/sun/tools/javac/v8/util/Bits.java",
			"com/sun/tools/javac/v8/util/ByteBuffer.java",
			"com/sun/tools/javac/v8/util/Context.java",
			"com/sun/tools/javac/v8/util/Convert.java",
			"com/sun/tools/javac/v8/util/Enumeration.java",
			"com/sun/tools/javac/v8/util/FatalError.java",
			"com/sun/tools/javac/v8/util/FileEntry.java",
			"com/sun/tools/javac/v8/util/Hashtable.java",
			"com/sun/tools/javac/v8/util/LayoutCharacters.java",
			"com/sun/tools/javac/v8/util/List.java",
			"com/sun/tools/javac/v8/util/ListBuffer.java",
			"com/sun/tools/javac/v8/util/Log.java",
			"com/sun/tools/javac/v8/util/Name.java",
			"com/sun/tools/javac/v8/util/Options.java",
			"com/sun/tools/javac/v8/util/Pair.java",
			"com/sun/tools/javac/v8/util/Position.java",
			"com/sun/tools/javac/v8/util/Set.java"

	  		};

   String classpath = "javac-v8/javac";

   public void testDevirtualization() {
	  Program program = parse(classpath, filesToParse);
	  assertEquals(7254, program.totalVirtualCountInSourceFiles());
	  assertEquals(5250, program.ZSdevirtCountInSourceFiles());
	  assertEquals(5929, program.NOMdevirtCountInSourceFiles());
   }

   public void testCallGraph() {
   	  Program program = parse(classpath, filesToParse);
      assertEquals(8125, program.countTCGedgesInSourcefiles());
      assertEquals(0, program.countTCGedgesInImportedfiles()); // Methods of class files are not analyzed.
   }

}
