diff options
Diffstat (limited to 'src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java')
| -rw-r--r-- | src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java | 354 |
1 files changed, 168 insertions, 186 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java b/src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java index 37565cfcc3..76f8e368c5 100644 --- a/src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java +++ b/src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java @@ -10,206 +10,188 @@ import java.sql.*; * Executes all known tests for JDBC2 and includes some utility methods. */ public class JDBC2Tests extends TestSuite { - /** - * Returns the Test database JDBC URL - */ - public static String getURL() { - return System.getProperty("database"); - } - - /** - * Returns the Postgresql username - */ - public static String getUser() { - return System.getProperty("username"); - } - - /** - * Returns the user's password - */ - public static String getPassword() { - return System.getProperty("password"); - } - - /** - * helper - opens a connection. Static so other classes can call it. - */ - public static java.sql.Connection openDB() { - try { - Class.forName("org.postgresql.Driver"); - return java.sql.DriverManager.getConnection(JDBC2Tests.getURL(),JDBC2Tests.getUser(),JDBC2Tests.getPassword()); - } catch(ClassNotFoundException ex) { - TestCase.assert(ex.getMessage(),false); - } catch(SQLException ex) { - TestCase.assert(ex.getMessage(),false); - } - return null; - } - - /** - * Helper - closes an open connection. This rewrites SQLException to a failed - * assertion. It's static so other classes can use it. - */ - public static void closeDB(Connection conn) { - try { - if(conn!=null) - conn.close(); - } catch(SQLException ex) { - TestCase.assert(ex.getMessage(),false); - } - } + /** + * Returns the Test database JDBC URL + */ + public static String getURL() { + return System.getProperty("database"); + } + + /** + * Returns the Postgresql username + */ + public static String getUser() { + return System.getProperty("username"); + } + + /** + * Returns the user's password + */ + public static String getPassword() { + return System.getProperty("password"); + } + + /** + * Helper - opens a connection. + */ + public static java.sql.Connection openDB() { + try { + Class.forName("org.postgresql.Driver"); + return java.sql.DriverManager.getConnection(JDBC2Tests.getURL(),JDBC2Tests.getUser(),JDBC2Tests.getPassword()); + } catch(ClassNotFoundException ex) { + TestCase.fail(ex.getMessage()); + } catch(SQLException ex) { + TestCase.fail(ex.getMessage()); + } + return null; + } + + /** + * Helper - closes an open connection. This rewrites SQLException to a failed + * assertion. It's static so other classes can use it. + */ + public static void closeDB(Connection con) { + try { + if (con != null) + con.close(); + } catch (SQLException ex) { + TestCase.fail(ex.getMessage()); + } + } /** * Helper - creates a test table for use by a test - */ - public static void createTable( - Connection conn, String table, String columns) { + */ + public static void createTable(Connection con, + String table, + String columns) { try { - Statement st = conn.createStatement(); + Statement st = con.createStatement(); try { - try { - st.executeUpdate("drop table " + table); - } catch(SQLException se) { - // Intentionally ignore exception - } + // Drop the table + dropTable(con, table); // Now create the table - st.executeUpdate( "create table " + table + " (" + columns + - ")" ); + st.executeUpdate("create table " + table + " (" + columns + ")"); } finally { st.close(); } } catch(SQLException ex) { - TestCase.assert(ex.getMessage(),false); + TestCase.fail(ex.getMessage()); + } + } + + /** + * Helper - drops a table + */ + public static void dropTable(Connection con, String table) { + try { + Statement stmt = con.createStatement(); + try { + stmt.executeUpdate("DROP TABLE " + table); + } catch (SQLException ex) { + // ignore + } + } catch (SQLException ex) { + TestCase.fail(ex.getMessage()); } } - // Create the test table whose name is passed via the properties - // (see ../../../build.xml). It appears that the original author of - // this test suite intended to specify all test table names via the - // properties, but this was never fully implemented. - public static void createTable(Connection conn, String columns) { - createTable(conn, getTableName(), columns); + /** + * Helper - generates INSERT SQL - very simple + */ + public static String insertSQL(String table, String values) { + return insertSQL(table, null, values); } + + public static String insertSQL(String table, String columns, String values) { + String s = "INSERT INTO " + table; + + if (columns != null) + s = s + " (" + columns + ")"; + + return s + " VALUES (" + values + ")"; + } + + /** + * Helper - generates SELECT SQL - very simple + */ + public static String selectSQL(String table, String columns) { + return selectSQL(table, columns, null, null); + } + + public static String selectSQL(String table, String columns, String where) { + return selectSQL(table, columns, where, null); + } + + public static String selectSQL(String table, String columns, String where, String other) { + String s = "SELECT " + columns + " FROM " + table; + + if (where != null) + s = s + " WHERE " + where; + if (other != null) + s = s + " " + other; + + return s; + } + + /** + * Helper to prefix a number with leading zeros - ugly but it works... + * @param v value to prefix + * @param l number of digits (0-10) + */ + public static String fix(int v, int l) { + String s = "0000000000".substring(0, l) + Integer.toString(v); + return s.substring(s.length() - l); + } + + /** + * The main entry point for JUnit + */ + public static TestSuite suite() { + TestSuite suite= new TestSuite(); - /** - * Helper - generates INSERT SQL - very simple - */ - public static String insert(String values) { - return insert(null,values); - } - public static String insert(String columns,String values) { - String s = "INSERT INTO "+getTableName(); - if(columns!=null) - s=s+" ("+columns+")"; - return s+" VALUES ("+values+")"; - } - - /** - * Helper - generates SELECT SQL - very simple - */ - public static String select(String columns) { - return select(columns,null,null); - } - public static String select(String columns,String where) { - return select(columns,where,null); - } - public static String select(String columns,String where,String other) { - String s = "SELECT "+columns+" FROM "+getTableName(); - if(where!=null) - s=s+" WHERE "+where; - if(other!=null) - s=s+" "+other; - return s; - } - - /** - * Helper - returns the test table's name - * This is defined by the tablename property. If not defined it defaults to - * jdbctest - */ - public static String getTableName() { - if(tablename==null) - tablename=System.getProperty("tablename","jdbctest"); - return tablename; - } - - /** - * As getTableName() but the id is a suffix. Used when more than one table is - * required in a test. - */ - public static String getTableName(String id) { - if(tablename==null) - tablename=System.getProperty("tablename","jdbctest"); - return tablename+"_"+id; - } - - /** - * Cache used by getTableName() [its used a lot!] - */ - private static String tablename; - - /** - * Helper to prefix a number with leading zeros - ugly but it works... - * @param v value to prefix - * @param l number of digits (0-10) - */ - public static String fix(int v,int l) { - String s = "0000000000".substring(0,l)+Integer.toString(v); - return s.substring(s.length()-l); - } - - /** - * Number of milliseconds in a day - */ - public static final long DAYMILLIS = 24*3600*1000; - - /** - * The main entry point for JUnit - */ - public static TestSuite suite() { - TestSuite suite= new TestSuite(); - - // - // Add one line per class in our test cases. These should be in order of - // complexity. - - // ANTTest should be first as it ensures that test parameters are - // being sent to the suite. It also initialises the database (if required) - // with some simple global tables (will make each testcase use its own later). - // - suite.addTestSuite(ANTTest.class); - - // Basic Driver internals - suite.addTestSuite(DriverTest.class); - suite.addTestSuite(ConnectionTest.class); - suite.addTestSuite(DatabaseMetaDataTest.class); - suite.addTestSuite(EncodingTest.class); - - // Connectivity/Protocols - - // ResultSet - suite.addTestSuite(DateTest.class); - suite.addTestSuite(TimeTest.class); - suite.addTestSuite(TimestampTest.class); - - // PreparedStatement - suite.addTestSuite(BatchExecuteTest.class); - - // BatchExecute - - - // MetaData - - // Other misc tests, based on previous problems users have had or specific - // features some applications require. - suite.addTestSuite(JBuilderTest.class); - suite.addTestSuite(MiscTest.class); - - // Fastpath/LargeObject - suite.addTestSuite(BlobTest.class); - - // That's all folks - return suite; - } + // + // Add one line per class in our test cases. These should be in order of + // complexity. + + // ANTTest should be first as it ensures that test parameters are + // being sent to the suite. It also initialises the database (if required) + // with some simple global tables (will make each testcase use its own later). + // + suite.addTestSuite(ANTTest.class); + + // Basic Driver internals + suite.addTestSuite(DriverTest.class); + suite.addTestSuite(ConnectionTest.class); + suite.addTestSuite(DatabaseMetaDataTest.class); + suite.addTestSuite(EncodingTest.class); + + // Connectivity/Protocols + + // ResultSet + + // Time, Date, Timestamp + suite.addTestSuite(DateTest.class); + suite.addTestSuite(TimeTest.class); + suite.addTestSuite(TimestampTest.class); + + // PreparedStatement + + // BatchExecute + suite.addTestSuite(BatchExecuteTest.class); + + // MetaData + + // Other misc tests, based on previous problems users have had or specific + // features some applications require. + suite.addTestSuite(JBuilderTest.class); + suite.addTestSuite(MiscTest.class); + + // Fastpath/LargeObject + suite.addTestSuite(BlobTest.class); + + // That's all folks + return suite; + } } |
