1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 package ifc.sdbc; 25 26 import lib.MultiMethodTest; 27 28 import com.sun.star.sdbc.SQLException; 29 import com.sun.star.sdbc.XResultSet; 30 import com.sun.star.sdbc.XRow; 31 import com.sun.star.sdbc.XRowUpdate; 32 import com.sun.star.uno.UnoRuntime; 33 34 /** 35 /** 36 * Testing <code>com.sun.star.sdbc.XResultSet</code> 37 * interface methods : 38 * <ul> 39 * <li><code> next()</code></li> 40 * <li><code> isBeforeFirst()</code></li> 41 * <li><code> isAfterLast()</code></li> 42 * <li><code> isFirst()</code></li> 43 * <li><code> isLast()</code></li> 44 * <li><code> beforeFirst()</code></li> 45 * <li><code> afterLast()</code></li> 46 * <li><code> first()</code></li> 47 * <li><code> last()</code></li> 48 * <li><code> getRow()</code></li> 49 * <li><code> absolute()</code></li> 50 * <li><code> relative()</code></li> 51 * <li><code> previous()</code></li> 52 * <li><code> refreshRow()</code></li> 53 * <li><code> rowUpdated()</code></li> 54 * <li><code> rowInserted()</code></li> 55 * <li><code> rowDeleted()</code></li> 56 * <li><code> getStatement()</code></li> 57 * </ul> <p> 58 * This test needs the following object relations : 59 * <ul> 60 * <li> <code>'XResultSet.hasStatement'</code> (<b>optional</b> of type 61 * <code>Object</code>): 62 * it the relation exists than <code>getStatement</code> method 63 * must not return <code>null</code> </li> 64 * <ul> <p> 65 * Test places DB cursor to different positions and then checks 66 * its current position. <p> 67 * Test is <b> NOT </b> multithread compilant. <p> 68 * @see com.sun.star.sdbc.XResultSet 69 */ 70 public class _XResultSet extends MultiMethodTest { 71 72 // oObj filled by MultiMethodTest 73 public XResultSet oObj = null ; 74 75 /** 76 * Positions the cursor to the first row. 77 * Forces method tests to be executed in definite order. 78 */ before()79 public void before() { 80 try { 81 oObj.last() ; 82 log.println("Totally number of rows is " + oObj.getRow()) ; 83 oObj.first() ; 84 } catch (SQLException e) { 85 log.println("Ignored exception :") ; 86 e.printStackTrace(log); 87 } 88 89 executeMethod("isBeforeFirst()") ; 90 executeMethod("isAfterLast()") ; 91 executeMethod("isLast()") ; 92 executeMethod("isFirst()") ; 93 executeMethod("next()") ; 94 executeMethod("previous()") ; 95 } 96 97 /** 98 * Places the cursor before the first row. <p> 99 * Has <b>OK</b> status if no exceptions were thrown. 100 */ _beforeFirst()101 public void _beforeFirst() { 102 try { 103 oObj.beforeFirst() ; 104 } catch (SQLException e) { 105 log.println("Exception occurred :") ; 106 e.printStackTrace(log) ; 107 tRes.tested("beforeFirst()", false) ; 108 return ; 109 } 110 tRes.tested("beforeFirst()", true) ; 111 } 112 113 /** 114 * The method is called immediately after <code>beforeFirst</code> 115 * method test. <p> 116 * Has <b>OK</b> status if method returns <code>true</code>. <p> 117 * The following method tests are to be completed successfully before : 118 * <ul> 119 * <li> <code> beforeFirst </code> : to position cursor before 120 * the first row. </li> 121 * </ul> 122 */ _isBeforeFirst()123 public void _isBeforeFirst() { 124 requiredMethod("beforeFirst()") ; 125 126 boolean result = true ; 127 128 try { 129 result = oObj.isBeforeFirst() ; 130 } catch (SQLException e) { 131 log.println("Exception occurred :") ; 132 e.printStackTrace(log) ; 133 result = false ; 134 } 135 tRes.tested("isBeforeFirst()", result) ; 136 } 137 138 /** 139 * Places the cursor after the last row. <p> 140 * Has <b>OK</b> status if no exceptions were thrown. 141 */ _afterLast()142 public void _afterLast() { 143 try { 144 oObj.afterLast() ; 145 } catch (SQLException e) { 146 log.println("Exception occurred :") ; 147 e.printStackTrace(log) ; 148 tRes.tested("afterLast()", false) ; 149 return ; 150 } 151 tRes.tested("afterLast()", true) ; 152 } 153 154 /** 155 * The method is called immediately after <code>afterLast</code> 156 * method test. <p> 157 * Has <b>OK</b> status if method returns <code>true</code> <p> 158 * The following method tests are to be completed successfully before : 159 * <ul> 160 * <li> <code> afterLast </code> : to position cursor after 161 * the last row. </li> 162 * </ul> 163 */ _isAfterLast()164 public void _isAfterLast() { 165 requiredMethod("afterLast()") ; 166 167 boolean result = true ; 168 169 try { 170 result = oObj.isAfterLast() ; 171 } catch (SQLException e) { 172 log.println("Exception occurred :") ; 173 e.printStackTrace(log) ; 174 result = false ; 175 } 176 tRes.tested("isAfterLast()", result) ; 177 } 178 179 /** 180 * Places the cursor on the first row. <p> 181 * Has <b>OK</b> status if no exceptions were thrown. 182 */ _first()183 public void _first() { 184 try { 185 oObj.first() ; 186 } catch (SQLException e) { 187 log.println("Exception occurred :") ; 188 e.printStackTrace(log) ; 189 tRes.tested("first()", false) ; 190 return ; 191 } 192 tRes.tested("first()", true) ; 193 } 194 195 /** 196 * The method is called immediately after <code>first</code> 197 * method test. <p> 198 * Has <b>OK</b> status if method returns <code>true</code>. <p> 199 * The following method tests are to be completed successfully before : 200 * <ul> 201 * <li> <code> first </code> : to position cursor on 202 * the first row. </li> 203 * </ul> 204 */ _isFirst()205 public void _isFirst() { 206 requiredMethod("first()") ; 207 208 boolean result = true ; 209 210 try { 211 result = oObj.isFirst() ; 212 } catch (SQLException e) { 213 log.println("Exception occurred :") ; 214 e.printStackTrace(log) ; 215 result = false ; 216 } 217 tRes.tested("isFirst()", result) ; 218 } 219 220 /** 221 * Places the cursor on the last row. <p> 222 * Has <b>OK</b> status if no exceptions were thrown. 223 */ _last()224 public void _last() { 225 try { 226 oObj.last() ; 227 } catch (SQLException e) { 228 log.println("Exception occurred :") ; 229 e.printStackTrace(log) ; 230 tRes.tested("last()", false) ; 231 return ; 232 } 233 tRes.tested("last()", true) ; 234 } 235 236 /** 237 * The method is called immediately after <code>last</code> 238 * method test. <p> 239 * Has <b>OK</b> status if method returns <code>true</code>. <p> 240 * The following method tests are to be completed successfully before : 241 * <ul> 242 * <li> <code> last </code> : to position cursor on 243 * the last row. </li> 244 * </ul> 245 */ _isLast()246 public void _isLast() { 247 requiredMethod("last()") ; 248 boolean result = true ; 249 250 try { 251 result = oObj.isLast() ; 252 } catch (SQLException e) { 253 log.println("Exception occurred :") ; 254 e.printStackTrace(log) ; 255 result = false ; 256 } 257 tRes.tested("isLast()", result) ; 258 } 259 260 /** 261 * Places the cursor on the row number 1. <p> 262 * Has <b>OK</b> status if no exceptions were thrown. 263 */ _absolute()264 public void _absolute() { 265 boolean result = true ; 266 267 try { 268 oObj.absolute(1) ; 269 } catch (SQLException e) { 270 log.println("Exception occurred :") ; 271 e.printStackTrace(log) ; 272 result = false ; 273 } 274 tRes.tested("absolute()", result) ; 275 } 276 277 /** 278 * The method is called immediately after <code>absolute</code> 279 * method test. <p> 280 * Has <b>OK</b> status if method returns 1. <p> 281 * The following method tests are to be completed successfully before : 282 * <ul> 283 * <li> <code> absolute </code> : to position cursor on 284 * the row number 1. </li> 285 * </ul> 286 */ _getRow()287 public void _getRow() { 288 requiredMethod("absolute()"); 289 boolean result = true; 290 291 try { 292 result &= oObj.getRow() == 1; 293 } catch (SQLException e) { 294 log.println("Exception occurred:"); 295 e.printStackTrace(log); 296 result = false; 297 } 298 299 tRes.tested("getRow()", result); 300 } 301 302 /** 303 * Positions the cursor to the next row. Current row 304 * number is retrieved before and after method call. <p> 305 * Has <b>OK</b> status if current row number increases 306 * by 1 after method call. 307 */ _next()308 public void _next() { 309 boolean result = true ; 310 311 try { 312 int prevRow = oObj.getRow() ; 313 oObj.next() ; 314 315 log.println("Row was : " + prevRow + ", row is : " + oObj.getRow()); 316 result &= prevRow + 1 == oObj.getRow() ; 317 } catch (SQLException e) { 318 log.println("Exception occurred :") ; 319 e.printStackTrace(log) ; 320 result = false ; 321 } 322 tRes.tested("next()", result) ; 323 } 324 325 /** 326 * Positions the cursor to the previous row. Current row 327 * number is retrieved before and after method call. <p> 328 * Has <b>OK</b> status if current row number decreases 329 * by 1 after method call. 330 */ _previous()331 public void _previous() { 332 boolean result = true ; 333 334 try { 335 int prevRow = oObj.getRow() ; 336 oObj.previous() ; 337 338 log.println("Row was : " + prevRow + ", row is : " + oObj.getRow()); 339 result &= prevRow - 1 == oObj.getRow() ; 340 } catch (SQLException e) { 341 log.println("Exception occurred :") ; 342 e.printStackTrace(log) ; 343 result = false ; 344 } 345 tRes.tested("previous()", result) ; 346 } 347 348 /** 349 * Positions the cursor relatively by 2 rows forward. 350 * Current row number is retrieved before and after method call. <p> 351 * Has <b>OK</b> status if current row number increases 352 * by 2 after method call. 353 */ _relative()354 public void _relative() { 355 boolean result = true ; 356 357 try { 358 oObj.first() ; 359 int prevRow = oObj.getRow() ; 360 oObj.relative(2) ; 361 362 log.println("Row was : " + prevRow + ", row is : " + oObj.getRow()); 363 364 result &= prevRow + 2 == oObj.getRow() ; 365 } catch (SQLException e) { 366 log.println("Exception occurred :") ; 367 e.printStackTrace(log) ; 368 result = false ; 369 } 370 tRes.tested("relative()", result) ; 371 } 372 373 /** 374 * If component supports XRow and XRowUpdate then: 375 * test saves current value of string field, updates string, 376 * calls refreshRow() and checks that value of 377 * string field was refetched from DB 378 * else: just calls method.<p> 379 * Has <b>OK</b> status if no exceptions were thrown and value after 380 * refreshRow() equals to saved value. 381 */ _refreshRow()382 public void _refreshRow() { 383 XRowUpdate xRowUpdate = (XRowUpdate) 384 UnoRuntime.queryInterface(XRowUpdate.class, oObj); 385 XRow xRow = (XRow)UnoRuntime.queryInterface(XRow.class, oObj); 386 387 if (xRowUpdate == null || xRow == null) { 388 log.println("Test must be modified because XRow or XRowUpdate is't supported"); 389 log.println("Only call method"); 390 try { 391 oObj.refreshRow() ; 392 tRes.tested("refreshRow()", true) ; 393 } catch (SQLException e) { 394 log.println("Exception occurred :") ; 395 e.printStackTrace(log) ; 396 tRes.tested("refreshRow()", false) ; 397 } 398 } else { 399 log.println("Testing of refreshRow()..."); 400 try { 401 String oldValue = xRow.getString(util.DBTools.TST_STRING); 402 log.println("Old value: " + oldValue); 403 xRowUpdate.updateString(util.DBTools.TST_STRING, 404 "Test method refreshRow"); 405 log.println("New value: " 406 + xRow.getString(util.DBTools.TST_STRING)); 407 oObj.refreshRow(); 408 String valAfterRefresh = 409 xRow.getString(util.DBTools.TST_STRING); 410 log.println("Value after refresh: " + valAfterRefresh); 411 tRes.tested("refreshRow()", valAfterRefresh.equals(oldValue)); 412 } catch(SQLException e) { 413 log.println("Exception occurred :"); 414 e.printStackTrace(log); 415 tRes.tested("refreshRow()", false); 416 } 417 } 418 } 419 420 /** 421 * Just the method is called. <p> 422 * Has <b>OK</b> status if no exceptions were thrown. 423 */ _rowUpdated()424 public void _rowUpdated() { 425 426 try { 427 boolean res = oObj.rowUpdated() ; 428 tRes.tested("rowUpdated()", true) ; 429 } catch (SQLException e) { 430 log.println("Exception occurred :") ; 431 e.printStackTrace(log) ; 432 tRes.tested("rowUpdated()", false) ; 433 } 434 } 435 436 /** 437 * Just the method is called. <p> 438 * Has <b>OK</b> status if no exceptions were thrown. 439 */ _rowInserted()440 public void _rowInserted() { 441 try { 442 boolean res = oObj.rowInserted() ; 443 tRes.tested("rowInserted()", true) ; 444 } catch (SQLException e) { 445 log.println("Exception occurred :") ; 446 e.printStackTrace(log) ; 447 tRes.tested("rowInserted()", false) ; 448 } 449 } 450 451 /** 452 * Just the method is called. <p> 453 * Has <b>OK</b> status if no exceptions were thrown. 454 */ _rowDeleted()455 public void _rowDeleted() { 456 try { 457 boolean res = oObj.rowDeleted() ; 458 tRes.tested("rowDeleted()", true) ; 459 } catch (SQLException e) { 460 log.println("Exception occurred :") ; 461 e.printStackTrace(log) ; 462 tRes.tested("rowDeleted()", false) ; 463 } 464 } 465 466 /** 467 * Just the method is called. <p> 468 * Has <b>OK</b> status if the statement returned isn't null or 469 * the relation exists that informs that statement absent (e.g. for 470 * MetaData row set). 471 */ _getStatement()472 public void _getStatement() { 473 try { 474 boolean hasStatement = 475 tEnv.getObjRelation("XResultSet.hasStatement") != null ; 476 Object res = oObj.getStatement() ; 477 tRes.tested("getStatement()", 478 (hasStatement && res != null) || !hasStatement) ; 479 } catch (SQLException e) { 480 log.println("Exception occurred :") ; 481 e.printStackTrace(log) ; 482 tRes.tested("getStatement()", false) ; 483 } 484 } 485 486 /** 487 * Moves the cursor to the first row to avoid affection to 488 * the following interfaces tests 489 */ after()490 public void after() { 491 log.println("Finally moving cursor to the first row ..."); 492 try { 493 oObj.first(); 494 } catch (SQLException e) { 495 log.println("Exception occurred :") ; 496 e.printStackTrace(log) ; 497 } 498 } 499 500 } // finish class _XResultSet 501 502