blob: 488a0f9d2c2f57c421b01b746da8dbb36ee6e073 [file] [log] [blame]
/*
* 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.commons.beanutils2;
import java.math.BigDecimal;
import java.util.Iterator;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Test accessing ResultSets via DynaBeans.
*
*/
public class DynaResultSetTestCase extends TestCase {
/**
* The mock result set DynaClass to be tested.
*/
protected ResultSetDynaClass dynaClass = null;
/**
* Names of the columns for this test. Must match the order they are
* defined in {@link TestResultSetMetaData}, and must be all lower case.
*/
protected String columns[] =
{ "bigdecimalproperty", "booleanproperty",
"byteproperty", "dateproperty",
"doubleproperty", "floatproperty",
"intproperty", "longproperty",
"nullproperty", "shortproperty",
"stringproperty", "timeproperty",
"timestampproperty" };
/**
* Construct a new instance of this test case.
*
* @param name Name of the test case
*/
public DynaResultSetTestCase(final String name) {
super(name);
}
/**
* Set up instance variables required by this test case.
*/
@Override
public void setUp() throws Exception {
dynaClass = new ResultSetDynaClass(TestResultSet.createProxy());
}
/**
* Return the tests included in this test suite.
*/
public static Test suite() {
return new TestSuite(DynaResultSetTestCase.class);
}
/**
* Tear down instance variables required by this test case.
*/
@Override
public void tearDown() {
dynaClass = null;
}
public void testGetName() {
assertEquals("DynaClass name",
"org.apache.commons.beanutils2.ResultSetDynaClass",
dynaClass.getName());
}
public void testGetDynaProperty() {
// Invalid argument test
try {
dynaClass.getDynaProperty(null);
fail("Did not throw IllegaArgumentException");
} catch (final IllegalArgumentException e) {
// Expected result
}
// Negative test
DynaProperty dynaProp = dynaClass.getDynaProperty("unknownProperty");
assertTrue("unknown property returns null",
dynaProp == null);
// Positive test
dynaProp = dynaClass.getDynaProperty("stringproperty");
assertNotNull("string property exists", dynaProp);
assertEquals("string property name", "stringproperty",
dynaProp.getName());
assertEquals("string property class", String.class,
dynaProp.getType());
}
public void testGetDynaProperties() {
final DynaProperty dynaProps[] = dynaClass.getDynaProperties();
assertNotNull("dynaProps exists", dynaProps);
assertEquals("dynaProps length", columns.length, dynaProps.length);
for (int i = 0; i < columns.length; i++) {
assertEquals("Property " + columns[i],
columns[i], dynaProps[i].getName());
}
}
public void testNewInstance() {
try {
dynaClass.newInstance();
fail("Did not throw UnsupportedOperationException()");
} catch (final UnsupportedOperationException e) {
// Expected result
} catch (final Exception e) {
fail("Threw exception " + e);
}
}
public void testIteratorCount() {
final Iterator<?> rows = dynaClass.iterator();
assertNotNull("iterator exists", rows);
int n = 0;
while (rows.hasNext()) {
rows.next();
n++;
if (n > 10) {
fail("Returned too many rows");
}
}
assertEquals("iterator rows", 5, n);
}
public void testIteratorResults() {
// Grab the third row
final Iterator<DynaBean> rows = dynaClass.iterator();
rows.next();
rows.next();
final DynaBean row = rows.next();
// Invalid argument test
try {
row.get("unknownProperty");
fail("Did not throw IllegalArgumentException");
} catch (final IllegalArgumentException e) {
// Expected result
}
// Verify property values
final Object bigDecimalProperty = row.get("bigdecimalproperty");
assertNotNull("bigDecimalProperty exists", bigDecimalProperty);
assertTrue("bigDecimalProperty type",
bigDecimalProperty instanceof BigDecimal);
assertEquals("bigDecimalProperty value",
123.45,
((BigDecimal) bigDecimalProperty).doubleValue(),
0.005);
final Object intProperty = row.get("intproperty");
assertNotNull("intProperty exists", intProperty);
assertTrue("intProperty type",
intProperty instanceof Integer);
assertEquals("intProperty value",
103,
((Integer) intProperty).intValue());
final Object nullProperty = row.get("nullproperty");
assertNull("nullProperty null", nullProperty);
final Object stringProperty = row.get("stringproperty");
assertNotNull("stringProperty exists", stringProperty);
assertTrue("stringProperty type",
stringProperty instanceof String);
assertEquals("stringProperty value",
"This is a string",
(String) stringProperty);
}
/**
* Test normal case column names (i.e. not converted to lower case)
*/
public void testIteratorResultsNormalCase() {
ResultSetDynaClass dynaClass = null;
try {
dynaClass = new ResultSetDynaClass(TestResultSet.createProxy(), false);
} catch (final Exception e) {
fail("Error creating ResultSetDynaClass: " + e);
}
// Grab the third row
final Iterator<DynaBean> rows = dynaClass.iterator();
rows.next();
rows.next();
final DynaBean row = rows.next();
// Invalid argument test
try {
row.get("unknownProperty");
fail("Did not throw IllegalArgumentException");
} catch (final IllegalArgumentException e) {
// Expected result
}
// Verify property values
final Object bigDecimalProperty = row.get("bigDecimalProperty");
assertNotNull("bigDecimalProperty exists", bigDecimalProperty);
assertTrue("bigDecimalProperty type",
bigDecimalProperty instanceof BigDecimal);
assertEquals("bigDecimalProperty value",
123.45,
((BigDecimal) bigDecimalProperty).doubleValue(),
0.005);
final Object intProperty = row.get("intProperty");
assertNotNull("intProperty exists", intProperty);
assertTrue("intProperty type",
intProperty instanceof Integer);
assertEquals("intProperty value",
103,
((Integer) intProperty).intValue());
final Object nullProperty = row.get("nullProperty");
assertNull("nullProperty null", nullProperty);
final Object stringProperty = row.get("stringProperty");
assertNotNull("stringProperty exists", stringProperty);
assertTrue("stringProperty type",
stringProperty instanceof String);
assertEquals("stringProperty value",
"This is a string",
(String) stringProperty);
}
}