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