/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License, version 2 as published by the Free Software * Foundation. * * You should have received a copy of the GNU General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.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 General Public License for more details. * * * Copyright 2006 - 2013 Pentaho Corporation. All rights reserved. */ package org.pentaho.platform.engine.core; import junit.framework.TestCase; import org.pentaho.commons.connection.memory.MemoryResultSet; import org.pentaho.platform.engine.core.solution.SimpleParameterProvider; import java.math.BigDecimal; import java.text.DateFormat; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @SuppressWarnings( { "all" } ) public class SimpleParameterProviderTest extends TestCase { public void testConstructors() { SimpleParameterProvider params = new SimpleParameterProvider(); params.setParameter( "param", "value" ); assertEquals( "param value if wrong", "value", params.getStringParameter( "param", null ) ); Map map = new HashMap(); map.put( "param2", "value2" ); params = new SimpleParameterProvider( map ); assertEquals( "param value if wrong", "value2", params.getStringParameter( "param2", null ) ); assertTrue( params.hasParameter( "param2" ) ); assertFalse( params.hasParameter( "bogus" ) ); params = new SimpleParameterProvider( null ); assertEquals( "param value if wrong", null, params.getStringParameter( "param2", null ) ); } public void testMap() { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put( "int", new Integer( 100 ) ); paramMap.put( "long", new Long( 200 ) ); SimpleParameterProvider params = new SimpleParameterProvider( paramMap ); validateInteger( params ); validateLong( params ); Iterator it = params.getParameterNames(); int n = 0; while ( it.hasNext() ) { n++; String name = (String) it.next(); assertTrue( "param name is wrong", "int".equals( name ) || "long".equals( name ) ); } assertEquals( "wrong number of parameters", 2, n ); paramMap = new HashMap<String, Object>(); paramMap.put( "int", new Integer( 100 ) ); params = new SimpleParameterProvider(); params.setParameters( paramMap ); validateInteger( params ); assertEquals( "param value is wrong", -1, params.getLongParameter( "long", -1 ) ); } public void testConvert() { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put( "int-1", new Object[] { new Integer( 100 ) } ); paramMap.put( "int-2", new Object[] { new Integer( 100 ), new Integer( 999 ) } ); paramMap.put( "long", new Long( 200 ) ); SimpleParameterProvider params = new SimpleParameterProvider(); params.copyAndConvertParameters( paramMap ); assertEquals( "param value is wrong", "100", params.getStringParameter( "int-1", null ) ); assertEquals( "param value is wrong", 100, params.getLongParameter( "int-1", -1 ) ); assertEquals( "param value is wrong", "200", params.getStringParameter( "long", null ) ); assertEquals( "param value is wrong", 200, params.getLongParameter( "long", -1 ) ); assertEquals( "param value is wrong", "100", params.getStringParameter( "int-2", null ) ); assertEquals( "param value is wrong", 100, params.getLongParameter( "int-2", -1 ) ); assertEquals( "param value is wrong", -1, params.getLongParameter( "int-3", -1 ) ); Object val = params.getArrayParameter( "int-2", null ); assertNotNull( "param value is wrong", val ); } public void testArrays() { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put( "int-1", new Object[] { new Integer( 100 ) } ); paramMap.put( "int-2", new Object[] { new Integer( 100 ), new Integer( 999 ) } ); SimpleParameterProvider params = new SimpleParameterProvider(); params.copyAndConvertParameters( paramMap ); assertEquals( "param value is wrong", "100", params.getStringParameter( "int-1", null ) ); assertEquals( "param value is wrong", 100, params.getLongParameter( "int-1", -1 ) ); assertEquals( "param value is wrong", "100", params.getStringParameter( "int-2", null ) ); assertEquals( "param value is wrong", 100, params.getLongParameter( "int-2", -1 ) ); assertEquals( "param value is wrong", -1, params.getLongParameter( "int-3", -1 ) ); Object[] val = params.getArrayParameter( "int-2", null ); assertNotNull( "param value is wrong", val ); assertEquals( "param value is wrong", 100, val[0] ); assertEquals( "param value is wrong", 999, val[1] ); Object[][] value2 = new Object[0][0]; params.setParameter( "2darray", value2 ); assertEquals( "param value is wrong", value2, params.getParameter( "2darray" ) ); assertEquals( "param value is wrong", null, params.getStringParameter( "2darray", null ) ); } public void testResultSet() { MemoryResultSet data = new MemoryResultSet(); SimpleParameterProvider params = new SimpleParameterProvider(); params.setParameter( "data", data ); assertTrue( params.hasParameter( "data" ) ); assertEquals( "param value is wrong", data, params.getListParameter( "data" ) ); } public void testAdditional() { String paramStr = "base?int=100&long=200"; Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put( "_PENTAHO_ADDITIONAL_PARAMS_", paramStr ); SimpleParameterProvider params = new SimpleParameterProvider(); params.copyAndConvertAdditionalParameters( paramMap ); assertEquals( "param value is wrong", "100", params.getStringParameter( "int", null ) ); assertEquals( "param value is wrong", 100, params.getLongParameter( "int", -1 ) ); assertEquals( "param value is wrong", "200", params.getStringParameter( "long", null ) ); assertEquals( "param value is wrong", 200, params.getLongParameter( "long", -1 ) ); paramStr = "int=300&long=400"; paramMap.put( "_PENTAHO_ADDITIONAL_PARAMS_", paramStr ); params = new SimpleParameterProvider(); params.copyAndConvertAdditionalParameters( paramMap ); assertEquals( "param value is wrong", "300", params.getStringParameter( "int", null ) ); assertEquals( "param value is wrong", 300, params.getLongParameter( "int", -1 ) ); assertEquals( "param value is wrong", "400", params.getStringParameter( "long", null ) ); assertEquals( "param value is wrong", 400, params.getLongParameter( "long", -1 ) ); } public void testIntegers() { SimpleParameterProvider params = new SimpleParameterProvider(); params.setParameter( "int", new Integer( 100 ) ); validateInteger( params ); } public void validateInteger( SimpleParameterProvider params ) { assertEquals( "param value is wrong", 100, params.getParameter( "int" ) ); assertEquals( "param value is wrong", "100", params.getStringParameter( "int", null ) ); assertEquals( "param value is wrong", 100, params.getLongParameter( "int", -1 ) ); BigDecimal decimal = params.getDecimalParameter( "int", null ); assertNotNull( "param value is wrong", decimal ); assertEquals( "param value is wrong", 100, decimal.intValue() ); String[] strs = params.getStringArrayParameter( "int", new String[0] ); assertNotNull( "param value is wrong", strs ); assertEquals( "param value is wrong", "100", strs[0] ); } public void testLongs() { SimpleParameterProvider params = new SimpleParameterProvider(); params.setParameter( "long", new Long( 200 ) ); validateLong( params ); } public void testDates() throws Exception { SimpleParameterProvider params = new SimpleParameterProvider(); String dateStr = DateFormat.getInstance().format( new Date() ); Date now = DateFormat.getInstance().parse( dateStr ); params.setParameter( "date", now ); params.setParameter( "date2", dateStr ); assertEquals( "wrong date", now, params.getDateParameter( "date", null ) ); assertEquals( "wrong date", now, params.getDateParameter( "bogus", now ) ); assertEquals( "wrong date", now, params.getDateParameter( "date2", null ) ); assertNull( "wrong date", params.getDateParameter( "bogus", null ) ); } public void validateLong( SimpleParameterProvider params ) { assertEquals( "param value is wrong", (long) 200, params.getParameter( "long" ) ); assertEquals( "param value is wrong", "200", params.getStringParameter( "long", null ) ); assertEquals( "param value is wrong", 200, params.getLongParameter( "long", -1 ) ); BigDecimal decimal = params.getDecimalParameter( "long", null ); assertNotNull( "param value is wrong", decimal ); assertEquals( "param value is wrong", 200, decimal.intValue() ); params.setParameter( "long", (long) 200 ); assertEquals( "param value is wrong", (long) 200, params.getParameter( "long" ) ); String[] strs = params.getStringArrayParameter( "long", new String[0] ); assertNotNull( "param value is wrong", strs ); assertEquals( "param value is wrong", "200", strs[0] ); } public void testStrings() { SimpleParameterProvider params = new SimpleParameterProvider(); params.setParameter( "int", "100" ); assertEquals( "param value is wrong", "100", params.getParameter( "int" ) ); assertEquals( "param value is wrong", "100", params.getStringParameter( "int", null ) ); assertEquals( "param value is wrong", 100, params.getLongParameter( "int", 0 ) ); BigDecimal decimal = params.getDecimalParameter( "int", null ); assertNotNull( "param value is wrong", decimal ); assertEquals( "param value is wrong", 100, decimal.intValue() ); String[] strs = params.getStringArrayParameter( "int", new String[0] ); assertNotNull( "param value is wrong", strs ); assertEquals( "param value is wrong", "100", strs[0] ); } }