committed patch from Evan Battaglia to support outer.new inner() form. Thanks!

git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@2592 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
dolby-oss 2008-02-18 15:18:00 +00:00
parent b648bd3ceb
commit fe12b77d85
2 changed files with 93 additions and 1 deletions

View File

@ -10,6 +10,6 @@ Require-Bundle: com.ibm.wala.core.tests,
com.ibm.wala.cast,
com.ibm.wala.core,
org.eclipse.core.runtime,
org.junit
org.junit4
Eclipse-LazyStart: true
Export-Package: com.ibm.wala.cast.java.test

View File

@ -14,6 +14,7 @@
package com.ibm.wala.cast.java.test;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
@ -25,6 +26,7 @@ import junit.framework.Assert;
import com.ibm.wala.cast.java.client.JavaSourceAnalysisEngine;
import com.ibm.wala.cast.java.ipa.slicer.AstJavaSlicer;
import com.ibm.wala.cast.java.loader.JavaSourceLoaderImpl;
import com.ibm.wala.cast.java.ssa.EnclosingObjectReference;
import com.ibm.wala.classLoader.IClass;
import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;
import com.ibm.wala.core.tests.slicer.SlicerTest;
@ -35,6 +37,8 @@ import com.ibm.wala.ipa.callgraph.CGNode;
import com.ibm.wala.ipa.callgraph.CallGraph;
import com.ibm.wala.ipa.callgraph.Entrypoint;
import com.ibm.wala.ipa.callgraph.impl.Util;
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
import com.ibm.wala.ipa.callgraph.propagation.LocalPointerKey;
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
import com.ibm.wala.ipa.cha.IClassHierarchy;
import com.ibm.wala.ipa.slicer.SDG;
@ -374,6 +378,94 @@ public class JavaIRTests extends IRTests {
}), true);
}
public void testInnerClassA() {
Pair x = runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), new ArrayList<IRAssertion>(), true);
// can't do an IRAssertion() -- we need the pointer analysis
CallGraph cg = (CallGraph) x.fst;
PointerAnalysis pa = (PointerAnalysis) x.snd;
Iterator<CGNode> iter = cg.iterator();
while ( iter.hasNext() ) {
CGNode n = iter.next();
// assume in the test we have one enclosing instruction for each of the methods here.
String methodSigs[] = { "InnerClassA$AB.getA_X_from_AB()I",
"InnerClassA$AB.getA_X_thru_AB()I",
"InnerClassA$AB$ABSubA.getA_X()I",
"InnerClassA$AB$ABA$ABAA.getABA_X()I",
"InnerClassA$AB$ABA$ABAA.getA_X()I",
"InnerClassA$AB$ABA$ABAB.getABA_X()I",
"InnerClassA$AB$ABSubA$ABSubAA.getABA_X()I",
"InnerClassA$AB$ABSubA$ABSubAA.getA_X()I", };
// each type suffixed by ","
String ikConcreteTypeStrings[ ]= {
"LInnerClassA,",
"LInnerClassA,",
"LInnerClassA,",
"LInnerClassA$AB$ABSubA,LInnerClassA$AB$ABA,",
"LInnerClassA,",
"LInnerClassA$AB$ABA,",
"LInnerClassA$AB$ABSubA,",
"LInnerClassA,",
};
Assert.assertTrue ( "Buggy test", methodSigs.length == ikConcreteTypeStrings.length );
for ( int i = 0; i < methodSigs.length; i++ ) {
if ( n.getMethod().getSignature().equals(methodSigs[i]) ) {
// find enclosing instruction
for ( SSAInstruction instr: n.getIR().getInstructions() ) {
if ( instr instanceof EnclosingObjectReference ) {
String allIks = "";
for (InstanceKey ik: pa.getPointsToSet(new LocalPointerKey(n,instr.getDef())))
allIks += ik.getConcreteType().getName() +",";
// System.out.printf("in method %s, got ik %s\n", methodSigs[i], allIks);
Assert.assertTrue("assertion failed: expecting ik " + ikConcreteTypeStrings[i] + " in method " + methodSigs[i] + ", got " + allIks + "\n",
allIks.equals(ikConcreteTypeStrings[i]));
break;
}
}
}
}
}
}
public void testInnerClassSuper() {
Pair x = runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), new ArrayList<IRAssertion>(), true);
// can't do an IRAssertion() -- we need the pointer analysis
CallGraph cg = (CallGraph) x.fst;
PointerAnalysis pa = (PointerAnalysis) x.snd;
Iterator<CGNode> iter = cg.iterator();
while ( iter.hasNext() ) {
CGNode n = iter.next();
if ( n.getMethod().getSignature().equals("LInnerClassSuper$SuperOuter.test()V") ) {
// find enclosing instruction
for ( SSAInstruction instr: n.getIR().getInstructions() ) {
if ( instr instanceof EnclosingObjectReference ) {
String allIks = "";
for (InstanceKey ik: pa.getPointsToSet(new LocalPointerKey(n,instr.getDef())))
allIks += ik.getConcreteType().getName() +",";
Assert.assertTrue("assertion failed: expecting ik \"LSub,\" in method, got \"" + allIks + "\"\n",
allIks.equals("LSub,"));
break;
}
}
}
}
}
public void testLocalClass() {
runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList(