Author: dion Date: Mon Apr 3 05:29:23 2006 New Revision: 391033 URL: http://svn.apache.org/viewcvs?rev=391033&view=rev Log: Support scripts from a file
Modified: jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/ScriptFactory.java jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/ScriptFactoryTest.java jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/ScriptTest.java Modified: jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/ScriptFactory.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/ScriptFactory.java?rev=391033&r1=391032&r2=391033&view=diff ============================================================================== --- jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/ScriptFactory.java (original) +++ jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/ScriptFactory.java Mon Apr 3 05:29:23 2006 @@ -15,6 +15,10 @@ */ package org.apache.commons.jexl; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; import java.io.StringReader; import org.apache.commons.jexl.parser.ASTJexlScript; @@ -86,6 +90,31 @@ return getInstance().newScript(scriptText); } + /** + * Creates a Script from a String containing valid JEXL syntax. + * This method parses the script which validates the syntax. + * + * @param scriptText A String containing valid JEXL syntax + * @return A [EMAIL PROTECTED] Script} which can be executed with a [EMAIL PROTECTED] JexlContext}. + * @throws Exception An exception can be thrown if there is a problem parsing the script. + */ + public static Script createScript(File scriptFile) throws Exception + { + if (scriptFile == null) { + throw new NullPointerException("scriptFile passed to ScriptFactory.createScript is null"); + } + if (!scriptFile.canRead()) { + throw new IOException("Can't read scriptFile (" + scriptFile.getCanonicalPath() +")"); + } + StringBuffer buffer = new StringBuffer(); + BufferedReader reader = new BufferedReader(new FileReader(scriptFile)); + String line = null; + while ((line = reader.readLine()) != null) { + buffer.append(line).append('\n'); + } + reader.close(); + return getInstance().newScript(buffer.toString()); + } /** * Creates a new Script based on the string. Modified: jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/ScriptFactoryTest.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/ScriptFactoryTest.java?rev=391033&r1=391032&r2=391033&view=diff ============================================================================== --- jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/ScriptFactoryTest.java (original) +++ jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/ScriptFactoryTest.java Mon Apr 3 05:29:23 2006 @@ -15,6 +15,8 @@ */ package org.apache.commons.jexl; +import java.io.File; + import junit.framework.TestCase; /** @@ -38,5 +40,14 @@ public void testCreateFromString() throws Exception { String code = ";"; assertNotNull("No script created", ScriptFactory.createScript(code)); + } + + /** + * Ensure the factory can create a script from a file. + * @throws Exception on a parse error. + */ + public void testCreateFromFile() throws Exception { + File testScript = new File("src/test-scripts/test1.jexl"); + assertNotNull("No script created", ScriptFactory.createScript(testScript)); } } Modified: jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/ScriptTest.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/ScriptTest.java?rev=391033&r1=391032&r2=391033&view=diff ============================================================================== --- jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/ScriptTest.java (original) +++ jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/ScriptTest.java Mon Apr 3 05:29:23 2006 @@ -15,6 +15,8 @@ */ package org.apache.commons.jexl; +import java.io.File; + import junit.framework.TestCase; /** @@ -31,6 +33,9 @@ super(name); } + /** + * Test creating a script from a string. + */ public void testSimpleScript() throws Exception { String code = "while (x < 10) x = x + 1;"; Script s = ScriptFactory.createScript(code); @@ -40,5 +45,15 @@ Object o = s.execute(jc); assertEquals("Result is wrong", new Long(10), o); assertEquals("getText is wrong", code, s.getText()); + } + + public void testScriptFromFile() throws Exception { + File testScript = new File("src/test-scripts/test1.jexl"); + Script s = ScriptFactory.createScript(testScript); + JexlContext jc = JexlHelper.createContext(); + jc.getVars().put("out", System.out); + Object result = s.execute(jc); + assertNotNull("No result", result); + assertEquals("Wrong result", new Long(7), result); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]