WALA/com.ibm.wala.ide.jsdt.tests/src/com/ibm/wala/ide/jsdt/tests/AbstractJSProjectScopeTest....

99 lines
4.2 KiB
Java
Raw Normal View History

2013-05-22 22:39:19 +00:00
/*******************************************************************************
* Copyright (c) 2013 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.ide.jsdt.tests;
import java.io.IOException;
import java.util.Collections;
import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.wst.jsdt.core.IJavaScriptProject;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import com.ibm.wala.cast.ipa.callgraph.CAstAnalysisScope;
import com.ibm.wala.cast.js.client.EclipseJavaScriptAnalysisEngine;
import com.ibm.wala.cast.js.client.EclipseJavaScriptAnalysisEngine.BuilderType;
import com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil;
import com.ibm.wala.cast.js.loader.JavaScriptLoader;
import com.ibm.wala.cast.js.translator.CAstRhinoTranslatorFactory;
import com.ibm.wala.cast.js.types.JavaScriptTypes;
import com.ibm.wala.classLoader.ModuleEntry;
import com.ibm.wala.ide.tests.util.EclipseTestUtil.ZippedProjectData;
import com.ibm.wala.ide.util.JavaScriptEclipseProjectPath;
import com.ibm.wala.ide.util.JavaScriptHeadlessUtil;
import com.ibm.wala.ide.util.JsdtUtil;
import com.ibm.wala.ide.util.JsdtUtil.CGInfo;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
import com.ibm.wala.ipa.cha.IClassHierarchy;
import com.ibm.wala.util.collections.Pair;
public abstract class AbstractJSProjectScopeTest {
new test to remind me that prototype no longer works with correlation tracking: com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestPrototypeCallGraphShapeRhino.java com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPrototypeCallGraphShape.java com.ibm.wala.cast.js.test.data/examples-src/pages/prototype.html work (not yet finished) on fixes to property accesses for JavaScript: com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java currently unused tests to remind me to fix bugs: com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShape.java com.ibm.wala.cast.js.test.data/examples-src/tests/loops.js com.ibm.wala.cast.js.test.data/examples-src/tests/primitive_strings.js fixes to exception handler code generation in JavaScript: com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java com.ibm.wala.cast.js.test.data/examples-src/tests/try.js com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShape.java fixes to make the system build on both juno and luna com.ibm.wala.cast.js.test.data/pom.xml pom.xml targets/e42/e42.target targets/e44/e44.target targets/pom.xml com.ibm.wala.core.tests/META-INF/MANIFEST.MF com.ibm.wala.dalvik.test/META-INF/MANIFEST.MF com.ibm.wala.ide.jdt.test/META-INF/MANIFEST.MF com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/FakeExceptionTypeBinding.java com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JavaEclipseProjectPath.java com.ibm.wala.ide.jsdt.tests/META-INF/MANIFEST.MF com.ibm.wala.ide.jsdt.tests/src/com/ibm/wala/ide/jsdt/tests/AbstractJSProjectScopeTest.java com.ibm.wala.ide/src/com/ibm/wala/ide/util/EclipseProjectPath.java com.ibm.wala.ide/src/com/ibm/wala/ide/util/ProgressMonitorDelegate.java beginnings of "pointer analysis" on top of field-based analysis com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/PropVertex.java com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/RetVertex.java com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/VarVertex.java com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/VertexFactory.java com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysis.java com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ExceptionReturnValueKey.java fixes for crashes in correlartion tracking com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java fixes for Dalvik IR generation com.ibm.wala.core/src/com/ibm/wala/cfg/BytecodeCFG.java com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/drivers/APKCallGraphDriver.java com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/JVMLDalvikComparison.java com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/DexCFG.java com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/dex/instructions/UnaryOperation.java com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/AbstractIntRegisterMachine.java com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/DexSSABuilder.java fixes to stack map generation when instrumenting for Java 7 com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/DynamicCallGraph.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConstantInstruction.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/Analyzer.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/ClassHierarchy.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/Verifier.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/ClassInstrumenter.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/StackMapConstants.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/StackMapTableReader.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/StackMapTableWriter.java
2014-10-15 07:01:38 +00:00
protected final ZippedProjectData project;
public AbstractJSProjectScopeTest(ZippedProjectData project) {
this.project = project;
}
@Test
public void testOpenProject() {
IJavaScriptProject p = JavaScriptHeadlessUtil.getJavaScriptProjectFromWorkspace(project.projectName);
System.err.println(p);
Assert.assertTrue("cannot find project", p != null);
}
@Test
public void testProjectScope() throws IOException, CoreException {
IJavaScriptProject p = JavaScriptHeadlessUtil.getJavaScriptProjectFromWorkspace(project.projectName);
JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory());
AnalysisScope s = makeProjectPath(p).toAnalysisScope(new CAstAnalysisScope(JSCallGraphUtil.makeLoaders(), Collections.singleton(JavaScriptLoader.JS)));
System.err.println(s);
Assert.assertTrue("cannot make scope", s != null);
Assert.assertFalse("cannot find files", s.getModules(JavaScriptTypes.jsLoader).isEmpty());
}
protected JavaScriptEclipseProjectPath makeProjectPath(IJavaScriptProject p) throws IOException, CoreException {
return JavaScriptEclipseProjectPath.make(p, Collections.<Pair<String,Plugin>>emptySet());
}
@Ignore("works for me on Eclipse Luna, but I cannot make it work with maven")
@Test
public void testParsing() throws IOException, CoreException {
Set<ModuleEntry> mes = JsdtUtil.getJavaScriptCodeFromProject(project.projectName);
CGInfo info = JsdtUtil.buildJSDTCallGraph(mes);
System.err.println(info.calls.size());
System.err.println("call graph:\n" + info.cg);
Assert.assertTrue("cannot find any function calls", info.calls.size()>0);
new test to remind me that prototype no longer works with correlation tracking: com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestPrototypeCallGraphShapeRhino.java com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPrototypeCallGraphShape.java com.ibm.wala.cast.js.test.data/examples-src/pages/prototype.html work (not yet finished) on fixes to property accesses for JavaScript: com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java currently unused tests to remind me to fix bugs: com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShape.java com.ibm.wala.cast.js.test.data/examples-src/tests/loops.js com.ibm.wala.cast.js.test.data/examples-src/tests/primitive_strings.js fixes to exception handler code generation in JavaScript: com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java com.ibm.wala.cast.js.test.data/examples-src/tests/try.js com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestSimpleCallGraphShape.java fixes to make the system build on both juno and luna com.ibm.wala.cast.js.test.data/pom.xml pom.xml targets/e42/e42.target targets/e44/e44.target targets/pom.xml com.ibm.wala.core.tests/META-INF/MANIFEST.MF com.ibm.wala.dalvik.test/META-INF/MANIFEST.MF com.ibm.wala.ide.jdt.test/META-INF/MANIFEST.MF com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/FakeExceptionTypeBinding.java com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JavaEclipseProjectPath.java com.ibm.wala.ide.jsdt.tests/META-INF/MANIFEST.MF com.ibm.wala.ide.jsdt.tests/src/com/ibm/wala/ide/jsdt/tests/AbstractJSProjectScopeTest.java com.ibm.wala.ide/src/com/ibm/wala/ide/util/EclipseProjectPath.java com.ibm.wala.ide/src/com/ibm/wala/ide/util/ProgressMonitorDelegate.java beginnings of "pointer analysis" on top of field-based analysis com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/PropVertex.java com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/RetVertex.java com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/VarVertex.java com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/vertices/VertexFactory.java com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysis.java com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ExceptionReturnValueKey.java fixes for crashes in correlartion tracking com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java fixes for Dalvik IR generation com.ibm.wala.core/src/com/ibm/wala/cfg/BytecodeCFG.java com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/drivers/APKCallGraphDriver.java com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/JVMLDalvikComparison.java com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/DexCFG.java com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/dex/instructions/UnaryOperation.java com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/AbstractIntRegisterMachine.java com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/DexSSABuilder.java fixes to stack map generation when instrumenting for Java 7 com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/DynamicCallGraph.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/ConstantInstruction.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/Analyzer.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/ClassHierarchy.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/Verifier.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/ClassInstrumenter.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/StackMapConstants.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/StackMapTableReader.java com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/StackMapTableWriter.java
2014-10-15 07:01:38 +00:00
Assert.assertTrue("cannot find any cg nodes", info.cg.getNumberOfNodes()>0);
}
@Test
public void testEngine() throws IOException, IllegalArgumentException {
IJavaScriptProject p = JavaScriptHeadlessUtil.getJavaScriptProjectFromWorkspace(project.projectName);
EclipseJavaScriptAnalysisEngine<InstanceKey> e = makeAnalysisEngine(p);
JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory());
e.buildAnalysisScope();
IClassHierarchy cha = e.getClassHierarchy();
2013-12-03 18:08:29 +00:00
//System.err.println(cha);
Assert.assertTrue(cha != null);
}
protected EclipseJavaScriptAnalysisEngine<InstanceKey> makeAnalysisEngine(IJavaScriptProject p) {
return new EclipseJavaScriptAnalysisEngine<>(p, BuilderType.REFLECTIVE);
}
}