package com.intrbiz.bergamot.test;
import java.security.AccessControlException;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import org.junit.Before;
import org.junit.Test;
import com.intrbiz.scripting.RestrictedScriptEngineManager;
import static org.junit.Assert.*;
public class ManualTestScripting
{
@Before
public void setupSecurityManager()
{
// only setup the security manager if it is not already loaded
if (System.getSecurityManager() == null)
{
System.setSecurityManager(new SecurityManager());
}
}
@Test
public void testSimpleScript()
{
ScriptEngineManager engineManager = new RestrictedScriptEngineManager();
ScriptEngine script = engineManager.getEngineByName("nashorn");
try
{
Object value = script.eval("'abc' + 123;");
assertTrue("Script returned abc123", "abc123".equals(value));
}
catch (Exception e)
{
e.printStackTrace();
fail("Script threw an exception: " + e.getMessage());
}
}
@Test
public void testPreventExit()
{
ScriptEngineManager manager = new RestrictedScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");
try
{
engine.eval("exit(1);");
fail("Exit didn't happen, yet a AccessControlException was not raised");
}
catch (Exception e)
{
assertTrue("Caught access exception when trying to call exit()", e instanceof AccessControlException);
}
}
}