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