/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.query.sql.lang; import java.util.Arrays; import java.util.Collection; import junit.framework.TestCase; import org.teiid.query.sql.symbol.Constant; import org.teiid.query.sql.symbol.ElementSymbol; /** */ public class TestCriteria extends TestCase { /** * Constructor for TestCriteria. * @param arg0 */ public TestCriteria(String arg0) { super(arg0); } public CompareCriteria exampleCompareCrit(int num) { return new CompareCriteria( new ElementSymbol("" + num), //$NON-NLS-1$ CompareCriteria.EQ, new Constant("" + num)); //$NON-NLS-1$ } public void helpTestSeparateCriteria(Criteria originalCrit, Criteria[] partsArray) { Collection<Criteria> expectedParts = Arrays.asList(partsArray); Collection<Criteria> actualParts = Criteria.separateCriteriaByAnd(originalCrit); assertEquals("Didn't get the same parts ", expectedParts, actualParts); //$NON-NLS-1$ } public void testSeparateCriteriaByAnd1() { CompareCriteria crit1 = exampleCompareCrit(1); helpTestSeparateCriteria(crit1, new Criteria[] { crit1 }); } public void testSeparateCriteriaByAnd2() { CompareCriteria crit1 = exampleCompareCrit(1); CompareCriteria crit2 = exampleCompareCrit(2); CompoundCriteria compCrit = new CompoundCriteria(); compCrit.setOperator(CompoundCriteria.AND); compCrit.addCriteria(crit1); compCrit.addCriteria(crit2); helpTestSeparateCriteria(compCrit, new Criteria[] { crit1, crit2 }); } public void testSeparateCriteriaByAnd3() { CompareCriteria crit1 = exampleCompareCrit(1); CompareCriteria crit2 = exampleCompareCrit(2); CompareCriteria crit3 = exampleCompareCrit(3); CompoundCriteria compCrit1 = new CompoundCriteria(); compCrit1.setOperator(CompoundCriteria.AND); compCrit1.addCriteria(crit2); compCrit1.addCriteria(crit3); CompoundCriteria compCrit2 = new CompoundCriteria(); compCrit2.setOperator(CompoundCriteria.AND); compCrit2.addCriteria(crit1); compCrit2.addCriteria(compCrit1); helpTestSeparateCriteria(compCrit2, new Criteria[] { crit1, crit2, crit3 }); } public void testSeparateCriteriaByAnd4() { CompareCriteria crit1 = exampleCompareCrit(1); CompareCriteria crit2 = exampleCompareCrit(2); CompareCriteria crit3 = exampleCompareCrit(3); CompoundCriteria compCrit1 = new CompoundCriteria(); compCrit1.setOperator(CompoundCriteria.OR); compCrit1.addCriteria(crit2); compCrit1.addCriteria(crit3); CompoundCriteria compCrit2 = new CompoundCriteria(); compCrit2.setOperator(CompoundCriteria.AND); compCrit2.addCriteria(crit1); compCrit2.addCriteria(compCrit1); helpTestSeparateCriteria(compCrit2, new Criteria[] { crit1, compCrit1 }); } public void testSeparateCriteriaByAnd5() { CompareCriteria crit1 = exampleCompareCrit(1); CompareCriteria crit2 = exampleCompareCrit(2); CompareCriteria crit3 = exampleCompareCrit(3); CompoundCriteria compCrit1 = new CompoundCriteria(); compCrit1.setOperator(CompoundCriteria.AND); compCrit1.addCriteria(crit2); compCrit1.addCriteria(crit3); NotCriteria notCrit = new NotCriteria(compCrit1); CompoundCriteria compCrit2 = new CompoundCriteria(); compCrit2.setOperator(CompoundCriteria.AND); compCrit2.addCriteria(crit1); compCrit2.addCriteria(notCrit); helpTestSeparateCriteria(compCrit2, new Criteria[] { crit1, notCrit }); } public void helpTestCombineCriteria(Criteria crit1, Criteria crit2, Criteria expected) { Criteria actual = Criteria.combineCriteria(crit1, crit2); assertEquals("Didn't combine the criteria correctly ", expected, actual); //$NON-NLS-1$ } public void testCombineCriteria1() { helpTestCombineCriteria(null, null, null); } public void testCombineCriteria2() { helpTestCombineCriteria(exampleCompareCrit(1), null, exampleCompareCrit(1)); } public void testCombineCriteria3() { helpTestCombineCriteria(null, exampleCompareCrit(1), exampleCompareCrit(1)); } public void testCombineCriteria4() { CompareCriteria crit1 = exampleCompareCrit(1); CompareCriteria crit2 = exampleCompareCrit(2); CompoundCriteria compCrit = new CompoundCriteria(); compCrit.setOperator(CompoundCriteria.AND); compCrit.addCriteria(crit1); compCrit.addCriteria(crit2); helpTestCombineCriteria(crit1, crit2, compCrit); } public void testCombineCriteria5() { CompareCriteria crit1 = exampleCompareCrit(1); CompareCriteria crit2 = exampleCompareCrit(2); CompareCriteria crit3 = exampleCompareCrit(3); CompoundCriteria compCrit = new CompoundCriteria(); compCrit.setOperator(CompoundCriteria.AND); compCrit.addCriteria(crit1); compCrit.addCriteria(crit2); CompoundCriteria compCrit2 = new CompoundCriteria(); compCrit2.setOperator(CompoundCriteria.AND); compCrit2.addCriteria(crit1); compCrit2.addCriteria(crit2); compCrit2.addCriteria(crit3); helpTestCombineCriteria(compCrit, crit3, compCrit2); } public void testCombineCriteria6() { CompareCriteria crit1 = exampleCompareCrit(1); CompareCriteria crit2 = exampleCompareCrit(2); CompareCriteria crit3 = exampleCompareCrit(3); CompoundCriteria compCrit = new CompoundCriteria(); compCrit.setOperator(CompoundCriteria.AND); compCrit.addCriteria(crit1); compCrit.addCriteria(crit2); CompoundCriteria compCrit2 = new CompoundCriteria(); compCrit2.setOperator(CompoundCriteria.AND); compCrit2.addCriteria(crit3); compCrit2.addCriteria(crit1); compCrit2.addCriteria(crit2); helpTestCombineCriteria(crit3, compCrit, compCrit2); } }