Author: markt Date: Sun Jul 14 11:13:43 2013 New Revision: 1502956 URL: http://svn.apache.org/r1502956 Log: Implement concatenation operator (+=) and include some units tests
Added: tomcat/trunk/test/org/apache/el/parser/TestAstConcatenation.java (with props) Modified: tomcat/trunk/java/org/apache/el/parser/AstConcatenation.java Modified: tomcat/trunk/java/org/apache/el/parser/AstConcatenation.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/AstConcatenation.java?rev=1502956&r1=1502955&r2=1502956&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/parser/AstConcatenation.java (original) +++ tomcat/trunk/java/org/apache/el/parser/AstConcatenation.java Sun Jul 14 11:13:43 2013 @@ -17,10 +17,29 @@ /* Generated By:JJTree: Do not edit this line. AstConcatenation.java Version 4.3 */ package org.apache.el.parser; -public -class AstConcatenation extends SimpleNode { - public AstConcatenation(int id) { - super(id); - } +import javax.el.ELException; + +import org.apache.el.lang.EvaluationContext; + +public class AstConcatenation extends SimpleNode { + + public AstConcatenation(int id) { + super(id); + } + + + @Override + public Object getValue(EvaluationContext ctx) throws ELException { + // Coerce the two child nodes to string and then concatenate + String s1 = coerceToString(children[0].getValue(ctx)); + String s2 = coerceToString(children[1].getValue(ctx)); + return s1 + s2; + } + + + @Override + public Class<?> getType(EvaluationContext ctx) throws ELException { + return String.class; + } } /* JavaCC - OriginalChecksum=a95de353974c2c05fa5c7d695a1d50fd (do not edit this line) */ Added: tomcat/trunk/test/org/apache/el/parser/TestAstConcatenation.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/parser/TestAstConcatenation.java?rev=1502956&view=auto ============================================================================== --- tomcat/trunk/test/org/apache/el/parser/TestAstConcatenation.java (added) +++ tomcat/trunk/test/org/apache/el/parser/TestAstConcatenation.java Sun Jul 14 11:13:43 2013 @@ -0,0 +1,122 @@ +/* + * 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.el.parser; + +import javax.el.ELContext; +import javax.el.ELManager; +import javax.el.ELProcessor; +import javax.el.ExpressionFactory; +import javax.el.ValueExpression; + +import org.junit.Assert; +import org.junit.Test; + +public class TestAstConcatenation { + + /** + * Test string concatenation. + */ + @Test + public void testConcatenation01() { + ELProcessor processor = new ELProcessor(); + Object result = processor.getValue("'a' += 'b'", String.class); + Assert.assertEquals("ab", result); + } + + /** + * Test coercion to string then concatenation. + */ + @Test + public void testConcatenation02() { + ELProcessor processor = new ELProcessor(); + Object result = processor.getValue("1 += 2", String.class); + Assert.assertEquals("12", result); + } + + /** + * Test string concatenation with whitespace. + */ + @Test + public void testConcatenation03() { + ELProcessor processor = new ELProcessor(); + Object result = processor.getValue("' a' += ' b '", String.class); + Assert.assertEquals(" a b ", result); + } + + /** + * Test string concatenation with mixed types. + */ + @Test + public void testConcatenation04() { + ELProcessor processor = new ELProcessor(); + Object result = processor.getValue("'a' += 3", String.class); + Assert.assertEquals("a3", result); + } + + /** + * Test operator precedence (+ before +=). + */ + @Test + public void testPrecedence01() { + ELProcessor processor = new ELProcessor(); + Object result = processor.getValue("1 + 2 += 3", String.class); + Assert.assertEquals("33", result); + } + + /** + * Test operator precedence (+ before +=). + */ + @Test + public void testPrecedence02() { + ELProcessor processor = new ELProcessor(); + Object result = processor.getValue("1 += 2 + 3", String.class); + Assert.assertEquals("15", result); + } + + /** + * Test operator precedence (+= before >). + */ + @Test + public void testPrecedence03() { + ELProcessor processor = new ELProcessor(); + Object result = processor.getValue("10 > 2 += 3", String.class); + Assert.assertEquals("false", result); + } + + /** + * Test operator precedence (+= before >). + */ + @Test + public void testPrecedence04() { + ELProcessor processor = new ELProcessor(); + Object result = processor.getValue("1 += 2 > 3", String.class); + Assert.assertEquals("true", result); + } + + @Test + public void testGetType() { + ELProcessor processor = new ELProcessor(); + ELContext context = processor.getELManager().getELContext(); + ExpressionFactory factory = ELManager.getExpressionFactory(); + + ValueExpression ve = factory.createValueExpression( + context, "${'a' += 3}", String.class); + + Assert.assertEquals(String.class, ve.getType(context)); + Assert.assertEquals("a3", ve.getValue(context)); + } +} Propchange: tomcat/trunk/test/org/apache/el/parser/TestAstConcatenation.java ------------------------------------------------------------------------------ svn:eol-style = native --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org