/*
* Copyright (c) 2007, PostgreSQL Global Development Group
* See the LICENSE file in the project root for more information.
*/
package org.postgresql.test.jdbc4;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.postgresql.PGConnection;
import org.postgresql.PGStatement;
import org.postgresql.ds.PGSimpleDataSource;
import org.postgresql.test.TestUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class WrapperTest {
private Connection _conn;
private Statement _statement;
@Before
public void setUp() throws Exception {
_conn = TestUtil.openDB();
_statement = _conn.prepareStatement("SELECT 1");
}
@After
public void tearDown() throws SQLException {
_statement.close();
TestUtil.closeDB(_conn);
}
/**
* This interface is private, and so cannot be supported by any wrapper
*/
private interface PrivateInterface {
}
@Test
public void testConnectionIsWrapperForPrivate() throws SQLException {
assertFalse(_conn.isWrapperFor(PrivateInterface.class));
}
@Test
public void testConnectionIsWrapperForConnection() throws SQLException {
assertTrue(_conn.isWrapperFor(Connection.class));
}
@Test
public void testConnectionIsWrapperForPGConnection() throws SQLException {
assertTrue(_conn.isWrapperFor(PGConnection.class));
}
@Test
public void testConnectionUnwrapPrivate() throws SQLException {
try {
_conn.unwrap(PrivateInterface.class);
fail("unwrap of non-wrapped interface should fail");
} catch (SQLException e) {
}
}
@Test
public void testConnectionUnwrapConnection() throws SQLException {
Object v = _conn.unwrap(Connection.class);
assertNotNull(v);
assertTrue(v instanceof Connection);
}
@Test
public void testConnectionUnwrapPGConnection() throws SQLException {
Object v = _conn.unwrap(PGConnection.class);
assertNotNull(v);
assertTrue(v instanceof PGConnection);
}
@Test
public void testConnectionUnwrapPGDataSource() throws SQLException {
PGSimpleDataSource dataSource = new PGSimpleDataSource();
dataSource.setDatabaseName(TestUtil.getDatabase());
dataSource.setServerName(TestUtil.getServer());
dataSource.setPortNumber(TestUtil.getPort());
Connection connection = dataSource.getConnection(TestUtil.getUser(), TestUtil.getPassword());
assertNotNull("Unable to obtain a connection from PGSimpleDataSource", connection);
Object v = connection.unwrap(PGConnection.class);
assertTrue("connection.unwrap(PGConnection.class) should return PGConnection instance"
+ ", actual instance is " + v,
v instanceof PGConnection);
}
@Test
public void testStatementIsWrapperForPrivate() throws SQLException {
assertFalse(_statement.isWrapperFor(PrivateInterface.class));
}
@Test
public void testStatementIsWrapperForStatement() throws SQLException {
assertTrue(_statement.isWrapperFor(Statement.class));
}
@Test
public void testStatementIsWrapperForPGStatement() throws SQLException {
assertTrue(_statement.isWrapperFor(PGStatement.class));
}
@Test
public void testStatementUnwrapPrivate() throws SQLException {
try {
_statement.unwrap(PrivateInterface.class);
fail("unwrap of non-wrapped interface should fail");
} catch (SQLException e) {
}
}
@Test
public void testStatementUnwrapStatement() throws SQLException {
Object v = _statement.unwrap(Statement.class);
assertNotNull(v);
assertTrue(v instanceof Statement);
}
@Test
public void testStatementUnwrapPGStatement() throws SQLException {
Object v = _statement.unwrap(PGStatement.class);
assertNotNull(v);
assertTrue(v instanceof PGStatement);
}
}