WALA/com.ibm.wala.cast.js.rhino..../harness-src/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/TestFieldBasedCG.java

153 lines
6.3 KiB
Java

/******************************************************************************
* Copyright (c) 2002 - 2012 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.rhino.callgraph.fieldbased.test;
import org.junit.Test;
import com.ibm.wala.cast.ir.translator.TranslatorToCAst.Error;
import com.ibm.wala.cast.js.test.FieldBasedCGUtil.BuilderType;
import com.ibm.wala.util.CancelException;
import com.ibm.wala.util.WalaException;
public class TestFieldBasedCG extends AbstractFieldBasedTest {
private static final Object[][] assertionsForSimpleJS = new Object[][] {
new Object[] { ROOT, new String[] { "suffix:simple.js" } },
new Object[] { "suffix:simple.js", new String[] { "suffix:foo", "suffix:bar", "suffix:A" } },
new Object[] { "suffix:foo", new String[] { "suffix:bar" } },
new Object[] { "suffix:aluis", new String[] { "suffix:aluis" } }
};
@Test
public void testSimpleJSPessimistic() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/simple.js", assertionsForSimpleJS, BuilderType.PESSIMISTIC);
}
@Test
public void testSimpleJSOptimistic() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/simple.js", assertionsForSimpleJS, BuilderType.OPTIMISTIC);
}
@Test
public void testSimpleJSWorklist() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/simple.js", assertionsForSimpleJS, BuilderType.OPTIMISTIC_WORKLIST);
}
private static final Object[][] assertionsForOneShot = new Object[][] {
new Object[] { ROOT, new String[] { "suffix:oneshot.js" } },
new Object[] { "suffix:oneshot.js", new String[] { "suffix:f" } },
new Object[] { "suffix:f", new String[] { "suffix:g" } }
};
@Test
public void testOneshotPessimistic() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/oneshot.js", assertionsForOneShot, BuilderType.PESSIMISTIC);
}
@Test
public void testOneshotOptimistic() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/oneshot.js", assertionsForOneShot, BuilderType.OPTIMISTIC);
}
@Test
public void testOneshotWorklist() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/oneshot.js", assertionsForOneShot, BuilderType.OPTIMISTIC_WORKLIST);
}
private static final Object[][] assertionsForCallbacks = new Object[][] {
new Object[] { ROOT, new String[] { "suffix:callbacks.js" } },
new Object[] { "suffix:callbacks.js", new String[] { "suffix:f" } },
new Object[] { "suffix:f", new String[] { "suffix:k", "suffix:n" } },
new Object[] { "suffix:k", new String[] { "suffix:l", "suffix:p" } }
};
@Test
public void testCallbacksOptimistic() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/callbacks.js", assertionsForCallbacks, BuilderType.OPTIMISTIC_WORKLIST);
}
@Test
public void testCallbacksWorklist() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/callbacks.js", assertionsForCallbacks, BuilderType.OPTIMISTIC_WORKLIST);
}
private static final Object[][] assertionsForLexical = new Object[][] {
new Object[] { "suffix:h", new String[] { "suffix:g" } }
};
@Test
public void testLexicalPessimistic() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/lexical.js", assertionsForLexical, BuilderType.PESSIMISTIC);
}
@Test
public void testLexicalOptimistic() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/lexical.js", assertionsForLexical, BuilderType.OPTIMISTIC);
}
@Test
public void testLexicalWorklist() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/lexical.js", assertionsForLexical, BuilderType.OPTIMISTIC_WORKLIST);
}
private static final Object[][] assertionsForReflectiveCall = new Object[][] {
new Object[] { "suffix:h", new String[] { "suffix:Function_prototype_call", "suffix:Function_prototype_apply" } },
new Object[] { "suffix:Function_prototype_call", new String[] { "suffix:f" } },
new Object[] { "suffix:Function_prototype_apply", new String[] { "suffix:x" } },
new Object[] { "suffix:f", new String[] { "suffix:k" } }
};
@Test
public void testReflectiveCallOptimistic() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/reflective_calls.js", assertionsForReflectiveCall, BuilderType.OPTIMISTIC);
}
@Test
public void testReflectiveCallWorklist() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/reflective_calls.js", assertionsForReflectiveCall, BuilderType.OPTIMISTIC_WORKLIST);
}
private static final Object[][] assertionsForNew = new Object[][] {
new Object[] { "suffix:new.js", new String[] { "suffix:g", "suffix:f" } },
new Object[] { "suffix:g", new String[] { "!suffix:k" } }
};
@Test
public void testNewOptimistic() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/new.js", assertionsForNew, BuilderType.OPTIMISTIC);
}
@Test
public void testNewWorklist() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/new.js", assertionsForNew, BuilderType.OPTIMISTIC_WORKLIST);
}
private static final Object[][] assertionsForCallbacks2 = new Object[][] {
new Object[] { "suffix:callbacks2.js", new String[] { "suffix:g" } },
new Object[] { "suffix:g", new String[] { "suffix:k", "!suffix:l" } }
};
@Test
public void testCallbacks2Optimistic() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/callbacks2.js", assertionsForCallbacks2, BuilderType.OPTIMISTIC);
}
@Test
public void testCallbacks2Worklist() throws WalaException, Error, CancelException {
runTest("tests/fieldbased/callbacks2.js", assertionsForCallbacks2, BuilderType.OPTIMISTIC_WORKLIST);
}
// @Test
public void testBug2979() throws WalaException, Error, CancelException {
System.err.println(runTest("pages/2979.html", new Object[][]{}, BuilderType.PESSIMISTIC, BuilderType.OPTIMISTIC, BuilderType.OPTIMISTIC_WORKLIST));
}
}