Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/IterateTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/IterateTest.java?rev=683745&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/IterateTest.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/IterateTest.java Thu Aug 7 16:21:46 2008 @@ -0,0 +1,160 @@ +package com.ibatis.sqlmap; + +import testdomain.Account; + +import java.sql.SQLException; +import java.util.*; + +public class IterateTest extends BaseSqlMapTest { + + protected void setUp() throws Exception { + initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null); + initScript("scripts/account-init.sql"); + } + + protected void tearDown() throws Exception { + } + + // Iterate + + public void testIterate() throws SQLException { + List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)}); + List list = sqlMap.queryForList("dynamicIterate", params); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + // Iterate + + public void testIterateInConditional() throws SQLException { + List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)}); + List list = sqlMap.queryForList("dynamicIterateInConditional", params); + assertEquals(2, list.size()); + assertAccount1((Account) list.get(0)); + assertEquals(1, ((Account) list.get(0)).getId()); + assertEquals(3, ((Account) list.get(1)).getId()); + } + + public void testIterateLiteral() throws SQLException { + List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)}); + List list = sqlMap.queryForList("dynamicIterateLiteral", params); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + public void testMultiIterate() throws SQLException { + List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)}); + List list = sqlMap.queryForList("multiDynamicIterate", params); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + public void testMultiIterateLiteral() throws SQLException { + List params = Arrays.asList(new Integer[]{new Integer(1), new Integer(2), new Integer(3)}); + List list = sqlMap.queryForList("multiDynamicIterateLiteral", params); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + // ARRAY + + public void testArrayPropertyIterate() throws SQLException { + Account account = new Account(); + account.setIds(new int[]{1, 2, 3}); + List list = sqlMap.queryForList("dynamicQueryByExample", account); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + public void testArrayPropertyIterate2() throws SQLException { + Account account = new Account(); + account.setAge(4); + account.setIds(new int[]{1, 2, 3}); + List list = sqlMap.queryForList("dynamicQueryByExample2", account); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + public void testArrayPropertyIterate2Literal() throws SQLException { + Account account = new Account(); + account.setAge(4); + account.setIds(new int[]{1, 2, 3}); + List list = sqlMap.queryForList("dynamicQueryByExample2Literal", account); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + // LIST IN MAP + + public void testListInMap() throws SQLException { + List paramList = new Vector(); + paramList.add(new Integer(1)); + paramList.add(new Integer(2)); + paramList.add(new Integer(3)); + + Map paramMap = new HashMap(); + paramMap.put("paramList", paramList); + + List list = sqlMap.queryForList("iterateListInMap", paramMap); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + public void testListDirect() throws SQLException { + List paramList = new Vector(); + paramList.add(new Integer(1)); + paramList.add(new Integer(2)); + paramList.add(new Integer(3)); + + List list = sqlMap.queryForList("iterateListDirect", paramList); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + public void testIterateNestedListProperty() throws SQLException { + Account account = new Account(); + account.setAccountList(new ArrayList()); + account.getAccountList().add(new Account(1)); + account.getAccountList().add(new Account(2)); + account.getAccountList().add(new Account(3)); + + List list = sqlMap.queryForList("iterateNestedListProperty", account); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + public void testIterateNestedListPropertyB() throws SQLException { + Account account = new Account(); + account.setId(99); + account.setAccountList(new ArrayList()); + account.getAccountList().add(new Account(1)); + account.getAccountList().add(new Account(2)); + account.getAccountList().add(new Account(3)); + + List list = sqlMap.queryForList("iterateNestedListPropertyB", account); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + public void testIterateNestedMapListProperty() throws SQLException { + Map account = new HashMap(); + List accountList = new ArrayList(); + account.put("accountList", accountList); + accountList.add(new Account(1)); + accountList.add(new Account(2)); + accountList.add(new Account(3)); + + List list = sqlMap.queryForList("iterateNestedMapListProperty", account); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + + public void xtestArrayPropertyIterate2() throws SQLException { + Account account = new Account(); + account.setIds(new int[]{1, 2, 3}); + List list = sqlMap.queryForList("dynamicQueryByExample2", account); + assertAccount1((Account) list.get(0)); + assertEquals(3, list.size()); + } + +}
Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/MultiResultSetTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/MultiResultSetTest.java?rev=683745&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/MultiResultSetTest.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/MultiResultSetTest.java Thu Aug 7 16:21:46 2008 @@ -0,0 +1,65 @@ +package com.ibatis.sqlmap; + +import com.ibatis.common.resources.Resources; + +import java.sql.*; +import java.util.*; + +public class MultiResultSetTest extends BaseSqlMapTest { + + // SETUP & TEARDOWN + + protected void setUp() throws Exception { + initSqlMap("com/ibatis/sqlmap/maps/DerbySqlMapConfig.xml", Resources.getResourceAsProperties("com/ibatis/sqlmap/maps/DerbySqlMapConfig.properties")); + initScript("scripts/account-init.sql"); + initScript("scripts/derby-proc-init.sql"); + + } + + public void testShouldRetrieveTwoSetsOfTwoAccountsFromMultipleResultMaps() throws Exception { + Map persons = new HashMap(); + persons.put("1", new Integer(1)); + persons.put("2", new Integer(2)); + persons.put("3", new Integer(3)); + persons.put("4", new Integer(4)); + List results = sqlMap.queryForList("getMultiListsRm", persons); + assertEquals(2, results.size()); + assertEquals(2, ((List) results.get(0)).size()); + assertEquals(2, ((List) results.get(1)).size()); + } + + public void testShouldRetrieveTwoSetsOfTwoAccountsFromMultipleResultClasses() throws Exception { + Map persons = new HashMap(); + persons.put("1", new Integer(1)); + persons.put("2", new Integer(2)); + persons.put("3", new Integer(3)); + persons.put("4", new Integer(4)); + List results = sqlMap.queryForList("getMultiListsRc", persons); + assertEquals(2, results.size()); + assertEquals(2, ((List) results.get(0)).size()); + assertEquals(2, ((List) results.get(1)).size()); + } + + public void testCallableStatementShouldReturnTwoResultSets() throws Exception { + sqlMap.startTransaction(); + Connection conn = sqlMap.getCurrentConnection(); + CallableStatement cs = conn.prepareCall("{call MRESULTSET(?,?,?,?)}"); + cs.setInt(1, 1); + cs.setInt(2, 2); + cs.setInt(3, 3); + cs.setInt(4, 4); + cs.execute(); + ResultSet rs = cs.getResultSet(); + assertNotNull(rs); + int found = 1; + while (cs.getMoreResults()) { + assertNotNull(cs.getResultSet()); + found++; + } + rs.close(); + cs.close(); + assertEquals("Didn't find second result set.", 2, found); + } + + +} Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/NestedIterateTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/NestedIterateTest.java?rev=683745&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/NestedIterateTest.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/NestedIterateTest.java Thu Aug 7 16:21:46 2008 @@ -0,0 +1,916 @@ +package com.ibatis.sqlmap; + +import testdomain.*; + +import java.util.*; + +public class NestedIterateTest extends BaseSqlMapTest { + + protected void setUp() throws Exception { + initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null); + initScript("scripts/person-init.sql"); + initScript("scripts/jpetstore-hsqldb-schema.sql"); + initScript("scripts/jpetstore-hsqldb-dataload.sql"); + } + + /** + * This test should return 9 rows: ids 1-9 + * <p/> + * This method works as expected + */ + public void testShouldReturn9Rows() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = + sqlMap.queryForList("NestedIterateTest1", po); + assertEquals(9, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + assertEquals(4, ((Person) results.get(3)).getId().intValue()); + assertEquals(5, ((Person) results.get(4)).getId().intValue()); + assertEquals(6, ((Person) results.get(5)).getId().intValue()); + assertEquals(7, ((Person) results.get(6)).getId().intValue()); + assertEquals(8, ((Person) results.get(7)).getId().intValue()); + assertEquals(9, ((Person) results.get(8)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test shoud return 1 row: id 4 + */ + public void test02() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest2", po); + assertEquals(1, results.size()); + assertEquals(4, ((Person) results.get(0)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test should return 8 rows: ids 1-3, 5-9 + */ + public void test03() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(4)); // put first to make the test fail + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest3", po); + assertEquals(8, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + assertEquals(5, ((Person) results.get(3)).getId().intValue()); + assertEquals(6, ((Person) results.get(4)).getId().intValue()); + assertEquals(7, ((Person) results.get(5)).getId().intValue()); + assertEquals(8, ((Person) results.get(6)).getId().intValue()); + assertEquals(9, ((Person) results.get(7)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test should return 5 rows: ids 5-9 + */ + public void test04() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest4", po); + assertEquals(5, results.size()); + assertEquals(5, ((Person) results.get(0)).getId().intValue()); + assertEquals(6, ((Person) results.get(1)).getId().intValue()); + assertEquals(7, ((Person) results.get(2)).getId().intValue()); + assertEquals(8, ((Person) results.get(3)).getId().intValue()); + assertEquals(9, ((Person) results.get(4)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test should return 6 rows: ids 4-9 + */ + public void test05() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest5", po); + assertEquals(6, results.size()); + assertEquals(4, ((Person) results.get(0)).getId().intValue()); + assertEquals(5, ((Person) results.get(1)).getId().intValue()); + assertEquals(6, ((Person) results.get(2)).getId().intValue()); + assertEquals(7, ((Person) results.get(3)).getId().intValue()); + assertEquals(8, ((Person) results.get(4)).getId().intValue()); + assertEquals(9, ((Person) results.get(5)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test should return 3 rows: ids 1-3 + */ + public void test06() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + // go backwards to make the test fail + po.addId(new Integer(9)); + po.addId(new Integer(8)); + po.addId(new Integer(7)); + po.addId(new Integer(6)); + po.addId(new Integer(5)); + po.addId(new Integer(4)); + po.addId(new Integer(3)); + po.addId(new Integer(2)); + po.addId(new Integer(1)); + try { + List results = sqlMap.queryForList("NestedIterateTest6", po); + assertEquals(3, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test should return 4 rows: ids 1-4 + */ + public void test07() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + // go backwards to make the test fail + po.addId(new Integer(9)); + po.addId(new Integer(8)); + po.addId(new Integer(7)); + po.addId(new Integer(6)); + po.addId(new Integer(5)); + po.addId(new Integer(4)); + po.addId(new Integer(3)); + po.addId(new Integer(2)); + po.addId(new Integer(1)); + try { + List results = sqlMap.queryForList("NestedIterateTest7", po); + assertEquals(4, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + assertEquals(4, ((Person) results.get(3)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return four rows: ids 1, 2, 7, 8 + */ + public void test08() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addFirstName("Jeff"); + po.addFirstName("Matt"); + po.addLastName("Jones"); + po.addLastName("Smith"); + + try { + List results = sqlMap.queryForList("NestedIterateTest8", po); + assertEquals(4, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(7, ((Person) results.get(2)).getId().intValue()); + assertEquals(8, ((Person) results.get(3)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return two rows: ids 1, 2 + * <p/> + * This method works when Christian's IBATIS-281 patches are applied + */ + public void test09() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + + NestedIterateParameterObject.AndCondition andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Jeff", new Boolean(true)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Matt", new Boolean(true)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + try { + List results = sqlMap.queryForList("NestedIterateTest9", po); + assertEquals(2, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + public void test09a() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + + NestedIterateParameterObject.AndCondition andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Jeff", new Boolean(true)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Matt", new Boolean(true)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + try { + List results = sqlMap.queryForList("NestedIterateTest9a", po); + assertEquals(2, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test shoud return 1 row: id 4 + */ + public void test10() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest10", po); + assertEquals(1, results.size()); + assertEquals(4, ((Person) results.get(0)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test should return 8 rows: ids 1-3, 5-9 + */ + public void test11() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(4)); // put first to make the test fail + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest11", po); + assertEquals(8, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + assertEquals(5, ((Person) results.get(3)).getId().intValue()); + assertEquals(6, ((Person) results.get(4)).getId().intValue()); + assertEquals(7, ((Person) results.get(5)).getId().intValue()); + assertEquals(8, ((Person) results.get(6)).getId().intValue()); + assertEquals(9, ((Person) results.get(7)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test should return 5 rows: ids 5-9 + */ + public void test12() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest12", po); + assertEquals(5, results.size()); + assertEquals(5, ((Person) results.get(0)).getId().intValue()); + assertEquals(6, ((Person) results.get(1)).getId().intValue()); + assertEquals(7, ((Person) results.get(2)).getId().intValue()); + assertEquals(8, ((Person) results.get(3)).getId().intValue()); + assertEquals(9, ((Person) results.get(4)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test should return 6 rows: ids 4-9 + */ + public void test13() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest13", po); + assertEquals(6, results.size()); + assertEquals(4, ((Person) results.get(0)).getId().intValue()); + assertEquals(5, ((Person) results.get(1)).getId().intValue()); + assertEquals(6, ((Person) results.get(2)).getId().intValue()); + assertEquals(7, ((Person) results.get(3)).getId().intValue()); + assertEquals(8, ((Person) results.get(4)).getId().intValue()); + assertEquals(9, ((Person) results.get(5)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test should return 3 rows: ids 1-3 + */ + public void test14() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + // go backwards to make the test fail + po.addId(new Integer(9)); + po.addId(new Integer(8)); + po.addId(new Integer(7)); + po.addId(new Integer(6)); + po.addId(new Integer(5)); + po.addId(new Integer(4)); + po.addId(new Integer(3)); + po.addId(new Integer(2)); + po.addId(new Integer(1)); + try { + List results = sqlMap.queryForList("NestedIterateTest14", po); + assertEquals(3, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This test should return 4 rows: ids 1-4 + */ + public void test15() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + // go backwards to make the test fail + po.addId(new Integer(9)); + po.addId(new Integer(8)); + po.addId(new Integer(7)); + po.addId(new Integer(6)); + po.addId(new Integer(5)); + po.addId(new Integer(4)); + po.addId(new Integer(3)); + po.addId(new Integer(2)); + po.addId(new Integer(1)); + try { + List results = sqlMap.queryForList("NestedIterateTest15", po); + assertEquals(4, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + assertEquals(4, ((Person) results.get(3)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return six rows: ids 1-6 + * <p/> + * This method works when Christian's IBATIS-281 patches are applied + */ + public void test16() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + + NestedIterateParameterObject.AndCondition andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Jeff", new Boolean(false)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Matt", new Boolean(true)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + try { + List results = sqlMap.queryForList("NestedIterateTest16", po); + assertEquals(6, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + assertEquals(4, ((Person) results.get(3)).getId().intValue()); + assertEquals(5, ((Person) results.get(4)).getId().intValue()); + assertEquals(6, ((Person) results.get(5)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return six rows: ids 1-6 + * <p/> + * This method works when Christian's IBATIS-281 patches are applied + */ + public void test17() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + + NestedIterateParameterObject.AndCondition andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Jeff", new Boolean(false)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Matt", new Boolean(true)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + try { + List results = sqlMap.queryForList("NestedIterateTest17", po); + assertEquals(6, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + assertEquals(4, ((Person) results.get(3)).getId().intValue()); + assertEquals(5, ((Person) results.get(4)).getId().intValue()); + assertEquals(6, ((Person) results.get(5)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return two rows: ids 1, 2 + * <p/> + * This method tests <isNotPropertyAvailable> inside in <iterate> + */ + public void test18() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + + NestedIterateParameterObject.AndCondition andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Jeff", new Boolean(false)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Matt", new Boolean(true)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + try { + List results = sqlMap.queryForList("NestedIterateTest18", po); + assertEquals(2, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return two rows: ids 1, 2 + * <p/> + * This method tests <isNotNull> inside an <iterate> + */ + public void test19() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + + NestedIterateParameterObject.AndCondition andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Jeff", new Boolean(false)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Matt", new Boolean(true)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + try { + List results = sqlMap.queryForList("NestedIterateTest19", po); + assertEquals(2, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return two rows: ids 1, 2 + * <p/> + * This method tests <isNotEmpty> inside an <iterate> + */ + public void test20() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + + NestedIterateParameterObject.AndCondition andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Jeff", new Boolean(false)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + andCondition = new NestedIterateParameterObject.AndCondition(); + andCondition.addCondition("first_name =", "Matt", new Boolean(true)); + andCondition.addCondition("last_name =", "Jones", new Boolean(true)); + po.addOrCondition(andCondition); + + try { + List results = sqlMap.queryForList("NestedIterateTest20", po); + assertEquals(2, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return nine rows: ids 1-9 + * <p/> + * This method tests the open, close, and prepend attributes + * when no sub elements satisfy - so no where clause should be + * generated + */ + public void test21() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest21", po); + assertEquals(9, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + assertEquals(4, ((Person) results.get(3)).getId().intValue()); + assertEquals(5, ((Person) results.get(4)).getId().intValue()); + assertEquals(6, ((Person) results.get(5)).getId().intValue()); + assertEquals(7, ((Person) results.get(6)).getId().intValue()); + assertEquals(8, ((Person) results.get(7)).getId().intValue()); + assertEquals(9, ((Person) results.get(8)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return one rows: id 4 + * <p/> + * This method tests the open, close, and prepend attributes + * when the first element doesn't satisfy + */ + public void test22() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest22", po); + assertEquals(1, results.size()); + assertEquals(4, ((Person) results.get(0)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return one rows: id 1 + */ + public void test23() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest23", po); + assertEquals(1, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return one rows: id 9 + */ + public void test24() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest24", po); + assertEquals(1, results.size()); + assertEquals(9, ((Person) results.get(0)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This method should return three rows: id 1-3 + */ + public void test25() { + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + try { + List results = sqlMap.queryForList("NestedIterateTest25", po); + assertEquals(3, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + /** + * This tests nesting when objects are maps and not a list nested in a list + */ + public void test26() { + + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + + Map params = new HashMap(); + params.put("po", po); + + try { + List results = sqlMap.queryForList("NestedIterateTest26", params); + assertEquals(3, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + + } + + /** + * This tests nesting when objects are maps and not a list nested in a list + * same as test26 except deeper + */ + public void test27() { + + Map firstMap = new HashMap(); + + List firstList = new ArrayList(); + + Map params = new HashMap(); + + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + + params.put("po", po); + + firstList.add(params); + + firstMap.put("firstList", firstList); + + try { + List results = sqlMap.queryForList("NestedIterateTest27", firstMap); + assertEquals(3, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + + } + + + /** + * This tests nesting when objects are maps and not a list nested in a list + */ + public void test28() { + + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + + SimpleNestedParameterObject simpleNestedParameterObject = + new SimpleNestedParameterObject(); + + simpleNestedParameterObject.setNestedIterateParameterObject(po); + + try { + List results = sqlMap.queryForList("NestedIterateTest28", simpleNestedParameterObject); + assertEquals(3, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + + } + + /** + * This tests nesting when objects are maps and not a list nested in a list + * same as test26 except deeper + */ + public void test29() { + + SimpleNestedParameterObject firstParameterObject = + new SimpleNestedParameterObject(); + + SimpleNestedParameterObject secondParameterObject = + new SimpleNestedParameterObject(); + + List parameterObjectList = new ArrayList(); + + NestedIterateParameterObject po = new NestedIterateParameterObject(); + po.addId(new Integer(1)); + po.addId(new Integer(2)); + po.addId(new Integer(3)); + po.addId(new Integer(4)); + po.addId(new Integer(5)); + po.addId(new Integer(6)); + po.addId(new Integer(7)); + po.addId(new Integer(8)); + po.addId(new Integer(9)); + + secondParameterObject.setNestedIterateParameterObject(po); + + parameterObjectList.add(secondParameterObject); + + firstParameterObject.setNestedList(parameterObjectList); + + try { + List results = sqlMap.queryForList("NestedIterateTest29", firstParameterObject); + assertEquals(3, results.size()); + assertEquals(1, ((Person) results.get(0)).getId().intValue()); + assertEquals(2, ((Person) results.get(1)).getId().intValue()); + assertEquals(3, ((Person) results.get(2)).getId().intValue()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + + /** + * This tests nesting when a list is initially nested in a bean. so it tests + * [bean]->[list]->[property_of_object_on_exposed_index] + */ + public void test30() { + + try { + + // prepare item list + Item item1 = new Item(); + item1.setItemId("EST-1"); + item1.setProductId("FI-SW-01"); + + List itemList = new ArrayList(); + itemList.add(item1); + + // prepare product list + Product product1 = new Product(); + product1.setProductId("FI-SW-01"); + product1.setCategoryId("DOGS"); + product1.setItemList(itemList); + + List productList = new ArrayList(); + productList.add(product1); + + //prepare parent category + Category parentCategory = new Category(); + parentCategory.setCategoryId("DOGS"); + parentCategory.setProductList(productList); + + // setup Category + Category category = new Category(); + category.setCategoryId("FISH"); + category.setParentCategory(parentCategory); + + List results = sqlMap.queryForList("NestedIterateTest30", category); + assertEquals(1, results.size()); + } catch (Exception e) { + fail(e.getMessage()); + } + } + +} Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ParameterMapTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ParameterMapTest.java?rev=683745&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ParameterMapTest.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ParameterMapTest.java Thu Aug 7 16:21:46 2008 @@ -0,0 +1,56 @@ +package com.ibatis.sqlmap; + +import testdomain.Account; + +import java.sql.SQLException; + +public class ParameterMapTest extends BaseSqlMapTest { + + // SETUP & TEARDOWN + + protected void setUp() throws Exception { + initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null); + initScript("scripts/account-init.sql"); + } + + protected void tearDown() throws Exception { + } + + // PARAMETER MAP FEATURE TESTS + + public void testSpecifiedType() throws SQLException { + Account account = newAccount6(); + + sqlMap.update("insertAccountNullableEmail", account); + + account = (Account) sqlMap.queryForObject("getAccountNullableEmail", new Integer(6)); + + assertAccount6(account); + } + + public void testUnknownParameterClass() throws SQLException { + Account account = newAccount6(); + + sqlMap.update("insertAccountUknownParameterClass", account); + + account = (Account) sqlMap.queryForObject("getAccountNullableEmail", new Integer(6)); + + assertAccount6(account); + } + + public void testNullParameter() throws SQLException { + + Account account = (Account) sqlMap.queryForObject("getAccountNullParameter", null); + + + assertNull(account); + } + + public void testNullParameter2() throws SQLException { + + Account account = (Account) sqlMap.queryForObject("getAccountNullParameter"); + + + assertNull(account); + } +} Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/PrivateMethodAccessTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/PrivateMethodAccessTest.java?rev=683745&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/PrivateMethodAccessTest.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/PrivateMethodAccessTest.java Thu Aug 7 16:21:46 2008 @@ -0,0 +1,18 @@ +package com.ibatis.sqlmap; + +import java.util.List; + +public class PrivateMethodAccessTest extends BaseSqlMapTest { + + protected void setUp() throws Exception { + initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null); + initScript("scripts/docs-init.sql"); + } + + public void testShouldSetPrivateProperties() throws Exception { + List list = sqlMap.queryForList("getPrivateBooks"); + assertNotNull(list); + assertEquals(2, list.size()); + } + +} Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/RepeatingGroupMappingTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/RepeatingGroupMappingTest.java?rev=683745&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/RepeatingGroupMappingTest.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/RepeatingGroupMappingTest.java Thu Aug 7 16:21:46 2008 @@ -0,0 +1,63 @@ +package com.ibatis.sqlmap; + +import testdomain.*; + +import java.util.List; + +public class RepeatingGroupMappingTest extends BaseSqlMapTest { + + protected void setUp() throws Exception { + initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null); + initScript("scripts/jpetstore-hsqldb-schema.sql"); + initScript("scripts/jpetstore-hsqldb-dataload.sql"); + } + + public void testGroupBy() throws Exception { + List list = sqlMap.queryForList("getAllCategories", null); + assertEquals(5, list.size()); + } + + public void testGroupByExtended() throws Exception { + List list = sqlMap.queryForList("getAllCategoriesExtended", null); + assertEquals(5, list.size()); + } + + public void testNestedProperties() throws Exception { + List list = sqlMap.queryForList("getFish", null); + assertEquals(1, list.size()); + + Category cat = (Category) list.get(0); + assertEquals("FISH", cat.getCategoryId()); + assertEquals("Fish", cat.getName()); + assertNotNull("Expected product list.", cat.getProductList()); + assertEquals(4, cat.getProductList().size()); + + Product product = (Product) cat.getProductList().get(0); + assertEquals(2, product.getItemList().size()); + } + + /** + * This is a test case for iBATIS JIRA-250 "SELECT statement + * returns unexpected result when 'groupBy' and 'nullValue' + * are specified in resultMaps." + * <p/> + * The problem was that when a child object in a resultmap only + * contained null values it would still be created when one of the + * properties of the child object contained a nullValue attribute + * in the ResultMap. The nullValue would be applied before checking + * whether all properties of the child were 'null', so at least 1 + * property would always be non-null (the reason for the + * nullValue attribute). + * <p/> + * The fix is to first check whether all properties of the child are + * 'null', and if the child object contains at least 1 non-null property + * to then only create the child object and apply the nullValue attribute. + * + * @throws Exception none should be thrown. + */ + public void testGroupByJIRA250() throws Exception { + List list = sqlMap.queryForList("getAllProductCategoriesJIRA250", null); + Category cat = (Category) list.get(0); + assertEquals(0, cat.getProductList().size()); + } +} Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultMapTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultMapTest.java?rev=683745&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultMapTest.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultMapTest.java Thu Aug 7 16:21:46 2008 @@ -0,0 +1,133 @@ +package com.ibatis.sqlmap; + +import testdomain.*; + +import java.sql.SQLException; +import java.util.*; + +public class ResultMapTest extends BaseSqlMapTest { + + // SETUP & TEARDOWN + + protected void setUp() throws Exception { + initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig.xml", null); + initScript("scripts/account-init.sql"); + initScript("scripts/order-init.sql"); + initScript("scripts/line_item-init.sql"); + } + + protected void tearDown() throws Exception { + } + + // RESULT MAP FEATURE TESTS + + public void testColumnsByName() throws SQLException { + Order order = (Order) sqlMap.queryForObject("getOrderLiteByColumnName", new Integer(1)); + assertOrder1(order); + } + + public void testExtendedResultMap() throws SQLException { + Order order = (Order) sqlMap.queryForObject("getOrderLiteByColumnName", new Integer(1)); + assertOrder1(order); + } + + public void testColumnsByIndex() throws SQLException { + Order order = (Order) sqlMap.queryForObject("getOrderLiteByColumnIndex", new Integer(1)); + assertOrder1(order); + } + + public void testTypeSpecified() throws SQLException { + Order order = (Order) sqlMap.queryForObject("getOrderWithTypes", new Integer(1)); + assertOrder1(order); + } + + public void testComplexObjectMapping() throws SQLException { + Order order = (Order) sqlMap.queryForObject("getOrderWithAccount", new Integer(1)); + assertOrder1(order); + assertAccount1(order.getAccount()); + } + + public void testCollectionMappingAndExtends() throws SQLException { + Order order = (Order) sqlMap.queryForObject("getOrderWithLineItemsCollection", new Integer(1)); + + assertOrder1(order); + assertNotNull(order.getLineItems()); + assertEquals(2, order.getLineItems().size()); + } + + public void testListMapping() throws SQLException { + Order order = (Order) sqlMap.queryForObject("getOrderWithLineItems", new Integer(1)); + + assertOrder1(order); + assertNotNull(order.getLineItemsList()); + assertEquals(2, order.getLineItemsList().size()); + } + + public void testGetAllLineItemProps() throws SQLException { + List list = sqlMap.queryForList("getAllLineItemProps", new Integer(1)); + + assertNotNull(list); + assertEquals(2, list.size()); + } + + public void testArrayMapping() throws SQLException { + Order order = (Order) sqlMap.queryForObject("getOrderWithLineItemArray", new Integer(1)); + + assertOrder1(order); + assertNotNull(order.getLineItemArray()); + assertEquals(2, order.getLineItemArray().length); + } + + public void testHashMapMapping() throws SQLException { + Map order = (Map) sqlMap.queryForObject("getOrderAsMap", new Integer(1)); + assertOrder1(order); + } + + public void testNestedObjects() throws SQLException { + Order order = (Order) sqlMap.queryForObject("getOrderJoinedFavourite", new Integer(1)); + assertOrder1(order); + } + + public void testSimpleTypeMapping() throws SQLException { + List list = sqlMap.queryForList("getAllCreditCardNumbersFromOrders", null); + + assertEquals(5, list.size()); + assertEquals("555555555555", list.get(0)); + } + + public void testCompositeKeyMapping() throws SQLException { + + Order order1 = (Order) sqlMap.queryForObject("getOrderWithFavouriteLineItem", new Integer(1)); + Order order2 = (Order) sqlMap.queryForObject("getOrderWithFavouriteLineItem", new Integer(2)); + + assertNotNull(order1); + assertNotNull(order1.getFavouriteLineItem()); + assertEquals(2, order1.getFavouriteLineItem().getId()); + assertEquals(1, order1.getFavouriteLineItem().getOrderId()); + + assertNotNull(order2); + assertNotNull(order2.getFavouriteLineItem()); + assertEquals(1, order2.getFavouriteLineItem().getId()); + assertEquals(2, order2.getFavouriteLineItem().getOrderId()); + + + } + + public void testDynCompositeKeyMapping() throws SQLException { + + Order order1 = (Order) sqlMap.queryForObject("getOrderWithDynFavouriteLineItem", new Integer(1)); + + assertNotNull(order1); + assertNotNull(order1.getFavouriteLineItem()); + assertEquals(2, order1.getFavouriteLineItem().getId()); + assertEquals(1, order1.getFavouriteLineItem().getOrderId()); + + } + + public void testGetDoubleNestedResult() throws SQLException { + Account account = (Account) sqlMap.queryForObject("getNestedAccountViaColumnName", new Integer(1)); + assertAccount1(account); + } + + +} Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultObjectFactoryImpl.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultObjectFactoryImpl.java?rev=683745&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultObjectFactoryImpl.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultObjectFactoryImpl.java Thu Aug 7 16:21:46 2008 @@ -0,0 +1,44 @@ +package com.ibatis.sqlmap; + +import org.apache.ibatis.reflection.ObjectFactory; +import testdomain.*; + +import java.util.List; + +/** + * @author Jeff Butler + */ +public class ResultObjectFactoryImpl implements ObjectFactory { + + /** + * + */ + public ResultObjectFactoryImpl() { + super(); + } + + /* (non-Javadoc) + * @see com.ibatis.sqlmap.engine.mapping.result.ResultObjectFactory#createInstance(java.lang.String, java.lang.Class) + */ + public Object create(Class clazz) { + + Object obj = null; + + if (clazz.equals(IItem.class)) { + obj = new IItemImpl(); + } else if (clazz.equals((ISupplier.class))) { + obj = new ISupplierImpl(); + } else if (clazz.equals((ISupplierKey.class))) { + obj = new ISupplierKeyImpl(); + } + + return obj; + } + + public Object create(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) { + return create(type); + } + + public void setProperty(String name, String value) { + } +} Added: ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultObjectFactoryTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultObjectFactoryTest.java?rev=683745&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultObjectFactoryTest.java (added) +++ ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/test/java/com/ibatis/sqlmap/ResultObjectFactoryTest.java Thu Aug 7 16:21:46 2008 @@ -0,0 +1,28 @@ +package com.ibatis.sqlmap; + +import testdomain.*; + +import java.util.List; + +public class ResultObjectFactoryTest extends BaseSqlMapTest { + + protected void setUp() throws Exception { + initSqlMap("com/ibatis/sqlmap/maps/SqlMapConfig_rof.xml", null); + initScript("scripts/jpetstore-hsqldb-schema.sql"); + initScript("scripts/jpetstore-hsqldb-dataload.sql"); + } + + /** + * This tests that the result object factory is working - + * everything in the sql map is declared as an interface. + */ + public void testShouldDemonstrateThatTheObjectFactoryIsWorking() throws Exception { + List results = sqlMap.queryForList("getAllItemsROF"); + assertEquals(28, results.size()); + IItem iItem = (IItem) results.get(2); + ISupplier iSupplier = iItem.getSupplier(); + Integer id = iSupplier.getSupplierId(); + assertEquals((Integer) 1, id); + } + +}