/*
* 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.dbcp;
import java.sql.CallableStatement;
import java.sql.Connection;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* @version $Revision$ $Date$
*/
public class TestDelegatingCallableStatement extends TestCase {
public TestDelegatingCallableStatement(String testName) {
super(testName);
}
public static Test suite() {
return new TestSuite(TestDelegatingCallableStatement.class);
}
private DelegatingConnection conn = null;
private Connection delegateConn = null;
private DelegatingCallableStatement stmt = null;
private CallableStatement delegateStmt = null;
public void setUp() throws Exception {
delegateConn = new TesterConnection("test", "test");
conn = new DelegatingConnection(delegateConn);
}
public void testExecuteQueryReturnsNull() throws Exception {
delegateStmt = new TesterCallableStatement(delegateConn,"null");
stmt = new DelegatingCallableStatement(conn,delegateStmt);
assertNull(stmt.executeQuery());
}
public void testExecuteQueryReturnsNotNull() throws Exception {
delegateStmt = new TesterCallableStatement(delegateConn,"select * from foo");
stmt = new DelegatingCallableStatement(conn,delegateStmt);
assertTrue(null != stmt.executeQuery());
}
public void testGetDelegate() throws Exception {
delegateStmt = new TesterCallableStatement(delegateConn,"select * from foo");
stmt = new DelegatingCallableStatement(conn,delegateStmt);
assertEquals(delegateStmt,stmt.getDelegate());
}
public void testHashCodeNull() {
stmt = new DelegatingCallableStatement(conn, null);
assertEquals(0, stmt.hashCode());
}
public void testHashCode() {
delegateStmt = new TesterCallableStatement(delegateConn,"select * from foo");
DelegatingCallableStatement stmt1 = new DelegatingCallableStatement(conn,delegateStmt);
DelegatingCallableStatement stmt2 = new DelegatingCallableStatement(conn,delegateStmt);
assertEquals(stmt1.hashCode(), stmt2.hashCode());
}
public void testEquals() {
delegateStmt = new TesterCallableStatement(delegateConn,"select * from foo");
CallableStatement del = new TesterCallableStatement(delegateConn,"select * from foo");
DelegatingCallableStatement stmt1 = new DelegatingCallableStatement(conn, delegateStmt);
DelegatingCallableStatement stmt2 = new DelegatingCallableStatement(conn, delegateStmt);
DelegatingCallableStatement stmt3 = new DelegatingCallableStatement(conn, null);
DelegatingCallableStatement stmt4 = new DelegatingCallableStatement(conn, del);
// Nothing is equal to null
assertFalse(stmt1.equals(null));
assertFalse(stmt2.equals(null));
assertFalse(stmt3.equals(null));
assertFalse(stmt4.equals(null));
// 1 & 2 are equivalent
assertTrue(stmt1.equals(stmt2));
assertTrue(stmt2.equals(stmt1)); // reflexive
// 1 & 3 are not (different statements, one null)
assertFalse(stmt1.equals(stmt3));
assertFalse(stmt3.equals(stmt1)); // reflexive
// 1 & 4 are not (different statements)
assertFalse(stmt1.equals(stmt4));
assertFalse(stmt4.equals(stmt1)); // reflexive
// Check self-equals
assertTrue(stmt1.equals(stmt1));
assertTrue(stmt2.equals(stmt2));
assertFalse(stmt3.equals(stmt3)); // because underlying statement is null
assertTrue(stmt4.equals(stmt4));
DelegatingStatement dstmt1 = stmt1;
// 1 & 2 are equivalent
assertTrue(dstmt1.equals(stmt2));
assertTrue(stmt2.equals(dstmt1)); // reflexive
}
}