/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program 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. * * Copyright (c) 2002-2016 Pentaho Corporation.. All rights reserved. */ package org.pentaho.platform.dataaccess; import static org.hamcrest.CoreMatchers.is; import org.junit.Test; import org.junit.Assert; import org.pentaho.platform.dataaccess.metadata.model.Operator; public class OperatorTest { @Test public void testParse() { Assert.assertThat( Operator.parse( ">" ), is( Operator.GREATER_THAN ) ); Assert.assertThat( Operator.parse( "<" ), is( Operator.LESS_THAN ) ); Assert.assertThat( Operator.parse( "=" ), is( Operator.EQUAL ) ); Assert.assertThat( Operator.parse( ">=" ), is( Operator.GREATOR_OR_EQUAL ) ); Assert.assertThat( Operator.parse( "<=" ), is( Operator.LESS_OR_EQUAL ) ); Assert.assertThat( Operator.parse( "EXACTLY MATCHES" ), is( Operator.EXACTLY_MATCHES ) ); Assert.assertThat( Operator.parse( "CONTAINS" ), is( Operator.CONTAINS ) ); Assert.assertThat( Operator.parse( "DOES NOT CONTAIN" ), is( Operator.DOES_NOT_CONTAIN ) ); Assert.assertThat( Operator.parse( "BEGINS WITH" ), is( Operator.BEGINS_WITH ) ); Assert.assertThat( Operator.parse( "ENDS WITH" ), is( Operator.ENDS_WITH ) ); Assert.assertThat( Operator.parse( "IS NULL" ), is( Operator.IS_NULL ) ); Assert.assertThat( Operator.parse( "IS NOT NULL" ), is( Operator.IS_NOT_NULL ) ); Assert.assertThat( Operator.parse( null ), is( Operator.EQUAL ) ); Assert.assertThat( Operator.parse( "" ), is( Operator.EQUAL ) ); Assert.assertThat( Operator.parse( "DUMMY STRING" ), is( Operator.EQUAL ) ); } @Test public void testToString() { Assert.assertThat( Operator.GREATER_THAN.toString(), is( ">" ) ); Assert.assertThat( Operator.LESS_THAN.toString(), is( "<" ) ); Assert.assertThat( Operator.EQUAL.toString(), is( "=" ) ); Assert.assertThat( Operator.GREATOR_OR_EQUAL.toString(), is( ">=" ) ); Assert.assertThat( Operator.LESS_OR_EQUAL.toString(), is( "<=" ) ); Assert.assertThat( Operator.EXACTLY_MATCHES.toString(), is( "EXACTLY MATCHES" ) ); Assert.assertThat( Operator.CONTAINS.toString(), is( "CONTAINS" ) ); Assert.assertThat( Operator.DOES_NOT_CONTAIN.toString(), is( "DOES NOT CONTAIN" ) ); Assert.assertThat( Operator.BEGINS_WITH.toString(), is( "BEGINS WITH" ) ); Assert.assertThat( Operator.ENDS_WITH.toString(), is( "ENDS WITH" ) ); Assert.assertThat( Operator.IS_NULL.toString(), is( "IS NULL" ) ); Assert.assertThat( Operator.IS_NOT_NULL.toString(), is( "IS NOT NULL" ) ); } @Test public void testRequiresValue() { Assert.assertThat( Operator.GREATER_THAN.requiresValue(), is( true ) ); Assert.assertThat( Operator.LESS_THAN.requiresValue(), is( true ) ); Assert.assertThat( Operator.EQUAL.requiresValue(), is( true ) ); Assert.assertThat( Operator.GREATOR_OR_EQUAL.requiresValue(), is( true ) ); Assert.assertThat( Operator.LESS_OR_EQUAL.requiresValue(), is( true ) ); Assert.assertThat( Operator.EXACTLY_MATCHES.requiresValue(), is( true ) ); Assert.assertThat( Operator.CONTAINS.requiresValue(), is( true ) ); Assert.assertThat( Operator.DOES_NOT_CONTAIN.requiresValue(), is( true ) ); Assert.assertThat( Operator.BEGINS_WITH.requiresValue(), is( true ) ); Assert.assertThat( Operator.ENDS_WITH.requiresValue(), is( true ) ); Assert.assertThat( Operator.IS_NULL.requiresValue(), is( false ) ); Assert.assertThat( Operator.IS_NOT_NULL.requiresValue(), is( false ) ); } @Test public void testFormatConditionForNonParameterizedSingleValues() { String columnName = "column_name"; String paramName = "param_name"; String[] values = { "value1" }; Operator[] operatorsArray = { Operator.GREATER_THAN, Operator.LESS_THAN, Operator.EQUAL, Operator.GREATOR_OR_EQUAL, Operator.LESS_OR_EQUAL }; //check with different number of values passed as argument for ( Operator operator : operatorsArray ) { Assert.assertThat( operator.formatCondition( columnName, paramName, values, false ), is( columnName + " " + operator.toString() + values[ 0 ] ) ); } Assert.assertThat( Operator.EXACTLY_MATCHES.formatCondition( columnName, paramName, values, false ), is( columnName + " = " + values[ 0 ] ) ); Assert.assertThat( Operator.CONTAINS.formatCondition( columnName, paramName, values, false ), is( "CONTAINS(" + columnName + ";" + values[ 0 ] + ")" ) ); Assert.assertThat( Operator.DOES_NOT_CONTAIN.formatCondition( columnName, paramName, values, false ), is( "NOT(CONTAINS(" + columnName + ";" + values[ 0 ] + "))" ) ); Assert.assertThat( Operator.BEGINS_WITH.formatCondition( columnName, paramName, values, false ), is( "BEGINSWITH(" + columnName + ";" + values[ 0 ] + ")" ) ); Assert.assertThat( Operator.ENDS_WITH.formatCondition( columnName, paramName, values, false ), is( "ENDSWITH(" + columnName + ";" + values[ 0 ] + ")" ) ); Assert.assertThat( Operator.IS_NULL.formatCondition( columnName, paramName, values, false ), is( "ISNA(" + columnName + ")" ) ); Assert.assertThat( Operator.IS_NOT_NULL.formatCondition( columnName, paramName, values, false ), is( "NOT(ISNA(" + columnName + "))" ) ); } @Test public void testFormatConditionForNonParameterizedMultipleValues() { String columnName = "column_name"; String paramName = "param_name"; String[] values = { "\"value1\"", "value2", "value3" }; Operator[] operatorsArray = { Operator.GREATER_THAN, Operator.LESS_THAN, Operator.EQUAL, Operator.GREATOR_OR_EQUAL, Operator.LESS_OR_EQUAL }; //check with different number of values passed as argument for ( Operator operator : operatorsArray ) { Assert.assertThat( operator.formatCondition( columnName, paramName, values, false ), is( columnName + " " + operator.toString() + values[ 0 ] ) ); } String valuesList = ""; for ( int idx = 0; idx < values.length; idx++ ) { if ( idx > 0 ) { valuesList += ";"; } if ( !values[ idx ].startsWith( "\"" ) && !values[ idx ].endsWith( "\"" ) ) { valuesList += "\"" + values[ idx ] + "\""; } else { valuesList += values[ idx ]; } } Assert.assertThat( Operator.EXACTLY_MATCHES.formatCondition( columnName, paramName, values, false ), is( "IN(" + columnName + "; " + valuesList + ")" ) ); Assert.assertThat( Operator.CONTAINS.formatCondition( columnName, paramName, values, false ), is( "CONTAINS(" + columnName + ";" + values[ 0 ] + ")" ) ); Assert.assertThat( Operator.DOES_NOT_CONTAIN.formatCondition( columnName, paramName, values, false ), is( "NOT(CONTAINS(" + columnName + ";" + values[ 0 ] + "))" ) ); Assert.assertThat( Operator.BEGINS_WITH.formatCondition( columnName, paramName, values, false ), is( "BEGINSWITH(" + columnName + ";" + values[ 0 ] + ")" ) ); Assert.assertThat( Operator.ENDS_WITH.formatCondition( columnName, paramName, values, false ), is( "ENDSWITH(" + columnName + ";" + values[ 0 ] + ")" ) ); Assert.assertThat( Operator.IS_NULL.formatCondition( columnName, paramName, values, false ), is( "ISNA(" + columnName + ")" ) ); Assert.assertThat( Operator.IS_NOT_NULL.formatCondition( columnName, paramName, values, false ), is( "NOT(ISNA(" + columnName + "))" ) ); } @Test public void testFormatConditionForParameterizedSingleValues() { String columnName = "column_name"; String paramName = "param_name"; String[] values = { "value1" }; Operator[] operatorsArray = { Operator.GREATER_THAN, Operator.LESS_THAN, Operator.EQUAL, Operator.GREATOR_OR_EQUAL, Operator.LESS_OR_EQUAL }; //check with different number of values passed as argument for ( Operator operator : operatorsArray ) { Assert.assertThat( operator.formatCondition( columnName, paramName, values, true ), is( columnName + " " + operator.toString() + "[param:" + paramName + "]" ) ); } Assert.assertThat( Operator.EXACTLY_MATCHES.formatCondition( columnName, paramName, values, true ), is( columnName + " = " + "[param:" + paramName + "]" ) ); Assert.assertThat( Operator.CONTAINS.formatCondition( columnName, paramName, values, true ), is( "CONTAINS(" + columnName + ";" + "[param:" + paramName + "])" ) ); Assert.assertThat( Operator.DOES_NOT_CONTAIN.formatCondition( columnName, paramName, values, true ), is( "NOT(CONTAINS(" + columnName + ";" + "[param:" + paramName + "]))" ) ); Assert.assertThat( Operator.BEGINS_WITH.formatCondition( columnName, paramName, values, true ), is( "BEGINSWITH(" + columnName + ";" + "[param:" + paramName + "])" ) ); Assert.assertThat( Operator.ENDS_WITH.formatCondition( columnName, paramName, values, true ), is( "ENDSWITH(" + columnName + ";" + "[param:" + paramName + "])" ) ); Assert.assertThat( Operator.IS_NULL.formatCondition( columnName, paramName, values, true ), is( "ISNA(" + columnName + ")" ) ); Assert.assertThat( Operator.IS_NOT_NULL.formatCondition( columnName, paramName, values, true ), is( "NOT(ISNA(" + columnName + "))" ) ); } @Test public void testFormatConditionForParameterizedMultipleValues() { String columnName = "column_name"; String paramName = "param_name"; String[] values = { "\"value1\"", "value2", "value3" }; Operator[] operatorsArray = { Operator.GREATER_THAN, Operator.LESS_THAN, Operator.EQUAL, Operator.GREATOR_OR_EQUAL, Operator.LESS_OR_EQUAL }; //check with different number of values passed as argument for ( Operator operator : operatorsArray ) { Assert.assertThat( operator.formatCondition( columnName, paramName, values, true ), is( columnName + " " + operator.toString() + "[param:" + paramName + "]" ) ); } Assert.assertThat( Operator.EXACTLY_MATCHES.formatCondition( columnName, paramName, values, true ), is( columnName + " = " + "[param:" + paramName + "]" ) ); Assert.assertThat( Operator.CONTAINS.formatCondition( columnName, paramName, values, true ), is( "CONTAINS(" + columnName + ";" + "[param:" + paramName + "])" ) ); Assert.assertThat( Operator.DOES_NOT_CONTAIN.formatCondition( columnName, paramName, values, true ), is( "NOT(CONTAINS(" + columnName + ";" + "[param:" + paramName + "]))" ) ); Assert.assertThat( Operator.BEGINS_WITH.formatCondition( columnName, paramName, values, true ), is( "BEGINSWITH(" + columnName + ";" + "[param:" + paramName + "])" ) ); Assert.assertThat( Operator.ENDS_WITH.formatCondition( columnName, paramName, values, true ), is( "ENDSWITH(" + columnName + ";" + "[param:" + paramName + "])" ) ); Assert.assertThat( Operator.IS_NULL.formatCondition( columnName, paramName, values, true ), is( "ISNA(" + columnName + ")" ) ); Assert.assertThat( Operator.IS_NOT_NULL.formatCondition( columnName, paramName, values, true ), is( "NOT(ISNA(" + columnName + "))" ) ); } }