1 21 22 package org.opensubsystems.core.persist.db.driver; 23 24 import java.sql.PreparedStatement ; 25 import java.sql.ResultSet ; 26 import java.sql.SQLException ; 27 import java.text.DateFormat ; 28 import java.util.Calendar ; 29 30 import junit.extensions.TestSetup; 31 import junit.framework.Test; 32 import junit.framework.TestSuite; 33 34 import org.opensubsystems.core.error.OSSException; 35 import org.opensubsystems.core.persist.db.Database; 36 import org.opensubsystems.core.persist.db.DatabaseImpl; 37 import org.opensubsystems.core.persist.db.DatabaseTest; 38 import org.opensubsystems.core.persist.db.DatabaseTestSetup; 39 import org.opensubsystems.core.persist.db.DatabaseTestSuite; 40 import org.opensubsystems.core.util.DatabaseUtils; 41 import org.opensubsystems.core.util.DateUtils; 42 43 51 public final class DateTest 52 { 53 55 58 private DateTest( 59 ) 60 { 61 } 63 64 66 72 public static Test suite( 73 ) 74 { 75 TestSuite suite = new DatabaseTestSuite("DateTest"); 76 suite.addTestSuite(DateTestInternal.class); 77 TestSetup wrapper = new DatabaseTestSetup(suite); 78 79 return wrapper; 80 } 81 82 87 public static class DateTestInternal extends DatabaseTest 88 { 89 92 static 93 { 94 Database dbDatabase; 96 97 try 98 { 99 dbDatabase = DatabaseImpl.getInstance(); 100 dbDatabase.add(DatabaseTestSchema.class); 102 } 103 catch (OSSException bfeExc) 104 { 105 throw new RuntimeException ("Unexpected exception.", bfeExc); 106 } 107 } 108 109 114 public DateTestInternal( 115 String strTestName 116 ) 117 { 118 super(strTestName); 119 } 120 121 133 public void testBasicDateSupport( 134 ) throws Throwable 135 { 136 final String INSERT_DATE = "insert into DATE_TEST(DATE_TEST) values (?)"; 137 final String SELECT_DATE = "select DATE_TEST.* from DATE_TEST where DATE_TEST = ?"; 139 final String DELETE_DATE = "delete from DATE_TEST where DATE_TEST = ?"; 140 141 Calendar calGenerate = Calendar.getInstance(); 142 java.sql.Date insertDate; 143 PreparedStatement insertStatement; 144 int iUpdateCount; 145 146 calGenerate.set(1995, 9, 15, 1, 2, 3); 148 insertDate = new java.sql.Date (calGenerate.getTimeInMillis()); 149 150 m_transaction.begin(); 151 152 try 153 { 154 insertStatement = m_connection.prepareStatement(INSERT_DATE); 155 insertStatement.setDate(1, insertDate); 156 157 iUpdateCount = DatabaseUtils.executeUpdateAndClose(insertStatement); 158 159 m_transaction.commit(); 160 } 161 catch (Throwable throwable) 162 { 163 m_transaction.rollback(); 164 throw throwable; 165 } 166 167 assertEquals("Exactly one record with date data shoud have been inserted.", 168 iUpdateCount, 1); 169 170 PreparedStatement selectStatement = null; 172 PreparedStatement deleteStatement = null; 173 ResultSet results = null; 174 java.sql.Date retrievedDate; 175 boolean bHasMoreThanOne; 176 int iDeletedCount = 0; 177 178 m_transaction.begin(); 179 180 try 181 { 182 java.sql.Date selectDate; 183 boolean bUpdatableResultSet = true; 184 185 try 186 { 187 selectStatement = m_connection.prepareStatement( 188 SELECT_DATE, 189 ResultSet.TYPE_SCROLL_SENSITIVE, 190 ResultSet.CONCUR_UPDATABLE); 191 } 192 catch (SQLException sqleExc) 193 { 194 bUpdatableResultSet = false; 197 selectStatement = m_connection.prepareStatement(SELECT_DATE); 198 } 201 202 calGenerate.set(1995, 9, 15, 2, 3, 4); 205 selectDate = new java.sql.Date (calGenerate.getTimeInMillis()); 206 selectStatement.setDate(1, selectDate); 207 results = selectStatement.executeQuery(); 208 209 assertTrue("The inserted date is not in the database.", results.next()); 211 retrievedDate = results.getDate(1); 212 if (bUpdatableResultSet) 214 { 215 try 219 { 220 results.deleteRow(); 221 iDeletedCount = 1; 222 } 223 catch (SQLException sqleExc) 224 { 225 bUpdatableResultSet = false; 228 } 229 } 230 if (!bUpdatableResultSet) 231 { 232 deleteStatement = m_connection.prepareStatement(DELETE_DATE); 233 deleteStatement.setDate(1, insertDate); 234 iDeletedCount = DatabaseUtils.executeUpdateAndClose(deleteStatement); 235 } 236 237 bHasMoreThanOne = results.next(); 240 m_transaction.commit(); 241 } 242 catch (Throwable throwable) 243 { 244 m_transaction.rollback(); 245 throw throwable; 246 } 247 finally 248 { 249 DatabaseUtils.closeResultSetAndStatement(results, selectStatement); 250 251 m_transaction.begin(); 252 try 253 { 254 deleteStatement = m_connection.prepareStatement( 255 "delete from DATE_TEST"); 256 deleteStatement.execute(); 257 m_transaction.commit(); 258 } 259 catch (Exception eExc) 260 { 261 m_transaction.rollback(); 262 throw eExc; 263 } 264 finally 265 { 266 DatabaseUtils.closeStatement(deleteStatement); 267 } 268 } 269 270 assertFalse("There should be only one inserted date in the database.", 271 bHasMoreThanOne); 272 273 assertEquals("Exactly one record with date data shoud have been deleted.", 274 iDeletedCount, 1); 275 276 assertNotNull("The inserted date shouldn't be retrieved as null from the database", 278 retrievedDate); 279 assertTrue("The date retrieved from database " 280 + DateFormat.getDateTimeInstance().format(retrievedDate) 281 + " is not the same as the inserted one " 282 + DateFormat.getDateTimeInstance().format(insertDate), 283 DateUtils.dateEquals(retrievedDate, insertDate)); 284 285 } 286 } 287 } 288 | Popular Tags |