Package org.trifort.rootbeer.entry

Source Code of org.trifort.rootbeer.entry.RootbeerTest

/*
* Copyright 2012 Phil Pratt-Szeliga and other contributors
* http://chirrup.org/
*
* See the file LICENSE for copying permission.
*/

package org.trifort.rootbeer.entry;

import java.lang.ref.WeakReference;
import java.lang.reflect.Method;

import org.trifort.rootbeer.configuration.Configuration;
import org.trifort.rootbeer.runtime.Rootbeer;
import org.trifort.rootbeer.test.RootbeerTestAgent;
import org.trifort.rootbeer.util.CurrJarName;
import org.trifort.rootbeer.util.ForceGC;

import soot.G;
import soot.Modifier;

public class RootbeerTest {
 
  private String destJAR;
 
  public RootbeerTest(){
    destJAR = "output.jar";
  }
 
  public void runTests(String test_case, boolean run_hard_tests) {
    RootbeerCompiler compiler = new RootbeerCompiler()
    CurrJarName jar_name = new CurrJarName();
    String rootbeer_jar = jar_name.get();
    try {
      if(test_case == null){
        compiler.compile(rootbeer_jar, destJAR, true);
      } else {
        compiler.compile(rootbeer_jar, destJAR, test_case);
      }
     
      test_case = compiler.getProvider();
     
      //clear out the memory used by soot and compiler
      compiler = null;
      G.reset();
      ForceGC.gc();
     
      runTestCases(test_case, run_hard_tests);
     
    } catch(Exception ex){
      ex.printStackTrace();
      System.exit(-1);
    }
  }

  public void repeatTests() {
    try {
      runTestCases(null, false);
    } catch(Exception ex){
      ex.printStackTrace();
      System.exit(-1);
    }
  }
 
  private void runTestCases(String test_case, boolean run_hard_tests) throws Exception {  
    JarClassLoader loader_factory = new JarClassLoader(destJAR);
    ClassLoader cls_loader = loader_factory.getLoader();
    Thread.currentThread().setContextClassLoader(cls_loader);
   
    Class agent_class = cls_loader.loadClass("org.trifort.rootbeer.test.RootbeerTestAgent");
    Object agent_obj = agent_class.newInstance();
    Method[] methods = agent_class.getMethods();
    if(test_case == null){
      Method test_method = findMethodByName("test", methods);
      test_method.invoke(agent_obj, cls_loader, run_hard_tests);
    } else {
      Method test_method = findMethodByName("testOne", methods);
      test_method.invoke(agent_obj, cls_loader, test_case);
    }
  }
 
 
  private Method findMethodByName(String name, Method[] methods){
    for(Method method : methods){
      if(method.getName().equals(name)){
        return method;
      }
    }
    return null;
  }
}
TOP

Related Classes of org.trifort.rootbeer.entry.RootbeerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.