2007-02-02 17:28:04 +00:00
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright ( c ) 2002 - 2006 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.cast.js.test ;
2007-07-11 21:08:26 +00:00
import java.io.IOException ;
2012-01-06 21:21:26 +00:00
import java.util.List ;
2007-02-02 17:28:04 +00:00
2012-01-06 21:21:26 +00:00
import junit.framework.Assert ;
2014-02-09 02:37:39 +00:00
import org.eclipse.core.runtime.IProgressMonitor ;
2009-07-27 23:21:22 +00:00
import org.junit.Test ;
2013-06-10 13:02:12 +00:00
import com.ibm.wala.cast.ipa.callgraph.CAstCallGraphUtil ;
2012-03-01 02:45:51 +00:00
import com.ibm.wala.cast.js.ipa.callgraph.JSCFABuilder ;
2013-06-03 17:44:06 +00:00
import com.ibm.wala.cast.js.ipa.callgraph.PropertyNameContextSelector ;
2010-11-05 00:36:44 +00:00
import com.ibm.wala.ipa.callgraph.CGNode ;
2007-07-11 21:08:26 +00:00
import com.ibm.wala.ipa.callgraph.CallGraph ;
2013-04-09 22:47:22 +00:00
import com.ibm.wala.ipa.callgraph.CallGraphBuilderCancelException ;
2007-07-11 21:08:26 +00:00
import com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder ;
2013-04-09 22:47:22 +00:00
import com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder ;
2009-06-22 15:06:12 +00:00
import com.ibm.wala.util.CancelException ;
2014-02-09 02:37:39 +00:00
import com.ibm.wala.util.NullProgressMonitor ;
import com.ibm.wala.util.ProgressMaster ;
2013-04-09 22:47:22 +00:00
import com.ibm.wala.util.WalaException ;
2012-01-06 21:21:26 +00:00
import com.ibm.wala.util.collections.Iterator2Collection ;
2007-02-02 17:28:04 +00:00
2009-07-27 23:21:22 +00:00
public abstract class TestSimpleCallGraphShape extends TestJSCallGraphShape {
2007-02-02 17:28:04 +00:00
public static void main ( String [ ] args ) {
justThisTest ( TestSimpleCallGraphShape . class ) ;
}
2012-01-27 20:15:33 +00:00
protected static final Object [ ] [ ] assertionsForArgs = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/args.js " } } ,
new Object [ ] {
" tests/args.js " ,
new String [ ] { " tests/args.js/a " } } ,
new Object [ ] { " tests/args.js/a " , new String [ ] { " tests/args.js/x " , " tests/args.js/y " } } } ;
2013-04-09 22:47:22 +00:00
@Test public void testArgs ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:24:32 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " args.js " ) ;
2012-01-27 20:15:33 +00:00
verifyGraphAssertions ( CG , assertionsForArgs ) ;
}
2007-02-02 17:28:04 +00:00
protected static final Object [ ] [ ] assertionsForSimple = new Object [ ] [ ] {
2008-02-13 22:34:36 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/simple.js " } } ,
new Object [ ] {
" tests/simple.js " ,
new String [ ] { " tests/simple.js/bad " , " tests/simple.js/silly " , " tests/simple.js/fib " , " tests/simple.js/stranger " ,
" tests/simple.js/trivial " , " tests/simple.js/rubbish " , " tests/simple.js/weirder " } } ,
new Object [ ] { " tests/simple.js/trivial " , new String [ ] { " tests/simple.js/trivial/inc " } } ,
new Object [ ] { " tests/simple.js/rubbish " ,
new String [ ] { " tests/simple.js/weirder " , " tests/simple.js/stranger " , " tests/simple.js/rubbish " } } ,
new Object [ ] { " tests/simple.js/fib " , new String [ ] { " tests/simple.js/fib " } } ,
2012-09-18 17:22:17 +00:00
new Object [ ] { " tests/simple.js/weirder " , new String [ ] { " prologue.js/Math_abs " } } } ;
2007-02-02 17:28:04 +00:00
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testSimple ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " simple.js " ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForSimple ) ;
}
private static final Object [ ] [ ] assertionsForObjects = new Object [ ] [ ] {
2008-02-13 22:34:36 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/objects.js " } } ,
new Object [ ] { " tests/objects.js " ,
new String [ ] { " tests/objects.js/objects_are_fun " , " tests/objects.js/other " , " tests/objects.js/something " } } ,
new Object [ ] { " tests/objects.js/other " ,
new String [ ] { " tests/objects.js/something " , " tests/objects.js/objects_are_fun/nothing " } } ,
new Object [ ] { " tests/objects.js/objects_are_fun " , new String [ ] { " tests/objects.js/other " , " tests/objects.js/whatever " } } } ;
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testObjects ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " objects.js " ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForObjects ) ;
}
private static final Object [ ] [ ] assertionsForInherit = new Object [ ] [ ] {
2008-02-13 22:34:36 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/inherit.js " } } ,
new Object [ ] {
" tests/inherit.js " ,
new String [ ] { " tests/inherit.js/objectMasquerading " , " tests/inherit.js/objectMasquerading/Rectangle/area " ,
" tests/inherit.js/Polygon/shape " , " tests/inherit.js/sharedClassObject " ,
" tests/inherit.js/sharedClassObject/Rectangle/area " } } ,
/ *
* new Object [ ] { " tests/inherit.js/objectMasquerading " , new
2012-01-06 21:21:26 +00:00
* String [ ] { " ctor:tests/inherit.js/objectMasquerading/Rectangle " } } , new
* Object [ ] { " tests/inherit.js/sharedClassObject " , new
* String [ ] { " ctor:tests/inherit.js/sharedClassObject/Rectangle " } } ,
2008-02-13 22:34:36 +00:00
* /
2007-02-02 17:28:04 +00:00
} ;
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testInherit ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " inherit.js " ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForInherit ) ;
}
2012-01-06 21:21:26 +00:00
private static final Object [ ] [ ] assertionsForNewfn = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/newfn.js " } } ,
new Object [ ] { " tests/newfn.js " ,
new String [ ] { " suffix:ctor$1/_fromctor " , " suffix:ctor$2/_fromctor " , " suffix:ctor$3/_fromctor " } } } ;
2007-02-02 17:28:04 +00:00
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testNewfn ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " newfn.js " ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForNewfn ) ;
}
private static final Object [ ] [ ] assertionsForControlflow = new Object [ ] [ ] {
2008-02-13 22:34:36 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/control-flow.js " } } ,
new Object [ ] {
" tests/control-flow.js " ,
new String [ ] { " tests/control-flow.js/testSwitch " , " tests/control-flow.js/testDoWhile " ,
" tests/control-flow.js/testWhile " , " tests/control-flow.js/testFor " , " tests/control-flow.js/testReturn " } } } ;
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testControlflow ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " control-flow.js " ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForControlflow ) ;
}
private static final Object [ ] [ ] assertionsForMoreControlflow = new Object [ ] [ ] {
2008-02-13 22:34:36 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/more-control-flow.js " } } ,
new Object [ ] {
" tests/more-control-flow.js " ,
new String [ ] { " tests/more-control-flow.js/testSwitch " , " tests/more-control-flow.js/testIfConvertedSwitch " ,
" tests/more-control-flow.js/testDoWhile " , " tests/more-control-flow.js/testWhile " ,
" tests/more-control-flow.js/testFor " , " tests/more-control-flow.js/testReturn " } } } ;
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testMoreControlflow ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " more-control-flow.js " ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForMoreControlflow ) ;
}
2008-02-13 22:34:36 +00:00
private static final Object [ ] [ ] assertionsForForin = new Object [ ] [ ] { new Object [ ] { ROOT , new String [ ] { " tests/forin.js " } } ,
new Object [ ] { " tests/forin.js " , new String [ ] { " tests/forin.js/testForIn " } } ,
new Object [ ] { " tests/forin.js/testForIn " , new String [ ] { " tests/forin.js/testForIn1 " , " tests/forin.js/testForIn2 " } } } ;
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testForin ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-03-01 02:45:51 +00:00
JSCFABuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " forin.js " ) ;
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
2012-07-03 22:55:02 +00:00
// JSCallGraphUtil.AVOID_DUMP = false;
2013-08-29 14:16:38 +00:00
CAstCallGraphUtil . dumpCG ( B . getPointerAnalysis ( ) , CG ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForForin ) ;
}
private static final Object [ ] [ ] assertionsForSimpleLexical = new Object [ ] [ ] {
2008-02-13 22:34:36 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/simple-lexical.js " } } ,
new Object [ ] { " tests/simple-lexical.js " , new String [ ] { " tests/simple-lexical.js/outer " } } ,
new Object [ ] {
" tests/simple-lexical.js/outer " ,
new String [ ] { " tests/simple-lexical.js/outer/indirect " , " tests/simple-lexical.js/outer/inner " ,
" tests/simple-lexical.js/outer/inner2 " , " tests/simple-lexical.js/outer/inner3 " } } ,
new Object [ ] { " tests/simple-lexical.js/outer/inner2 " ,
2011-04-27 13:58:56 +00:00
new String [ ] { " tests/simple-lexical.js/outer/inner " , " tests/simple-lexical.js/outer/inner3 " } } ,
new Object [ ] { " tests/simple-lexical.js/outer/indirect " ,
2008-02-13 22:34:36 +00:00
new String [ ] { " tests/simple-lexical.js/outer/inner " , " tests/simple-lexical.js/outer/inner3 " } } } ;
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testSimpleLexical ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " simple-lexical.js " ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForSimpleLexical ) ;
}
2012-01-06 21:36:10 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testRecursiveLexical ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-01-06 21:36:10 +00:00
// just checking that we have a sufficient bailout to ensure termination
2012-02-17 20:21:59 +00:00
JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " recursive_lexical.js " ) ;
2012-01-06 21:36:10 +00:00
}
2012-01-06 21:43:58 +00:00
private static final Object [ ] [ ] assertionsForLexicalMultiple = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/lexical_multiple_calls.js " } } ,
new Object [ ] { " suffix:lexical_multiple_calls.js " , new String [ ] { " suffix:reachable1 " } } ,
new Object [ ] { " suffix:lexical_multiple_calls.js " , new String [ ] { " suffix:reachable2 " } } } ;
@Test
2013-04-09 22:47:22 +00:00
public void testLexicalMultiple ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " lexical_multiple_calls.js " ) ;
2012-01-06 21:43:58 +00:00
verifyGraphAssertions ( CG , assertionsForLexicalMultiple ) ;
}
2012-01-06 21:36:10 +00:00
2012-01-06 21:43:58 +00:00
2007-02-02 17:28:04 +00:00
private static final Object [ ] [ ] assertionsForTry = new Object [ ] [ ] {
2008-02-13 22:34:36 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/try.js " } } ,
new Object [ ] { " tests/try.js " ,
new String [ ] { " tests/try.js/tryCatch " , " tests/try.js/tryFinally " , " tests/try.js/tryCatchFinally " } } ,
new Object [ ] { " tests/try.js/tryCatch " ,
new String [ ] { " tests/try.js/targetOne " , " tests/try.js/targetTwo " , " tests/try.js/two " } } ,
new Object [ ] { " tests/try.js/tryFinally " ,
new String [ ] { " tests/try.js/targetOne " , " tests/try.js/targetTwo " , " tests/try.js/two " } } ,
new Object [ ] { " tests/try.js/tryCatchFinally " ,
new String [ ] { " tests/try.js/targetOne " , " tests/try.js/targetTwo " , " tests/try.js/three " , " tests/try.js/two " } } } ;
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testTry ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:22:14 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " try.js " ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForTry ) ;
}
private static final Object [ ] [ ] assertionsForStringOp = new Object [ ] [ ] {
2008-02-13 22:34:36 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/string-op.js " } } ,
new Object [ ] { " tests/string-op.js " , new String [ ] { " tests/string-op.js/getOp " , " tests/string-op.js/plusNum " } } } ;
2007-02-02 17:28:04 +00:00
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testStringOp ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
PropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " string-op.js " ) ;
2008-02-13 22:34:36 +00:00
B . getOptions ( ) . setTraceStringConstants ( true ) ;
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForStringOp ) ;
}
private static final Object [ ] [ ] assertionsForUpward = new Object [ ] [ ] {
2008-02-13 22:34:36 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/upward.js " } } ,
new Object [ ] {
" tests/upward.js " ,
2012-01-06 21:21:26 +00:00
new String [ ] { " tests/upward.js/Obj/setit " , " tests/upward.js/Obj/getit " , " tests/upward.js/tester1 " ,
" tests/upward.js/tester2 " } } } ;
2008-02-13 22:34:36 +00:00
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testUpward ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " upward.js " ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForUpward ) ;
}
private static final Object [ ] [ ] assertionsForStringPrims = new Object [ ] [ ] {
2008-02-13 22:34:36 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/string-prims.js " } } ,
2012-09-18 17:22:17 +00:00
new Object [ ] { " tests/string-prims.js " , new String [ ] { " prologue.js/String_prototype_split " , " prologue.js/String_prototype_toUpperCase " } } } ;
2007-02-02 17:28:04 +00:00
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testStringPrims ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
PropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " string-prims.js " ) ;
2008-02-13 22:34:36 +00:00
B . getOptions ( ) . setTraceStringConstants ( true ) ;
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
2012-07-03 22:55:02 +00:00
// JSCallGraphUtil.AVOID_DUMP = false;
2013-08-29 14:16:38 +00:00
CAstCallGraphUtil . dumpCG ( B . getPointerAnalysis ( ) , CG ) ;
2007-02-02 17:28:04 +00:00
verifyGraphAssertions ( CG , assertionsForStringPrims ) ;
}
2012-01-06 21:21:26 +00:00
private static final Object [ ] [ ] assertionsForNested = new Object [ ] [ ] { new Object [ ] { ROOT , new String [ ] { " tests/nested.js " } } ,
new Object [ ] { " tests/nested.js " , new String [ ] { " tests/nested.js/f " , " tests/nested.js/f/ff " , " tests/nested.js/f/ff/fff " } } } ;
@Test
2013-04-09 22:47:22 +00:00
public void testNested ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
PropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " nested.js " ) ;
2008-12-02 14:09:49 +00:00
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
verifyGraphAssertions ( CG , assertionsForNested ) ;
}
2008-12-16 14:54:09 +00:00
2012-01-06 21:21:26 +00:00
private static final Object [ ] [ ] assertionsForInstanceof = new Object [ ] [ ] { new Object [ ] { ROOT ,
new String [ ] { " tests/instanceof.js " } } } ;
@Test
2013-04-09 22:47:22 +00:00
public void testInstanceof ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
PropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " instanceof.js " ) ;
2008-12-16 14:54:09 +00:00
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
verifyGraphAssertions ( CG , assertionsForInstanceof ) ;
}
2009-01-30 16:33:22 +00:00
/ *
2012-01-06 21:21:26 +00:00
* private static final Object [ ] [ ] assertionsForWith = new Object [ ] [ ] { new
* Object [ ] { ROOT , new String [ ] { " tests/with.js " } } } ;
*
* @Test public void testWith ( ) throws IOException , IllegalArgumentException ,
* CancelException { PropagationCallGraphBuilder B =
* Util . makeScriptCGBuilder ( " tests " , " with.js " ) ; CallGraph CG =
* B . makeCallGraph ( B . getOptions ( ) ) ; verifyGraphAssertions ( CG ,
* assertionsForWith ) ; }
* /
@Test
2013-04-09 22:47:22 +00:00
public void testCrash1 ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " crash1.js " ) ;
2009-01-19 15:12:39 +00:00
verifyGraphAssertions ( CG , null ) ;
}
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testCrash2 ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " crash2.js " ) ;
2009-01-30 16:33:22 +00:00
verifyGraphAssertions ( CG , null ) ;
}
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testLexicalCtor ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " lexical-ctor.js " ) ;
2011-05-05 03:52:26 +00:00
verifyGraphAssertions ( CG , null ) ;
}
2009-01-30 16:33:22 +00:00
2009-02-02 20:46:51 +00:00
private static final Object [ ] [ ] assertionsForMultivar = new Object [ ] [ ] {
2012-01-06 21:21:26 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/multivar.js " } } ,
new Object [ ] { " tests/multivar.js " , new String [ ] { " tests/multivar.js/a " , " tests/multivar.js/bf " , " tests/multivar.js/c " } } } ;
2009-02-02 20:46:51 +00:00
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testMultivar ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " multivar.js " ) ;
2009-02-02 20:46:51 +00:00
verifyGraphAssertions ( CG , assertionsForMultivar ) ;
}
2010-10-02 19:30:03 +00:00
private static final Object [ ] [ ] assertionsForPrototypeContamination = new Object [ ] [ ] {
2012-01-06 21:21:26 +00:00
new Object [ ] { ROOT , new String [ ] { " tests/prototype_contamination_bug.js " } } ,
new Object [ ] { " suffix:test1 " , new String [ ] { " suffix:foo_of_A " } } ,
new Object [ ] { " suffix:test2 " , new String [ ] { " suffix:foo_of_B " } } } ;
2010-10-02 19:30:03 +00:00
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testProtoypeContamination ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " prototype_contamination_bug.js " ) ;
2010-10-02 19:30:03 +00:00
verifyGraphAssertions ( CG , assertionsForPrototypeContamination ) ;
verifyNoEdges ( CG , " suffix:test1 " , " suffix:foo_of_B " ) ;
verifyNoEdges ( CG , " suffix:test2 " , " suffix:foo_of_A " ) ;
}
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testStackOverflowOnSsaConversionBug ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " stack_overflow_on_ssa_conversion.js " ) ;
2010-10-02 20:27:17 +00:00
// all we need is for it to finish building CG successfully.
}
2010-11-05 00:36:44 +00:00
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testExtJSSwitch ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " extjs_switch.js " ) ;
2011-07-04 21:21:29 +00:00
// all we need is for it to finish building CG successfully.
}
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testFunctionDotCall ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph cg = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " function_call.js " ) ;
2012-01-06 21:21:26 +00:00
for ( CGNode n : cg ) {
if ( n . getMethod ( ) . getName ( ) . toString ( ) . equals ( " call4 " ) ) {
Assert . assertEquals ( 2 , cg . getSuccNodeCount ( n ) ) ;
// ugh
List < CGNode > succs = Iterator2Collection . toList ( cg . getSuccNodes ( n ) ) ;
Assert
. assertEquals (
" [Node: <Code body of function Ltests/function_call.js/foo> Context: Everywhere, Node: <Code body of function Ltests/function_call.js/bar> Context: Everywhere] " ,
succs . toString ( ) ) ;
}
}
2011-07-05 02:32:10 +00:00
}
2012-01-06 21:26:01 +00:00
private static final Object [ ] [ ] assertionsForFunctionApply = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/function_apply.js " } } ,
2012-01-06 21:26:23 +00:00
new Object [ ] { " suffix:function_apply.js " , new String [ ] { " suffix:theOne " } } ,
new Object [ ] { " suffix:function_apply.js " , new String [ ] { " suffix:theTwo " } } } ;
2012-01-06 21:26:01 +00:00
2012-01-06 21:21:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testFunctionDotApply ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " function_apply.js " ) ;
2012-01-06 21:26:01 +00:00
verifyGraphAssertions ( CG , assertionsForFunctionApply ) ;
2012-01-06 21:19:36 +00:00
}
2012-01-06 21:27:21 +00:00
private static final Object [ ] [ ] assertionsForFunctionApply2 = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/function_apply2.js " } } ,
new Object [ ] { " suffix:function_apply2.js " , new String [ ] { " suffix:theThree " } } } ;
@Test
2013-04-09 22:47:22 +00:00
public void testFunctionDotApply2 ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " function_apply2.js " ) ;
2012-01-06 21:27:21 +00:00
verifyGraphAssertions ( CG , assertionsForFunctionApply2 ) ;
}
2013-06-10 13:02:12 +00:00
private static final Object [ ] [ ] assertionsForFunctionApply3 = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/function_apply3.js " } } ,
new Object [ ] { " suffix:apply " , new String [ ] { " suffix:foo " } } } ;
@Test
public void testFunctionDotApply3 ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " function_apply3.js " ) ;
verifyGraphAssertions ( CG , assertionsForFunctionApply3 ) ;
}
2012-01-06 21:34:04 +00:00
private static final Object [ ] [ ] assertionsForWrap1 = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/wrap1.js " } } ,
new Object [ ] { " suffix:wrap1.js " , new String [ ] { " suffix:i_am_reachable " } } } ;
@Test
2013-04-09 22:47:22 +00:00
public void testWrap1 ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " wrap1.js " ) ;
2012-01-06 21:34:04 +00:00
verifyGraphAssertions ( CG , assertionsForWrap1 ) ;
}
private static final Object [ ] [ ] assertionsForWrap2 = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/wrap2.js " } } ,
new Object [ ] { " suffix:wrap2.js " , new String [ ] { " suffix:i_am_reachable " } } } ;
@Test
2013-04-09 22:47:22 +00:00
public void testWrap2 ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " wrap2.js " ) ;
2012-01-06 21:34:04 +00:00
verifyGraphAssertions ( CG , assertionsForWrap2 ) ;
}
2012-01-06 21:27:21 +00:00
2012-01-06 21:36:59 +00:00
private static final Object [ ] [ ] assertionsForWrap3 = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/wrap3.js " } } ,
new Object [ ] { " suffix:wrap3.js " , new String [ ] { " suffix:i_am_reachable " } } } ;
@Test
2013-04-09 22:47:22 +00:00
public void testWrap3 ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " wrap3.js " ) ;
2012-01-06 21:36:59 +00:00
verifyGraphAssertions ( CG , assertionsForWrap3 ) ;
}
2012-01-06 21:22:27 +00:00
private static final Object [ ] [ ] assertionsForComplexCall = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/complex_call.js " } } ,
new Object [ ] { " suffix:call.js " , new String [ ] { " suffix:f3 " } } } ;
@Test
2013-04-09 22:47:22 +00:00
public void testComplexCall ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " complex_call.js " ) ;
2012-01-06 21:34:04 +00:00
for ( CGNode nd : CG )
System . out . println ( nd ) ;
2012-01-06 21:22:27 +00:00
verifyGraphAssertions ( CG , assertionsForComplexCall ) ;
}
2012-01-06 21:23:56 +00:00
private static final Object [ ] [ ] assertionsForGlobalObj = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/global_object.js " } } ,
new Object [ ] { " suffix:global_object.js " , new String [ ] { " suffix:biz " } } } ;
@Test
2013-04-09 22:47:22 +00:00
public void testGlobalObjPassing ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " global_object.js " ) ;
2012-01-06 21:28:46 +00:00
verifyGraphAssertions ( CG , assertionsForGlobalObj ) ;
2012-01-06 21:23:56 +00:00
}
2012-01-06 21:41:57 +00:00
private static final Object [ ] [ ] assertionsForGlobalObj2 = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/global_object2.js " } } ,
new Object [ ] { " suffix:global_object2.js " , new String [ ] { " suffix:foo " } } } ;
@Test
2013-04-09 22:47:22 +00:00
public void testGlobalObj2 ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " global_object2.js " ) ;
2012-01-06 21:41:57 +00:00
verifyGraphAssertions ( CG , assertionsForGlobalObj2 ) ;
}
2012-01-06 21:43:58 +00:00
2012-01-06 21:41:57 +00:00
private static final Object [ ] [ ] assertionsForReturnThis = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/return_this.js " } } ,
new Object [ ] { " suffix:return_this.js " , new String [ ] { " suffix:foo " } } ,
new Object [ ] { " suffix:return_this.js " , new String [ ] { " suffix:bar " } } } ;
2012-01-06 21:28:46 +00:00
2012-01-06 21:41:57 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testReturnThis ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-03-01 02:45:51 +00:00
PropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " return_this.js " ) ;
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
2012-07-03 22:55:02 +00:00
// JSCallGraphUtil.AVOID_DUMP = false;
2013-08-29 14:16:38 +00:00
CAstCallGraphUtil . dumpCG ( B . getPointerAnalysis ( ) , CG ) ;
2012-01-06 21:41:57 +00:00
verifyGraphAssertions ( CG , assertionsForReturnThis ) ;
}
private static final Object [ ] [ ] assertionsForReturnThis2 = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/return_this2.js " } } ,
new Object [ ] { " suffix:return_this2.js " , new String [ ] { " suffix:A " } } ,
new Object [ ] { " suffix:return_this2.js " , new String [ ] { " suffix:foo " } } ,
new Object [ ] { " suffix:return_this2.js " , new String [ ] { " suffix:test1 " } } ,
new Object [ ] { " suffix:return_this2.js " , new String [ ] { " suffix:test2 " } } ,
new Object [ ] { " suffix:test1 " , new String [ ] { " suffix:bar1 " } } ,
new Object [ ] { " suffix:test2 " , new String [ ] { " suffix:bar2 " } }
} ;
// when using the ObjectSensitivityContextSelector, we additionally know that test1 does not call bar2,
// and test2 does not call bar1
@Test
2013-04-09 22:47:22 +00:00
public void testReturnThis2 ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " return_this2.js " ) ;
2012-01-06 21:41:57 +00:00
verifyGraphAssertions ( CG , assertionsForReturnThis2 ) ;
}
2012-01-06 21:43:37 +00:00
private static final Object [ ] [ ] assertionsForArguments = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/arguments.js " } } ,
new Object [ ] { " suffix:arguments.js " , new String [ ] { " suffix:f " } } ,
2012-02-17 20:18:32 +00:00
new Object [ ] { " suffix:f " , new String [ ] { " !suffix:g1 " , " !suffix:g2 " , " suffix:g3 " , } }
2012-01-06 21:43:37 +00:00
} ;
@Test
2013-04-09 22:47:22 +00:00
public void testArguments ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " arguments.js " ) ;
2012-01-06 21:43:37 +00:00
verifyGraphAssertions ( CG , assertionsForArguments ) ;
}
2012-01-06 21:41:57 +00:00
private static final Object [ ] [ ] assertionsForFunctionIsAFunction = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/Function_is_a_function.js " } } ,
2012-09-18 17:22:17 +00:00
new Object [ ] { " suffix:Function_is_a_function.js " , new String [ ] { " suffix:Function_prototype_call " } } } ;
2012-01-06 21:41:57 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testFunctionIsAFunction ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " Function_is_a_function.js " ) ;
2012-01-06 21:41:57 +00:00
verifyGraphAssertions ( CG , assertionsForFunctionIsAFunction ) ;
}
2012-01-06 21:50:52 +00:00
private static final Object [ ] [ ] assertionsForLexicalBroken = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/lexical_broken.js " } } ,
new Object [ ] { " suffix:lexical_broken.js " , new String [ ] { " suffix:f " } } ,
new Object [ ] { " suffix:f " , new String [ ] { " suffix:g " } }
} ;
@Test
2013-04-09 22:47:22 +00:00
public void testLexicalBroken ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " lexical_broken.js " ) ;
2012-01-06 21:50:52 +00:00
verifyGraphAssertions ( CG , assertionsForLexicalBroken ) ;
}
2012-01-06 21:51:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testDeadPhi ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " dead_phi.js " ) ;
2012-01-06 21:51:26 +00:00
}
2012-02-17 20:15:57 +00:00
private static final Object [ ] [ ] assertionsForScopingOverwriteFunction = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/scoping_test.js " } } ,
new Object [ ] { " suffix:scoping_test.js " , new String [ ] { " suffix:i_am_reachable " } }
} ;
2012-02-17 20:13:39 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testScopingOverwriteFunction ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " scoping_test.js " ) ;
2012-02-17 20:15:57 +00:00
verifyGraphAssertions ( CG , assertionsForScopingOverwriteFunction ) ;
2012-02-17 20:13:39 +00:00
}
2012-02-17 20:14:26 +00:00
2012-02-17 20:14:36 +00:00
private static final Object [ ] [ ] assertionsForNestedParamAssign = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/nested_assign_to_param.js " } } ,
new Object [ ] { " suffix:nested_assign_to_param.js " , new String [ ] { " suffix:i_am_reachable " } }
} ;
2012-02-17 20:14:26 +00:00
@Test
2013-04-09 22:47:22 +00:00
public void testNestedAssignToParam ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
2012-02-17 20:21:59 +00:00
CallGraph CG = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " nested_assign_to_param.js " ) ;
2012-02-17 20:14:36 +00:00
verifyGraphAssertions ( CG , assertionsForNestedParamAssign ) ;
2012-02-17 20:14:26 +00:00
}
2012-03-01 02:45:51 +00:00
private static final Object [ ] [ ] assertionsForDispatch = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/dispatch.js " } } ,
new Object [ ] { " tests/dispatch.js " , new String [ ] { " tests/dispatch.js/left_outer " , " tests/dispatch.js/right_outer " } } ,
new Object [ ] { " tests/dispatch.js/left_outer " , new String [ ] { " tests/dispatch.js/left_inner " } } ,
new Object [ ] { " tests/dispatch.js/right_outer " , new String [ ] { " tests/dispatch.js/right_inner " } }
} ;
@Test
2013-04-09 22:47:22 +00:00
public void testDispatch ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-03-01 02:45:51 +00:00
PropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " dispatch.js " ) ;
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
2012-07-03 22:55:02 +00:00
// JSCallGraphUtil.AVOID_DUMP = false;
2013-08-29 14:16:38 +00:00
CAstCallGraphUtil . dumpCG ( B . getPointerAnalysis ( ) , CG ) ;
2012-03-01 02:45:51 +00:00
verifyGraphAssertions ( CG , assertionsForDispatch ) ;
}
2012-07-30 19:40:48 +00:00
private static final Object [ ] [ ] assertionsForDispatchSameTarget = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/dispatch_same_target.js " } } ,
new Object [ ] { " tests/dispatch_same_target.js/f3 " , new String [ ] { " tests/dispatch_same_target.js/f4 " } }
} ;
@Test
2013-04-09 22:47:22 +00:00
public void testDispatchSameTarget ( ) throws IOException , IllegalArgumentException , CancelException , WalaException {
2012-07-30 19:40:48 +00:00
PropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " dispatch_same_target.js " ) ;
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
// JSCallGraphUtil.AVOID_DUMP = false;
// JSCallGraphUtil.dumpCG(B.getPointerAnalysis(), CG);
verifyGraphAssertions ( CG , assertionsForDispatchSameTarget ) ;
}
2012-07-09 18:22:34 +00:00
private static final Object [ ] [ ] assertionsForForInPrototype = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/for_in_prototype.js " } } ,
new Object [ ] { " tests/for_in_prototype.js " , new String [ ] { " suffix:A " ,
" suffix:reachable " ,
" suffix:also_reachable " } }
} ;
@Test
2013-04-09 22:47:22 +00:00
public void testForInPrototype ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
2012-07-09 18:22:34 +00:00
CallGraph cg = JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " for_in_prototype.js " ) ;
verifyGraphAssertions ( cg , assertionsForForInPrototype ) ;
}
private static final Object [ ] [ ] assertionsForArrayIndexConv = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/array_index_conv.js " } } ,
2012-12-18 04:38:17 +00:00
new Object [ ] { " tests/array_index_conv.js " , new String [ ] { " suffix:reachable1 " ,
" suffix:reachable2 " ,
" suffix:reachable3 " ,
" suffix:reachable4 " } }
2012-07-09 18:22:34 +00:00
} ;
@Test
2013-04-09 22:47:22 +00:00
public void testArrayIndexConv ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
2012-07-09 18:22:34 +00:00
PropagationCallGraphBuilder b = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " array_index_conv.js " ) ;
CallGraph cg = b . makeCallGraph ( b . getOptions ( ) ) ;
verifyGraphAssertions ( cg , assertionsForArrayIndexConv ) ;
}
private static final Object [ ] [ ] assertionsForArrayIndexConv2 = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/array_index_conv2.js " } } ,
new Object [ ] { " tests/array_index_conv2.js " , new String [ ] { " suffix:invokeOnA " } } ,
new Object [ ] { " suffix:invokeOnA " , new String [ ] { " suffix:reachable " ,
" suffix:also_reachable " ,
" suffix:reachable_too " } }
} ;
@Test
2013-04-09 22:47:22 +00:00
public void testArrayIndexConv2 ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
2012-07-09 18:22:34 +00:00
PropagationCallGraphBuilder b = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " array_index_conv2.js " ) ;
2013-06-10 13:02:12 +00:00
b . setContextSelector ( new PropertyNameContextSelector ( b . getAnalysisCache ( ) , b . getContextSelector ( ) ) ) ;
2012-07-09 18:22:34 +00:00
CallGraph cg = b . makeCallGraph ( b . getOptions ( ) ) ;
2013-01-08 01:18:27 +00:00
//JSCallGraphUtil.AVOID_DUMP = false;
//JSCallGraphUtil.dumpCG(b.getPointerAnalysis(), cg);
2012-07-09 18:22:34 +00:00
verifyGraphAssertions ( cg , assertionsForArrayIndexConv2 ) ;
}
2012-03-01 02:45:51 +00:00
2013-01-08 01:18:27 +00:00
private static final Object [ ] [ ] assertionsForDateProperty = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/date-property.js " } } ,
new Object [ ] { " tests/date-property.js " , new String [ ] { " suffix:_fun " } }
} ;
@Test
2013-04-09 22:47:22 +00:00
public void testDateAsProperty ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
2013-01-08 01:18:27 +00:00
PropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " date-property.js " ) ;
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
//JSCallGraphUtil.AVOID_DUMP = false;
//JSCallGraphUtil.dumpCG(B.getPointerAnalysis(), CG);
verifyGraphAssertions ( CG , assertionsForDateProperty ) ;
}
2013-04-09 22:47:22 +00:00
private static final Object [ ] [ ] assertionsForDeadCode = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/dead.js " } } ,
new Object [ ] { " tests/dead.js " , new String [ ] { " suffix:twoReturns " } }
} ;
@Test
public void testDeadCode ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
PropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " dead.js " ) ;
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
//JSCallGraphUtil.AVOID_DUMP = false;
//JSCallGraphUtil.dumpCG(B.getPointerAnalysis(), CG);
verifyGraphAssertions ( CG , assertionsForDeadCode ) ;
}
2013-06-10 13:02:12 +00:00
2014-06-26 15:12:44 +00:00
private static final Object [ ] [ ] assertionsForShadow = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/shadow_test.js " } } ,
new Object [ ] { " tests/shadow_test.js " , new String [ ] { " tests/shadow_test.js/test " } } ,
new Object [ ] { " tests/shadow_test.js/test " , new String [ ] { " tests/shadow_test.js/bad " } } ,
new Object [ ] { " tests/shadow_test.js/test " , new String [ ] { " tests/shadow_test.js/global_bad " } }
} ;
@Test
public void testShadow ( ) throws IOException , WalaException , IllegalArgumentException , CancelException {
JSCFABuilder builder = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " shadow_test.js " ) ;
CallGraph cg = builder . makeCallGraph ( builder . getOptions ( ) ) ;
verifyGraphAssertions ( cg , assertionsForShadow ) ;
}
2013-06-10 13:02:12 +00:00
private static final Object [ ] [ ] assertionsForExtend = new Object [ ] [ ] {
new Object [ ] { ROOT , new String [ ] { " tests/extend.js " } } ,
new Object [ ] { " tests/extend.js " , new String [ ] { " suffix:bar " , " !suffix:foo " } }
} ;
@Test
public void testExtend ( ) throws IOException , WalaException , IllegalArgumentException , CancelException {
JSCFABuilder builder = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " extend.js " ) ;
CallGraph cg = builder . makeCallGraph ( builder . getOptions ( ) ) ;
verifyGraphAssertions ( cg , assertionsForExtend ) ;
}
2013-04-09 22:47:22 +00:00
2013-04-11 01:09:10 +00:00
@Test
public void testDeadCatch ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " dead_catch.js " ) ;
}
2013-07-30 18:04:08 +00:00
@Test
public void testUglyLoopCrash ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " ssa-crash.js " ) ;
}
2013-06-10 13:02:12 +00:00
@Test
public void testTryFinallyCrash ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
JSCallGraphBuilderUtil . makeScriptCG ( " tests " , " try-finally-crash.js " ) ;
}
2013-04-09 22:47:22 +00:00
@Test ( expected = CallGraphBuilderCancelException . class )
public void testManyStrings ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
SSAPropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " many-strings.js " ) ;
B . getOptions ( ) . setTraceStringConstants ( true ) ;
2014-02-09 02:37:39 +00:00
ProgressMaster monitor = ProgressMaster . make ( new NullProgressMonitor ( ) , 10000 , false ) ;
monitor . beginTask ( " build CG " , 1 ) ;
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) , monitor ) ;
monitor . done ( ) ;
2013-06-10 13:02:12 +00:00
CAstCallGraphUtil . dumpCG ( B . getPointerAnalysis ( ) , CG ) ;
2013-04-09 22:47:22 +00:00
}
2013-06-10 13:02:12 +00:00
@Test
public void testTutorialExample ( ) throws IllegalArgumentException , IOException , CancelException , WalaException {
PropagationCallGraphBuilder B = JSCallGraphBuilderUtil . makeScriptCGBuilder ( " tests " , " tutorial-example.js " ) ;
CallGraph CG = B . makeCallGraph ( B . getOptions ( ) ) ;
CAstCallGraphUtil . dumpCG ( B . getPointerAnalysis ( ) , CG ) ;
// verifyGraphAssertions(CG, assertionsForDateProperty);
}
2007-02-02 17:28:04 +00:00
}