/***************************************************************** * 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.cayenne.exp; import org.apache.cayenne.exp.parser.ASTAbs; import org.apache.cayenne.exp.parser.ASTAsterisk; import org.apache.cayenne.exp.parser.ASTAvg; import org.apache.cayenne.exp.parser.ASTConcat; import org.apache.cayenne.exp.parser.ASTCount; import org.apache.cayenne.exp.parser.ASTCurrentDate; import org.apache.cayenne.exp.parser.ASTCurrentTime; import org.apache.cayenne.exp.parser.ASTCurrentTimestamp; import org.apache.cayenne.exp.parser.ASTLength; import org.apache.cayenne.exp.parser.ASTLocate; import org.apache.cayenne.exp.parser.ASTLower; import org.apache.cayenne.exp.parser.ASTMax; import org.apache.cayenne.exp.parser.ASTMin; import org.apache.cayenne.exp.parser.ASTMod; import org.apache.cayenne.exp.parser.ASTScalar; import org.apache.cayenne.exp.parser.ASTSqrt; import org.apache.cayenne.exp.parser.ASTSubstring; import org.apache.cayenne.exp.parser.ASTSum; import org.apache.cayenne.exp.parser.ASTTrim; import org.apache.cayenne.exp.parser.ASTUpper; import org.apache.cayenne.testdo.testmap.Artist; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * @since 4.0 */ public class FunctionExpressionFactoryTest { @Test public void substringExp() throws Exception { Expression exp1 = FunctionExpressionFactory.substringExp(Artist.ARTIST_NAME.path(), 10, 15); Expression exp2 = FunctionExpressionFactory.substringExp(Artist.ARTIST_NAME.getName(), 10, 15); Expression exp3 = FunctionExpressionFactory.substringExp(Artist.ARTIST_NAME.path(), new ASTScalar(10), new ASTScalar(15)); assertTrue(exp1 instanceof ASTSubstring); assertEquals(3, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); assertEquals(10, exp1.getOperand(1)); assertEquals(15, exp1.getOperand(2)); assertEquals(exp1, exp2); assertEquals(exp2, exp3); } @Test public void trimExp() throws Exception { Expression exp1 = FunctionExpressionFactory.trimExp(Artist.ARTIST_NAME.path()); Expression exp2 = FunctionExpressionFactory.trimExp(Artist.ARTIST_NAME.getName()); assertTrue(exp1 instanceof ASTTrim); assertEquals(1, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); assertEquals(exp1, exp2); } @Test public void lowerExp() throws Exception { Expression exp1 = FunctionExpressionFactory.lowerExp(Artist.ARTIST_NAME.path()); Expression exp2 = FunctionExpressionFactory.lowerExp(Artist.ARTIST_NAME.getName()); assertTrue(exp1 instanceof ASTLower); assertEquals(1, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); assertEquals(exp1, exp2); } @Test public void upperExp() throws Exception { Expression exp1 = FunctionExpressionFactory.upperExp(Artist.ARTIST_NAME.path()); Expression exp2 = FunctionExpressionFactory.upperExp(Artist.ARTIST_NAME.getName()); assertTrue(exp1 instanceof ASTUpper); assertEquals(1, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); assertEquals(exp1, exp2); } @Test public void lengthExp() throws Exception { Expression exp1 = FunctionExpressionFactory.lengthExp(Artist.ARTIST_NAME.path()); Expression exp2 = FunctionExpressionFactory.lengthExp(Artist.ARTIST_NAME.getName()); assertTrue(exp1 instanceof ASTLength); assertEquals(1, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); assertEquals(exp1, exp2); } @Test public void locateExp() throws Exception { Expression exp1 = FunctionExpressionFactory.locateExp("abc", Artist.ARTIST_NAME.path()); Expression exp2 = FunctionExpressionFactory.locateExp("abc", Artist.ARTIST_NAME.getName()); Expression exp3 = FunctionExpressionFactory.locateExp(new ASTScalar("abc"), Artist.ARTIST_NAME.path()); assertTrue(exp1 instanceof ASTLocate); assertEquals(2, exp1.getOperandCount()); assertEquals("abc", exp1.getOperand(0)); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(1)); assertEquals(exp1, exp2); assertEquals(exp2, exp3); } @Test public void absExp() throws Exception { Expression exp1 = FunctionExpressionFactory.absExp(Artist.ARTIST_NAME.path()); Expression exp2 = FunctionExpressionFactory.absExp(Artist.ARTIST_NAME.getName()); assertTrue(exp1 instanceof ASTAbs); assertEquals(1, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); assertEquals(exp1, exp2); } @Test public void sqrtExp() throws Exception { Expression exp1 = FunctionExpressionFactory.sqrtExp(Artist.ARTIST_NAME.path()); Expression exp2 = FunctionExpressionFactory.sqrtExp(Artist.ARTIST_NAME.getName()); assertTrue(exp1 instanceof ASTSqrt); assertEquals(1, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); assertEquals(exp1, exp2); } @Test public void modExp() throws Exception { Expression exp1 = FunctionExpressionFactory.modExp(Artist.ARTIST_NAME.path(), 10); Expression exp2 = FunctionExpressionFactory.modExp(Artist.ARTIST_NAME.getName(), 10); Expression exp3 = FunctionExpressionFactory.modExp(Artist.ARTIST_NAME.path(), new ASTScalar(10)); assertTrue(exp1 instanceof ASTMod); assertEquals(2, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); assertEquals(10, exp1.getOperand(1)); assertEquals(exp1, exp2); assertEquals(exp2, exp3); } @Test public void concatExp() throws Exception { Expression exp1 = FunctionExpressionFactory.concatExp(Artist.ARTIST_NAME.path(), new ASTScalar("abc"), Artist.DATE_OF_BIRTH.path()); assertTrue(exp1 instanceof ASTConcat); assertEquals(3, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); assertEquals("abc", exp1.getOperand(1)); assertEquals(Artist.DATE_OF_BIRTH.path(), exp1.getOperand(2)); Expression exp2 = FunctionExpressionFactory.concatExp(Artist.ARTIST_NAME.getName(), Artist.DATE_OF_BIRTH.getName(), Artist.PAINTING_ARRAY.getName()); assertTrue(exp2 instanceof ASTConcat); assertEquals(3, exp2.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp2.getOperand(0)); assertEquals(Artist.DATE_OF_BIRTH.path(), exp2.getOperand(1)); assertEquals(Artist.PAINTING_ARRAY.path(), exp2.getOperand(2)); } @Test public void countTest() throws Exception { Expression exp1 = FunctionExpressionFactory.countExp(); assertTrue(exp1 instanceof ASTCount); assertEquals(1, exp1.getOperandCount()); assertEquals(new ASTAsterisk(), exp1.getOperand(0)); Expression exp2 = FunctionExpressionFactory.countExp(Artist.ARTIST_NAME.path()); assertTrue(exp2 instanceof ASTCount); assertEquals(1, exp2.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp2.getOperand(0)); } @Test public void minTest() throws Exception { Expression exp1 = FunctionExpressionFactory.minExp(Artist.ARTIST_NAME.path()); assertTrue(exp1 instanceof ASTMin); assertEquals(1, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); } @Test public void maxTest() throws Exception { Expression exp1 = FunctionExpressionFactory.maxExp(Artist.ARTIST_NAME.path()); assertTrue(exp1 instanceof ASTMax); assertEquals(1, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); } @Test public void avgTest() throws Exception { Expression exp1 = FunctionExpressionFactory.avgExp(Artist.ARTIST_NAME.path()); assertTrue(exp1 instanceof ASTAvg); assertEquals(1, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); } @Test public void sumTest() throws Exception { Expression exp1 = FunctionExpressionFactory.sumExp(Artist.ARTIST_NAME.path()); assertTrue(exp1 instanceof ASTSum); assertEquals(1, exp1.getOperandCount()); assertEquals(Artist.ARTIST_NAME.path(), exp1.getOperand(0)); } @Test public void currentDateTest() throws Exception { Expression exp = FunctionExpressionFactory.currentDate(); assertTrue(exp instanceof ASTCurrentDate); } @Test public void currentTimeTest() throws Exception { Expression exp = FunctionExpressionFactory.currentTime(); assertTrue(exp instanceof ASTCurrentTime); } @Test public void currentTimestampTest() throws Exception { Expression exp = FunctionExpressionFactory.currentTimestamp(); assertTrue(exp instanceof ASTCurrentTimestamp); } }