package kr.ac.snu.selab.soot; import static org.junit.Assert.assertNotNull; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.util.List; import kr.ac.snu.selab.soot.analyzer.AbstractAnalyzer; import kr.ac.snu.selab.soot.core.AbstractProject; import kr.ac.snu.selab.soot.core.ProjectManager; import org.apache.log4j.Logger; import org.junit.Before; import org.junit.Test; import soot.Hierarchy; import soot.PackManager; import soot.SootClass; import soot.Transform; public class SampleTest { private static Logger logger = Logger.getLogger(SampleTest.class); private static final String PROJECTS_NAME = "StatePatternExample"; private static final String PROJECTS_FILE_NAME = "projects.xml"; int targetClassCount = 0; @Before public void prepare() throws Throwable { targetClassCount = 0; ProjectManager projects = ProjectManager.getInstance(); FileInputStream fis = null; try { fis = new FileInputStream(findProjectsFile()); projects.loadProjects(fis); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { } } } AbstractProject project = projects.getProject(PROJECTS_NAME); assertNotNull("Cannot find project!!!", project); AbstractAnalyzer analyzer = new TestRunner(project); PackManager.v().getPack("jtp") .add(new Transform("jtp.Experiment", analyzer)); final String[] arguments = { "-cp", project.getClassPath(), "-f", "n", "-d", "", "--process-dir", project.getSourceDirectory() }; soot.Main.main(arguments); } @Test public void doNothing() { //assertEquals(0, targetClassCount); logger.debug("hello from SampleTest"); } private class TestRunner extends AbstractAnalyzer { public TestRunner(AbstractProject project) { super(project); } @Override protected void analyze(List<SootClass> classList, Hierarchy hierarchy) { assertNotNull("Target classes not found", classList); //assertEquals(7, classList.size()); targetClassCount = classList.size(); } } private static File findProjectsFile() { URL url = ClassLoader.getSystemResource(PROJECTS_FILE_NAME); if (url == null) { return null; } File file = new File(url.getFile()); if (file == null || !file.exists() || !file.isFile()) { return null; } return file; } }