package org.mozilla.javascript;
import org.junit.Assert;
import org.junit.Before;
import static org.junit.Assert.*;
import org.junit.Test;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextAction;
public class TopScopeBuildTest {
private RhinoEmbedding embedding;
@Before
public void setUp() {
embedding = new RhinoEmbedding();
embedding.init();
}
@Test
public void testAccessJavaPackages() {
Context cx = Context.enter(null, embedding);
try {
ScriptableObject root = new NativeObject();//ImporterTopLevel(cx);//NativeObject();
ScriptableObject.putProperty(root, "foo", "bar");
ScriptableObject.putProperty(root, "miki", "mouse");
ScriptRuntime.initStandardObjects(cx, root, false);
ScriptableObject.deleteProperty(root, "Packages");
String[] topNames = { "java", "javax", "org", "com", "edu", "net" };
for(String topPkgName : topNames) {
ScriptableObject.deleteProperty(root, topPkgName);
}
//root.sealObject();
ScriptableObject fakeRoot = new NativeObject();
fakeRoot.setPrototype(root);
Script script = cx.compileString("foo = 'baz'; foo;", "src", 0, null);
assertEquals("baz", script.exec(cx, fakeRoot));
assertEquals("mouse", ScriptRuntime.getTopLevelProp(fakeRoot, "miki"));
assertEquals("mouse", ScriptRuntime.getTopLevelProp(root, "miki"));
assertEquals("baz", ScriptRuntime.getTopLevelProp(fakeRoot, "foo"));
assertEquals("bar", ScriptRuntime.getTopLevelProp(root, "foo"));
assertEquals("baz", ScriptableObject.getProperty(fakeRoot, "foo"));
assertEquals("bar", ScriptableObject.getProperty(root, "foo"));
assertTrue(ScriptableObject.getProperty(fakeRoot, "Object") instanceof Function);
assertSame(UniqueTag.NOT_FOUND, ScriptableObject.getProperty(root, "Package"));
assertSame(UniqueTag.NOT_FOUND, ScriptableObject.getProperty(root, "Packages"));
assertSame(UniqueTag.NOT_FOUND, ScriptableObject.getProperty(root, "java"));
try {
cx.compileString("new java.util.LinkedList();", "src", 0, null).exec(cx, fakeRoot);
fail();
} catch(RhinoException e) {}
} finally {
Context.exit();
}
}
public Object execContextAction(ContextAction ca) {
Context cx = Context.enter();
try {
return execContextAction(ca, cx);
} finally {
Context.exit();
}
}
public Object execContextAction(ContextAction ca, Context cx) {
return ca.run(cx);
}
public ScriptableObject initEmptyTopScope(Context cx, boolean sealed) {
ScriptableObject s = new ImporterTopLevel(cx, sealed);
//alternative mode cx.initStandardObjects(null, sealed);
return s;
}
@Test
public void testContextEnter() {
Context cx = embedding.enterContext();
assertNotNull(Context.getCurrentContext());
assertNotNull(cx);
Context.getContext();
try {
cx.toString();
} finally {
Context.exit();
Assert.assertNull(Context.getCurrentContext());
try {
Context.getContext();
Assert.fail();
} catch(RuntimeException e) {
Assert.assertSame(RuntimeException.class, e.getClass());
}
}
}
}