/*
* 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 2008 Pentaho Corporation. All rights reserved.
*
*/
package org.pentaho.test.platform.engine.core;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import junit.framework.TestCase;
import org.pentaho.commons.connection.memory.MemoryResultSet;
import org.pentaho.platform.engine.core.solution.SimpleParameterProvider;
@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", null, params.getStringParameter("int-2", null));
assertEquals("param value is wrong", -1, params.getLongParameter("int-2", -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", null, params.getStringParameter("int-2", null));
assertEquals("param value is wrong", -1, params.getLongParameter("int-2", -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]);
}
}