You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Rahul Akolkar <ra...@gmail.com> on 2009/07/31 23:58:49 UTC
Re: [JEXL] svn commit: r799492
On Thu, Jul 30, 2009 at 10:24 PM, <se...@apache.org> wrote:
> Author: sebb
> Date: Fri Jul 31 02:24:07 2009
> New Revision: 799492
>
> URL: http://svn.apache.org/viewvc?rev=799492&view=rev
> Log:
> Initial implementation of Jexl Script engine and simple unit test
>
> Added:
> commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java (with props)
> commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java (with props)
>
> Added: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java
> URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java?rev=799492&view=auto
> ==============================================================================
> --- commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java (added)
> +++ commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java Fri Jul 31 02:24:07 2009
> @@ -0,0 +1,202 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements. See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + *
> + */
> +
> +package org.apache.commons.jexl.scripting;
> +
> +import java.io.BufferedReader;
> +import java.io.IOException;
> +import java.io.Reader;
> +import java.util.Collection;
> +import java.util.Map;
> +import java.util.Set;
> +
> +import javax.script.AbstractScriptEngine;
> +import javax.script.Bindings;
> +import javax.script.ScriptContext;
> +import javax.script.ScriptEngineFactory;
> +import javax.script.ScriptException;
> +import javax.script.SimpleBindings;
> +
> +import org.apache.commons.jexl.JexlContext;
> +import org.apache.commons.jexl.JexlEngine;
> +import org.apache.commons.jexl.Script;
> +
> +// Note: this is a generated class, so won't be present until JavaCC has been run
> +import org.apache.commons.jexl.parser.ParseException;
> +
> +/**
> + * Implements the Jexl ScriptEngine for JSF-223.
> + * <p>
> + * See
> + * <a href="http://java.sun.com/javase/6/docs/api/javax/script/package-summary.html">Java Scripting API</a>
> + * Javadoc.
> + */
> +public class JexlScriptEngine extends AbstractScriptEngine {
> +
> + private final ScriptEngineFactory factory;
> +
> + private final JexlEngine engine;
> +
> + public JexlScriptEngine() {
> + this(null);
> + }
> +
> + public JexlScriptEngine(final ScriptEngineFactory _factory) {
> + factory = _factory;
> + engine = new JexlEngine();
> + }
> +
> + /** {@inheritDoc} */
> + public Bindings createBindings() {
> + return new SimpleBindings();
> + }
> +
> + /** {@inheritDoc} */
> + public Object eval(Reader script, ScriptContext context) throws ScriptException {
> + BufferedReader reader = new BufferedReader(script);
> + StringBuilder buffer = new StringBuilder();
> + try {
> + String line;
> + try {
> + while ((line = reader.readLine()) != null) {
> + buffer.append(line).append('\n');
> + }
> + } catch (IOException e) {
> + throw new ScriptException(e);
> + }
> + } finally {
> + try {
> + reader.close();
> + } catch (IOException e) {
> + }
> + }
> + return eval(buffer.toString(), context);
> + }
> +
> + /** {@inheritDoc} */
> + @SuppressWarnings("unchecked")
> + public Object eval(String scriptText, final ScriptContext context) throws ScriptException {
> + if (scriptText == null) {
> + return null;
> + }
> + context.setAttribute("context", context, ScriptContext.ENGINE_SCOPE);
<snip/>
Not sure what the above line is upto ...
> + try {
> + Script script = engine.createScript(scriptText);
> + JexlContext ctxt = new JexlContext(){
> + public void setVars(Map vars) {
> + context.setBindings(new SimpleBindings(vars), ScriptContext.ENGINE_SCOPE);
> + }
> +
> + public Map getVars() {
> + return new JexlContextWrapper(context);
> + }
> + };
> +
> + ctxt.getVars().put("context", "value");
<snap/>
... but it seems related to this other line above. Please elaborate.
> +
> + return script.execute(ctxt);
> + } catch (ParseException e) {
> + e.printStackTrace();
> + throw new ScriptException(e);
> + } catch (Exception e) {
> + e.printStackTrace();
> + throw new ScriptException(e.toString());
> + }
> + }
> +
> + /** {@inheritDoc} */
> + public ScriptEngineFactory getFactory() {
> + return factory == null ? new JexlScriptEngineFactory() : factory;
> + }
> +
> + /**
> + * Wrapper to convert a JSR-223 ScriptContext into a JexlContext.
> + *
<snip/>
The above statement (and perhaps the class name itself) is a bit
misleading. Its not that the ScriptContext is converted to a
JexlContext by this wrapper, but rather that it makes it easier to
complete the said conversion. However, given this is private, not the
most important.
-Rahul
> + * Current implementation only gives access to ENGINE_SCOPE binding.
> + */
> + @SuppressWarnings("unchecked")
> + private static class JexlContextWrapper implements Map {
> +
> + private final ScriptContext context;
> +
> + private JexlContextWrapper (final ScriptContext _context){
> + context = _context;
> + }
> +
> + public void clear() {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + bnd.clear();
> + }
> +
> + public boolean containsKey(final Object key) {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + return bnd.containsKey(key);
> + }
> +
> + public boolean containsValue(final Object value) {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + return bnd.containsValue(value);
> + }
> +
> + public Set entrySet() {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + return bnd.entrySet();
> + }
> +
> + public Object get(final Object key) {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + return bnd.get(key);
> + }
> +
> + public boolean isEmpty() {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + return bnd.isEmpty();
> + }
> +
> + public Set keySet() {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + return bnd.keySet();
> + }
> +
> + public Object put(final Object key, final Object value) {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + return bnd.put(key, value);
> + }
> +
> + public void putAll(Map t) {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + bnd.putAll(t); // N.B. SimpleBindings checks for valid keys
> + }
> +
> + public Object remove(Object key) {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + return bnd.remove(key);
> + }
> +
> + public int size() {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + return bnd.size();
> + }
> +
> + public Collection values() {
> + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> + return bnd.values();
> + }
> +
> + }
> +}
>
> Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java
> ------------------------------------------------------------------------------
> svn:eol-style = native
>
> Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java
> ------------------------------------------------------------------------------
> svn:keywords = Author Date Id Revision
>
> Added: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java
> URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java?rev=799492&view=auto
> ==============================================================================
> --- commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java (added)
> +++ commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java Fri Jul 31 02:24:07 2009
> @@ -0,0 +1,52 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements. See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + *
> + */
> +
> +package org.apache.commons.jexl.scripting;
> +
> +import javax.script.ScriptEngine;
> +import javax.script.ScriptEngineManager;
> +
> +import junit.framework.TestCase;
> +
> +public class JexlScriptEngineTest extends TestCase {
> +
> + public void testScripting() throws Exception {
> + ScriptEngineManager manager = new ScriptEngineManager();
> + assertNotNull("Manager should not be null", manager);
> + ScriptEngine engine = manager.getEngineByName("jexl");
> + assertNotNull("Engine should not be null (name)", engine);
> + engine = manager.getEngineByExtension("jexl");
> + assertNotNull("Engine should not be null (ext)", engine);
> + final Integer initialValue = Integer.valueOf(123);
> + assertEquals(initialValue,engine.eval("123"));
> + assertEquals(initialValue,engine.eval("0;123"));// multiple statements
> + long time1 = System.currentTimeMillis();
> + Long time2 = (Long) engine.eval("" +
> + "sys=context.class.forName(\"java.lang.System\");"
> + +"now=sys.currentTimeMillis();"
> + );
> + assertTrue("Must take some time to process this",time1 <= time2.longValue());
> + engine.put("value", initialValue);
> + assertEquals(initialValue,engine.get("value"));
> + final Long newValue = Long.valueOf(124);
> + assertEquals(newValue,engine.eval("old=value;value=value+1"));
> + assertEquals(initialValue,engine.get("old"));
> + assertEquals(newValue,engine.get("value"));
> + }
> +
> +}
>
> Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java
> ------------------------------------------------------------------------------
> svn:eol-style = native
>
> Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java
> ------------------------------------------------------------------------------
> svn:keywords = Author Date Id Revision
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org
Re: [JEXL] svn commit: r799492
Posted by sebb <se...@gmail.com>.
On 31/07/2009, Rahul Akolkar <ra...@gmail.com> wrote:
> On Thu, Jul 30, 2009 at 10:24 PM, <se...@apache.org> wrote:
> > Author: sebb
> > Date: Fri Jul 31 02:24:07 2009
> > New Revision: 799492
> >
> > URL: http://svn.apache.org/viewvc?rev=799492&view=rev
> > Log:
> > Initial implementation of Jexl Script engine and simple unit test
> >
> > Added:
> > commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java (with props)
> > commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java (with props)
> >
> > Added: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java
> > URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java?rev=799492&view=auto
> > ==============================================================================
> > --- commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java (added)
> > +++ commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java Fri Jul 31 02:24:07 2009
> > @@ -0,0 +1,202 @@
> > +/*
> > + * Licensed to the Apache Software Foundation (ASF) under one or more
> > + * contributor license agreements. See the NOTICE file distributed with
> > + * this work for additional information regarding copyright ownership.
> > + * The ASF licenses this file to You under the Apache License, Version 2.0
> > + * (the "License"); you may not use this file except in compliance with
> > + * the License. You may obtain a copy of the License at
> > + *
> > + * http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + *
> > + */
> > +
> > +package org.apache.commons.jexl.scripting;
> > +
> > +import java.io.BufferedReader;
> > +import java.io.IOException;
> > +import java.io.Reader;
> > +import java.util.Collection;
> > +import java.util.Map;
> > +import java.util.Set;
> > +
> > +import javax.script.AbstractScriptEngine;
> > +import javax.script.Bindings;
> > +import javax.script.ScriptContext;
> > +import javax.script.ScriptEngineFactory;
> > +import javax.script.ScriptException;
> > +import javax.script.SimpleBindings;
> > +
> > +import org.apache.commons.jexl.JexlContext;
> > +import org.apache.commons.jexl.JexlEngine;
> > +import org.apache.commons.jexl.Script;
> > +
> > +// Note: this is a generated class, so won't be present until JavaCC has been run
> > +import org.apache.commons.jexl.parser.ParseException;
> > +
> > +/**
> > + * Implements the Jexl ScriptEngine for JSF-223.
> > + * <p>
> > + * See
> > + * <a href="http://java.sun.com/javase/6/docs/api/javax/script/package-summary.html">Java Scripting API</a>
> > + * Javadoc.
> > + */
> > +public class JexlScriptEngine extends AbstractScriptEngine {
> > +
> > + private final ScriptEngineFactory factory;
> > +
> > + private final JexlEngine engine;
> > +
> > + public JexlScriptEngine() {
> > + this(null);
> > + }
> > +
> > + public JexlScriptEngine(final ScriptEngineFactory _factory) {
> > + factory = _factory;
> > + engine = new JexlEngine();
> > + }
> > +
> > + /** {@inheritDoc} */
> > + public Bindings createBindings() {
> > + return new SimpleBindings();
> > + }
> > +
> > + /** {@inheritDoc} */
> > + public Object eval(Reader script, ScriptContext context) throws ScriptException {
> > + BufferedReader reader = new BufferedReader(script);
> > + StringBuilder buffer = new StringBuilder();
> > + try {
> > + String line;
> > + try {
> > + while ((line = reader.readLine()) != null) {
> > + buffer.append(line).append('\n');
> > + }
> > + } catch (IOException e) {
> > + throw new ScriptException(e);
> > + }
> > + } finally {
> > + try {
> > + reader.close();
> > + } catch (IOException e) {
> > + }
> > + }
> > + return eval(buffer.toString(), context);
> > + }
> > +
> > + /** {@inheritDoc} */
> > + @SuppressWarnings("unchecked")
> > + public Object eval(String scriptText, final ScriptContext context) throws ScriptException {
> > + if (scriptText == null) {
> > + return null;
> > + }
> > + context.setAttribute("context", context, ScriptContext.ENGINE_SCOPE);
> <snip/>
>
> Not sure what the above line is upto ...
>
JSR-223 mandates that:
>>>
In all cases, the ScriptContext used during a script execution must be
a value in the Engine Scope of the ScriptEngine whose key is the
String “context”.
<<<
Will document.
> > + try {
> > + Script script = engine.createScript(scriptText);
> > + JexlContext ctxt = new JexlContext(){
> > + public void setVars(Map vars) {
> > + context.setBindings(new SimpleBindings(vars), ScriptContext.ENGINE_SCOPE);
> > + }
> > +
> > + public Map getVars() {
> > + return new JexlContextWrapper(context);
> > + }
> > + };
> > +
> > + ctxt.getVars().put("context", "value");
> <snap/>
>
> ... but it seems related to this other line above. Please elaborate.
>
Oops, the last line is a bug. Will fix.
> > +
> > + return script.execute(ctxt);
> > + } catch (ParseException e) {
> > + e.printStackTrace();
> > + throw new ScriptException(e);
> > + } catch (Exception e) {
> > + e.printStackTrace();
> > + throw new ScriptException(e.toString());
> > + }
> > + }
> > +
> > + /** {@inheritDoc} */
> > + public ScriptEngineFactory getFactory() {
> > + return factory == null ? new JexlScriptEngineFactory() : factory;
> > + }
> > +
> > + /**
> > + * Wrapper to convert a JSR-223 ScriptContext into a JexlContext.
> > + *
> <snip/>
>
> The above statement (and perhaps the class name itself) is a bit
> misleading. Its not that the ScriptContext is converted to a
> JexlContext by this wrapper, but rather that it makes it easier to
> complete the said conversion. However, given this is private, not the
> most important.
OK, will clarify.
> -Rahul
>
>
>
> > + * Current implementation only gives access to ENGINE_SCOPE binding.
> > + */
> > + @SuppressWarnings("unchecked")
> > + private static class JexlContextWrapper implements Map {
> > +
> > + private final ScriptContext context;
> > +
> > + private JexlContextWrapper (final ScriptContext _context){
> > + context = _context;
> > + }
> > +
> > + public void clear() {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + bnd.clear();
> > + }
> > +
> > + public boolean containsKey(final Object key) {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + return bnd.containsKey(key);
> > + }
> > +
> > + public boolean containsValue(final Object value) {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + return bnd.containsValue(value);
> > + }
> > +
> > + public Set entrySet() {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + return bnd.entrySet();
> > + }
> > +
> > + public Object get(final Object key) {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + return bnd.get(key);
> > + }
> > +
> > + public boolean isEmpty() {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + return bnd.isEmpty();
> > + }
> > +
> > + public Set keySet() {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + return bnd.keySet();
> > + }
> > +
> > + public Object put(final Object key, final Object value) {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + return bnd.put(key, value);
> > + }
> > +
> > + public void putAll(Map t) {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + bnd.putAll(t); // N.B. SimpleBindings checks for valid keys
> > + }
> > +
> > + public Object remove(Object key) {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + return bnd.remove(key);
> > + }
> > +
> > + public int size() {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + return bnd.size();
> > + }
> > +
> > + public Collection values() {
> > + Bindings bnd = context.getBindings(ScriptContext.ENGINE_SCOPE);
> > + return bnd.values();
> > + }
> > +
> > + }
> > +}
> >
> > Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java
> > ------------------------------------------------------------------------------
> > svn:eol-style = native
> >
> > Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/scripting/JexlScriptEngine.java
> > ------------------------------------------------------------------------------
> > svn:keywords = Author Date Id Revision
> >
> > Added: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java
> > URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java?rev=799492&view=auto
> > ==============================================================================
> > --- commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java (added)
> > +++ commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java Fri Jul 31 02:24:07 2009
> > @@ -0,0 +1,52 @@
> > +/*
> > + * Licensed to the Apache Software Foundation (ASF) under one or more
> > + * contributor license agreements. See the NOTICE file distributed with
> > + * this work for additional information regarding copyright ownership.
> > + * The ASF licenses this file to You under the Apache License, Version 2.0
> > + * (the "License"); you may not use this file except in compliance with
> > + * the License. You may obtain a copy of the License at
> > + *
> > + * http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + *
> > + */
> > +
> > +package org.apache.commons.jexl.scripting;
> > +
> > +import javax.script.ScriptEngine;
> > +import javax.script.ScriptEngineManager;
> > +
> > +import junit.framework.TestCase;
> > +
> > +public class JexlScriptEngineTest extends TestCase {
> > +
> > + public void testScripting() throws Exception {
> > + ScriptEngineManager manager = new ScriptEngineManager();
> > + assertNotNull("Manager should not be null", manager);
> > + ScriptEngine engine = manager.getEngineByName("jexl");
> > + assertNotNull("Engine should not be null (name)", engine);
> > + engine = manager.getEngineByExtension("jexl");
> > + assertNotNull("Engine should not be null (ext)", engine);
> > + final Integer initialValue = Integer.valueOf(123);
> > + assertEquals(initialValue,engine.eval("123"));
> > + assertEquals(initialValue,engine.eval("0;123"));// multiple statements
> > + long time1 = System.currentTimeMillis();
> > + Long time2 = (Long) engine.eval("" +
> > + "sys=context.class.forName(\"java.lang.System\");"
> > + +"now=sys.currentTimeMillis();"
> > + );
> > + assertTrue("Must take some time to process this",time1 <= time2.longValue());
> > + engine.put("value", initialValue);
> > + assertEquals(initialValue,engine.get("value"));
> > + final Long newValue = Long.valueOf(124);
> > + assertEquals(newValue,engine.eval("old=value;value=value+1"));
> > + assertEquals(initialValue,engine.get("old"));
> > + assertEquals(newValue,engine.get("value"));
> > + }
> > +
> > +}
> >
> > Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java
> > ------------------------------------------------------------------------------
> > svn:eol-style = native
> >
> > Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/scripting/JexlScriptEngineTest.java
> > ------------------------------------------------------------------------------
> > svn:keywords = Author Date Id Revision
> >
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org