Added: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/UnifiedJEXLTest.java URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/UnifiedJEXLTest.java?rev=794133&view=auto ============================================================================== --- commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/UnifiedJEXLTest.java (added) +++ commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/UnifiedJEXLTest.java Wed Jul 15 03:43:49 2009 @@ -0,0 +1,151 @@ +/* + * 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; + +import junit.framework.TestCase; +/** + * Test cases for the UnifiedEL. + */ +public class UnifiedJEXLTest extends TestCase { + static JexlEngine JEXL = new JexlEngine(); + static { + JEXL.setSilent(false); + } + static UnifiedJEXL EL = new UnifiedJEXL(JEXL); + + public static class Froboz { + int value; + public Froboz(int v) { + value = v; + } + public void setValue(int v) { + value = v; + } + public int getValue() { + return value; + } + } + + public static class Quux { + String str; + Froboz froboz; + public Quux(String str, int fro) { + this.str = str; + froboz = new Froboz(fro); + } + + public Froboz getFroboz() { + return froboz; + } + + public void setFroboz(Froboz froboz) { + this.froboz = froboz; + } + + public String getStr() { + return str; + } + + public void setStr(String str) { + this.str = str; + } + } + + public UnifiedJEXLTest(String testName) { + super(testName); + } + + + public void testAssign() throws Exception { + UnifiedJEXL.Expression assign = EL.parse("${froboz.value = 10}"); + UnifiedJEXL.Expression check = EL.parse("${froboz.value}"); + JexlContext jc = JexlHelper.createContext(); + Object o = assign.evaluate(jc); + assertEquals("Result is not 10", new Integer(10), o); + o = check.evaluate(jc); + assertEquals("Result is not 10", new Integer(10), o); + } + + public void testDear() throws Exception { + UnifiedJEXL.Expression assign = EL.parse("Dear ${p} ${name};"); + JexlContext jc = JexlHelper.createContext(); + jc.getVars().put("p", "Mr"); + jc.getVars().put("name", "Doe"); + Object o = assign.evaluate(jc); + assertEquals("Dear Mr Doe;", o); + jc.getVars().put("p", "Ms"); + jc.getVars().put("name", "Jones"); + o = assign.evaluate(jc); + assertEquals("Dear Ms Jones;", o); + } + + public void testDear2Phase() throws Exception { + UnifiedJEXL.Expression assign = EL.parse("Dear #{p} ${name};"); + JexlContext jc = JexlHelper.createContext(); + jc.getVars().put("name", "Doe"); + UnifiedJEXL.Expression phase1 = assign.prepare(jc); + jc.getVars().put("p", "Mr"); + jc.getVars().put("name", "Should not be used in 2nd phase"); + Object o = phase1.evaluate(jc); + assertEquals("Dear Mr Doe;", o); + } + + public void testNested() throws Exception { + UnifiedJEXL.Expression expr = EL.parse("#{${hi}+'.world'}"); + JexlContext jc = JexlHelper.createContext(); + jc.getVars().put("hi", "hello"); + jc.getVars().put("hello.world", "Hello World!"); + Object o = expr.evaluate(jc); + assertEquals("Hello World!", o); + } + + public void testImmediate() throws Exception { + UnifiedJEXL.Expression expr = EL.parse("${'Hello ' + 'World!'}"); + JexlContext jc = JexlHelper.createContext(); + Object o = expr.evaluate(jc); + assertEquals("Hello World!", o); + } + + public void testDeferred() throws Exception { + UnifiedJEXL.Expression expr = EL.parse("#{'world'}"); + JexlContext jc = JexlHelper.createContext(); + Object o = expr.evaluate(jc); + assertEquals("world", o); + } + + public void testCharAtBug() throws Exception { + JexlContext jc = JexlHelper.createContext(); + + jc.getVars().put("foo", "abcdef"); + UnifiedJEXL.Expression expr = EL.parse("${foo.substring(2,4)/*comment*/}"); + Object o = expr.evaluate(jc); + assertEquals("cd", o); + + jc.getVars().put("bar", "foo"); + EL.getEngine().setSilent(true); + expr = EL.parse("#{${bar}+'.charAt(-2)'}"); + expr = expr.prepare(jc); + o = expr.evaluate(jc); + assertEquals(null, o); + + } + + public static void main(String[] args) throws Exception { + //new UnifiedELTest("debug").testClassHash(); + new UnifiedJEXLTest("debug").testCharAtBug(); + } +}
Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/UnifiedJEXLTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/UnifiedJEXLTest.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL