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


Reply via email to