You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2010/06/24 21:38:24 UTC
svn commit: r957694 - in /incubator/clerezza/trunk/scala-scripting:
script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala
tests/src/test/scala/org/apache/clerezza/scala/tests/ScriptEngineFactoryTest.scala
Author: reto
Date: Thu Jun 24 19:38:24 2010
New Revision: 957694
URL: http://svn.apache.org/viewvc?rev=957694&view=rev
Log:
throwing Script-Exception instead of PriviledgedActionException, added test
Modified:
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala
incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/ScriptEngineFactoryTest.scala
Modified: incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala?rev=957694&r1=957693&r2=957694&view=diff
==============================================================================
--- incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala (original)
+++ incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala Thu Jun 24 19:38:24 2010
@@ -27,6 +27,7 @@ import org.osgi.framework.BundleListener
import org.osgi.service.component.ComponentContext;
import org.osgi.framework.Bundle
import java.io.{File, PrintWriter, Reader, StringWriter}
+import java.security.PrivilegedActionException
import java.security.AccessController
import java.security.PrivilegedAction
import java.util.{ArrayList, Arrays};
@@ -218,40 +219,44 @@ class ScriptEngineFactory() extends Jav
}
override def compile(script: String): CompiledScript = {
- AccessController.doPrivileged(new PrivilegedAction[CompiledScript]() {
+ try {
+ AccessController.doPrivileged(new PrivilegedAction[CompiledScript]() {
override def run() = {
- //inefficient but thread safe
- compiler.synchronized {
- val objectName = "CompiledScript"+classCounter
- classCounter += 1
- val classCode = "object " + objectName + """ {
- | def run($: Map[String, Object]) = {
- |""".stripMargin + script +"""
- | }
- |}""".stripMargin
- val sources: List[SourceFile] = List(new BatchSourceFile("<script>", classCode))
- (new compiler.Run).compileSources(sources)
- if (compiler.reporter.hasErrors) {
- throw new ScriptException(msgWriter.toString, "script", -1);
- }
- new CompiledScript() {
- override def eval(context: ScriptContext) = {
- var map = Map[String, Object]()
- import _root_.scala.collection.JavaConversions._
- for ( scope <- context.getScopes;
- if (context.getBindings(scope.intValue) != null);
- entry <- context.getBindings(scope.intValue)) {
- map = map + (entry._1 -> entry._2)
+ //inefficient but thread safe
+ compiler.synchronized {
+ val objectName = "CompiledScript"+classCounter
+ classCounter += 1
+ val classCode = "object " + objectName + """ {
+ | def run($: Map[String, Object]) = {
+ |""".stripMargin + script +"""
+ | }
+ |}""".stripMargin
+ val sources: List[SourceFile] = List(new BatchSourceFile("<script>", classCode))
+ (new compiler.Run).compileSources(sources)
+ if (compiler.reporter.hasErrors) {
+ throw new ScriptException(msgWriter.toString, "script", -1);
+ }
+ new CompiledScript() {
+ override def eval(context: ScriptContext) = {
+ var map = Map[String, Object]()
+ import _root_.scala.collection.JavaConversions._
+ for ( scope <- context.getScopes;
+ if (context.getBindings(scope.intValue) != null);
+ entry <- context.getBindings(scope.intValue)) {
+ map = map + (entry._1 -> entry._2)
+ }
+ val classLoader = new AbstractFileClassLoader(virtualDirectory, this.getClass.getClassLoader())
+ val runMethod = classLoader.findClass(objectName).getMethod("run", classOf[Map[String, Object]])
+ runMethod.invoke(null, map)
}
- val classLoader = new AbstractFileClassLoader(virtualDirectory, this.getClass.getClassLoader())
- val runMethod = classLoader.findClass(objectName).getMethod("run", classOf[Map[String, Object]])
- runMethod.invoke(null, map)
+ override def getEngine = MyScriptEngine.this
}
- override def getEngine = MyScriptEngine.this
}
}
- }
- })
+ })
+ } catch {
+ case e: PrivilegedActionException => throw e.getCause
+ }
}
Modified: incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/ScriptEngineFactoryTest.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/ScriptEngineFactoryTest.scala?rev=957694&r1=957693&r2=957694&view=diff
==============================================================================
--- incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/ScriptEngineFactoryTest.scala (original)
+++ incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/ScriptEngineFactoryTest.scala Thu Jun 24 19:38:24 2010
@@ -144,6 +144,14 @@ s"""
val compiledScript = engine.compile(script)
Assert.assertEquals(string, compiledScript.eval())
}
+
+ @Test(expected=classOf[ScriptException])
+ def compileErrorScript(): Unit = {
+ val string = "hello"
+ val script = "this is not real scala !"
+ val engine = factory.getScriptEngine.asInstanceOf[Compilable]
+ val compiledScript = engine.compile(script)
+ }
//This seems hard to realize before https://lampsvn.epfl.ch/trac/scala/ticket/3513 is fixed
/*@Test