diff options
| author | Bruce Momjian <bruce@momjian.us> | 2001-09-23 04:11:14 +0000 |
|---|---|---|
| committer | Bruce Momjian <bruce@momjian.us> | 2001-09-23 04:11:14 +0000 |
| commit | b75814aee320ef2b67ad01ba72c266dbbf94db45 (patch) | |
| tree | 51233fa095190081d2f84742b257c78e0daf2fb4 /src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java | |
| parent | c7bc0ddf76414b6e834fa25dd893a3a398f15139 (diff) | |
| download | postgresql-b75814aee320ef2b67ad01ba72c266dbbf94db45.tar.gz | |
The attached patch is my first run-through of the JDBC test suite. A
summary of changes:
. removal of the tablename property from build.xml
. addition of a dropTable method in JDBC2Tests and cleanups of many
methods in the same
. all tests now use non-deprecated assertXYZ methods instead of the
deprecated assert method
. failure in TimestampTest (testSetTimestamp) fixed. The failure is
because testSetTimestamp was inserting a timestamp with hour 7 but
checkTimeTest was expecting a timestamp with hour 8. AFAICS, there are
no issues wrt daylight savings time and timestamps being pushed in and
pulled out (but more explicit tests should be added in the future)
. failure in TimeTest (testGetTime) fixed. Times to be inserted were
interpreted in the localtime zone but checking was done with the
assumption that the insertion was done in GMT.
. formatting changes in a few of the source files (because I found
it convenient to have consistent formatting while working on them). The
formatting is consistent with the new format for java source files in
PostgreSQL.
Liam Stewart
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; + } } |
