1 /* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package tests.sql; 18 19 import dalvik.annotation.KnownFailure; 20 import dalvik.annotation.TestTargetClass; 21 import dalvik.annotation.TestTargets; 22 import dalvik.annotation.TestLevel; 23 import dalvik.annotation.TestTargetNew; 24 25 import java.io.IOException; 26 import java.sql.ResultSet; 27 import java.sql.ResultSetMetaData; 28 import java.sql.SQLException; 29 import java.sql.Statement; 30 import java.sql.Types; 31 32 @TestTargetClass(ResultSetMetaData.class) 33 public class ResultSetMetaDataTest extends SQLTest { 34 35 ResultSetMetaData rsmd = null; 36 Statement st = null; 37 ResultSet rs = null; 38 39 @Override setUp()40 public void setUp() throws Exception { 41 super.setUp(); 42 try { 43 conn.setAutoCommit(false); 44 assertFalse(conn.getAutoCommit()); 45 String query = "select * from zoo"; 46 st = conn.createStatement(); 47 st.execute(query); 48 rs = st.getResultSet(); 49 rsmd = rs.getMetaData(); 50 } catch (SQLException e) { 51 fail("Couldn't get ResultSetMetaData object"); 52 } 53 } 54 55 @Override tearDown()56 public void tearDown() { 57 try { 58 rs.close(); 59 st.close(); 60 } catch (SQLException e) { 61 fail("Couldn't close Statement object"); 62 } 63 super.tearDown(); 64 } 65 66 /** 67 * @test java.sql.ResultSetMetaData#getCatalogName(int column) 68 */ 69 @TestTargetNew( 70 level = TestLevel.COMPLETE, 71 notes = "Catalog not supported.", 72 method = "getCatalogName", 73 args = {int.class} 74 ) 75 @KnownFailure("not supported") testGetCatalogName()76 public void testGetCatalogName() throws SQLException { 77 try { 78 assertNotNull(rsmd.getCatalogName(1)); 79 } catch (SQLException e) { 80 fail("SQLException is thrown: " + e.getMessage()); 81 } 82 83 try { 84 conn.close(); 85 rsmd.getCatalogName(0); 86 fail("Exception expected"); 87 } catch (SQLException e) { 88 //ok 89 } 90 } 91 92 /** 93 * @test java.sql.ResultSetMetaData#getColumnClassName(int column) 94 */ 95 @TestTargetNew( 96 level = TestLevel.COMPLETE, 97 notes = "", 98 method = "getColumnClassName", 99 args = {int.class} 100 ) testGetColumnClassName()101 public void testGetColumnClassName() { 102 try { 103 assertNotNull(rsmd); 104 assertEquals(Short.class.getName(), rsmd.getColumnClassName(1)); 105 assertEquals(String.class.getName(), rsmd.getColumnClassName(2)); 106 assertEquals(String.class.getName(), rsmd.getColumnClassName(3)); 107 } catch (SQLException e) { 108 fail("SQLException is thrown: " + e.getMessage()); 109 } 110 111 try { 112 String name = rsmd.getColumnClassName(0); 113 assertNull(name); 114 } catch (SQLException e) { 115 fail("SQLException is thrown"); 116 } 117 118 try { 119 String name = rsmd.getColumnClassName(4); 120 assertNull(name); 121 } catch (SQLException e) { 122 fail("SQLException is thrown"); 123 } 124 } 125 126 /** 127 * @test java.sql.ResultSetMetaData#getColumnCount() 128 */ 129 @TestTargetNew( 130 level = TestLevel.COMPLETE, 131 notes = "SQLException checking test fails", 132 method = "getColumnCount", 133 args = {} 134 ) 135 @KnownFailure("SQLException checking test fails") testGetColumnCount()136 public void testGetColumnCount() { 137 try { 138 assertEquals(3, rsmd.getColumnCount()); 139 } catch (SQLException e) { 140 fail("SQLException is thrown: " + e.getMessage()); 141 } 142 143 try { 144 rs.close(); 145 rsmd.getColumnCount(); 146 fail("Exception expected"); 147 } catch (SQLException e) { 148 //ok 149 } 150 151 } 152 153 /** 154 * @test java.sql.ResultSetMetaData#getColumnLabel(int column) 155 */ 156 @TestTargetNew( 157 level = TestLevel.COMPLETE, 158 notes = "", 159 method = "getColumnLabel", 160 args = {int.class} 161 ) 162 @KnownFailure("Column label has format TABLE.COLUMN expected: COLUMN") testGetColumnLabel()163 public void testGetColumnLabel() { 164 String[] labels = { "id", "name", "family" }; 165 try { 166 for (int i = 0; i < rsmd.getColumnCount(); i++) { 167 String label = rsmd.getColumnLabel(i + 1); 168 assertTrue("expected "+labels[i] + "got "+label,labels[i].contains(label)); 169 } 170 } catch (SQLException e) { 171 fail("SQLException is thrown: " + e.getMessage()); 172 } 173 174 try { 175 String label = rsmd.getColumnLabel(0); 176 fail("SQLException expected"); 177 } catch (SQLException e) { 178 //ok 179 } 180 181 try { 182 String label = rsmd.getColumnLabel(5); 183 fail("SQLException expected"); 184 } catch (SQLException e) { 185 //ok 186 } 187 } 188 189 /** 190 * @test java.sql.ResultSetMetaData#getColumnName(int column) 191 */ 192 @TestTargetNew( 193 level = TestLevel.COMPLETE, 194 notes = "", 195 method = "getColumnName", 196 args = {int.class} 197 ) 198 @KnownFailure("Column label has format TABLE.COLUMN expected: COLUMN") testGetColumnName()199 public void testGetColumnName() { 200 String[] labels = { "id", "name", "family" }; 201 try { 202 for (int i = 0; i < rsmd.getColumnCount(); i++) { 203 String name = rsmd.getColumnName(i + 1); 204 assertEquals(labels[i], name); 205 } 206 } catch (SQLException e) { 207 fail("SQLException is thrown: " + e.getMessage()); 208 } 209 210 try { 211 String label = rsmd.getColumnName(0); 212 fail("SQLException is not thrown"); 213 } catch (SQLException e) { 214 //ok 215 } 216 217 try { 218 String label = rsmd.getColumnName(5); 219 fail("SQLException is not thrown"); 220 } catch (SQLException e) { 221 //ok 222 } 223 } 224 225 /** 226 * @test java.sql.ResultSetMetaData#getColumnType(int column) 227 * 228 * for extensive tests see: ResultSetGetterTest.testGetMetaData 229 */ 230 @TestTargetNew( 231 level = TestLevel.SUFFICIENT, 232 notes = "Not all types supported. More type checking done in ResultSetGetterTest.testGetMetaData", 233 method = "getColumnType", 234 args = {int.class} 235 ) testGetColumnType()236 public void testGetColumnType() { 237 int[] types = { Types.SMALLINT, Types.VARCHAR, Types.VARCHAR}; 238 try { 239 for (int i = 0; i < rsmd.getColumnCount(); i++) { 240 int type = rsmd.getColumnType(i + 1); 241 assertEquals(types[i], type); 242 } 243 } catch (SQLException e) { 244 fail("SQLException is thrown: " + e.getMessage()); 245 } 246 247 try { 248 rsmd.getColumnType(0); 249 fail("SQLException is not thrown"); 250 } catch (SQLException e) { 251 // expected 252 } 253 try { 254 rsmd.getColumnType(5); 255 fail("SQLException is not thrown"); 256 } catch (SQLException e) { 257 // expected 258 } 259 } 260 261 /** 262 * @test java.sql.ResultSetMetaData#getColumnTypeName(int column) 263 * 264 * for extensive tests see: ResultSetGetterTest.testGetMetaData 265 */ 266 @TestTargetNew( 267 level = TestLevel.SUFFICIENT, 268 notes = "not all types supported: see ResultSetGetterTests.", 269 method = "getColumnTypeName", 270 args = {int.class} 271 ) testGetColumnTypeName()272 public void testGetColumnTypeName() { 273 try { 274 assertTrue("smallint".equalsIgnoreCase(rsmd.getColumnTypeName(1))); 275 assertTrue("varchar".equalsIgnoreCase(rsmd.getColumnTypeName(2))); 276 assertTrue("varchar".equalsIgnoreCase(rsmd.getColumnTypeName(3))); 277 } catch (SQLException e) { 278 fail("SQLException is thrown: " + e.getMessage()); 279 } 280 281 try { 282 rsmd.getColumnTypeName(0); 283 fail("SQLException is not thrown"); 284 } catch (SQLException e) { 285 // expected 286 } 287 try { 288 rsmd.getColumnTypeName(5); 289 fail("SQLException is not thrown"); 290 } catch (SQLException e) { 291 // expected 292 } 293 } 294 295 /** 296 * @throws SQLException 297 * @test java.sql.ResultSetMetaData#getTableName(int column) 298 */ 299 @TestTargetNew( 300 level = TestLevel.COMPLETE, 301 notes = "", 302 method = "getTableName", 303 args = {int.class} 304 ) 305 @KnownFailure("For int = 0, exception expected") testGetTableName()306 public void testGetTableName() throws SQLException { 307 try { 308 assertEquals("zoo", rsmd.getTableName(1)); 309 } catch (SQLException e) { 310 fail("SQLException is thrown: " + e.getMessage()); 311 } 312 Statement st1 = null; 313 ResultSet rs1 = null; 314 try { 315 316 String create = "create table hutch (id integer not null, animal_id integer, address char(20), primary key (id));"; 317 String insert1 = "insert into hutch (id, animal_id, address) values (1, 2, 'Birds-house, 1');"; 318 String insert2 = "insert into hutch (id, animal_id, address) values (2, 1, 'Horse-house, 5');"; 319 String query = "select name, animal_id from hutch, zoo where zoo.id = 1" ; 320 st1 = conn.createStatement(); 321 st1.executeUpdate(create); 322 st1.executeUpdate(insert1); 323 st1.executeUpdate(insert2); 324 325 rs1 = st1.executeQuery(query); 326 assertNotNull(rs1); 327 ResultSetMetaData rsmd1 = rs1.getMetaData(); 328 assertEquals("zoo", rsmd1.getTableName(1)); 329 assertEquals("hutch", rsmd1.getTableName(2)); 330 } catch (SQLException e) { 331 fail("SQLException is thrown: " + e.getMessage()); 332 } finally { 333 try { 334 if (rs1 != null) rs1.close(); 335 if (st1 != null) { 336 st1.executeUpdate("drop table if exists hutch"); 337 st1.close(); 338 } 339 } catch (SQLException sqle) { 340 } 341 } 342 //Exception Text 343 try { 344 String name = rsmd.getTableName(0); 345 fail("SQLException Expected"); 346 } catch (SQLException e) { 347 // ok 348 } 349 } 350 351 /** 352 * @test {@link java.sql.ResultSetMetaData#getPrecision(int column)} 353 */ 354 @TestTargetNew( 355 level = TestLevel.SUFFICIENT, 356 notes = "Tests fails: always returns 0, exception tests fail ,failing statements commented out", 357 method = "getPrecision", 358 args = {int.class} 359 ) 360 @KnownFailure("not supported") testGetPrecision()361 public void testGetPrecision() throws SQLException { 362 Statement st2 = null; 363 Statement st3 = null; 364 ResultSetMetaData rsmd2 = null; 365 try { 366 int precisionNum = 10; 367 int scale = 3; 368 int precicisionReal = 10; 369 String createTable = "create table DecimalNumbers ( valueDouble DOUBLE,"+ 370 "valueFloat FLOAT , scaleTest NUMERIC("+precisionNum+","+scale+"),"+ 371 " valueReal REAL("+precicisionReal+") );"; 372 String insert = "insert into DecimalNumbers values (1.5, 20.55, 30.666, 100000);"; 373 String select = "select * from DecimalNumbers;"; 374 st2 = conn.createStatement(); 375 st2.executeUpdate(createTable); 376 st2.executeUpdate(insert); 377 378 st2.close(); 379 380 st3 = conn.createStatement(); 381 rs = st3.executeQuery(select); 382 assertTrue(rs.next()); 383 rsmd2 = rs.getMetaData(); 384 385 assertNotNull(rsmd2); 386 assertEquals(precicisionReal, rsmd2.getPrecision(4)); 387 assertEquals(precisionNum,rsmd2.getPrecision(3)); 388 assertTrue(rsmd2.getPrecision(2) > 0); 389 assertTrue(rsmd2.getPrecision(1) > 0); 390 391 // non numeric field 392 try { 393 rsmd.getPrecision(3); 394 } catch (SQLException e1) { 395 System.out.println("ResultSetMetaDataTest.testGetPrecision()"+e1.getMessage()); 396 e1.printStackTrace(); 397 } 398 399 400 try { 401 rsmd.getPrecision(0); 402 fail("SQLException is not thrown"); 403 } catch (SQLException e) { 404 // expected 405 } 406 try { 407 rsmd.getPrecision(5); 408 fail("SQLException is not thrown"); 409 } catch (SQLException e) { 410 // expected 411 } 412 413 try { 414 rs.close(); 415 rsmd.getPrecision(1); 416 fail("Exception expected"); 417 } catch (SQLException e) { 418 //ok 419 } 420 } finally { 421 if (st2 != null) st2.close(); 422 if (st3 != null) st3.close(); 423 } 424 } 425 426 /** 427 * @test {@link java.sql.ResultSetMetaData#getScale(int column)} 428 */ 429 @TestTargetNew( 430 level = TestLevel.SUFFICIENT, 431 notes = "Tests fail: always returns 0, exception tests fail"+ 432 " no positive test case for black-box test possible: no default"+ 433 " value indicated", 434 method = "getScale", 435 args = {int.class} 436 ) 437 @KnownFailure("Not supported") testGetScale()438 public void testGetScale() throws SQLException { 439 try { 440 int scale = 3; 441 String createTable = "create table DecimalNumbers ( valueDouble DOUBLE,"+ 442 "valueFloat FLOAT , scaleTest NUMERIC(10,"+scale+") );"; 443 String insert = "insert into DecimalNumbers values (1.5, 20.55, 30.666);"; 444 String select = "select * from DecimalNumbers;"; 445 446 Statement st = conn.createStatement(); 447 st.executeUpdate(createTable); 448 st.executeUpdate(insert); 449 450 rs = st.executeQuery(select); 451 ResultSetMetaData rsmd2 = rs.getMetaData(); 452 453 assertNotNull(rsmd2); 454 assertEquals(scale,rsmd2.getScale(3)); 455 assertTrue(rsmd2.getScale(1) > 0); 456 assertTrue(rsmd2.getScale(2) > 0); 457 458 try { 459 rsmd.getScale(0); 460 fail("SQLException is not thrown"); 461 } catch (SQLException e) { 462 // expected 463 } 464 try { 465 rsmd.getScale(5); 466 fail("SQLException is not thrown"); 467 } catch (SQLException e) { 468 // expected 469 } 470 471 472 try { 473 conn.close(); 474 rsmd.getScale(1); 475 fail("Exception expected"); 476 } catch (SQLException e) { 477 //ok 478 } 479 } finally { 480 st.cancel(); 481 } 482 } 483 484 /** 485 * @test {@link java.sql.ResultSetMetaData#getSchemaName(int column)} 486 */ 487 @TestTargetNew( 488 level = TestLevel.COMPLETE, 489 notes = "Tests fail: always returns null. Feature only partially implemented. Missing: positive test.", 490 method = "getSchemaName", 491 args = {int.class} 492 ) 493 @KnownFailure("not supported") testGetSchema()494 public void testGetSchema() { 495 496 try { 497 assertNull("Functionality is now supported. Change test",rsmd.getSchemaName(2)); 498 } catch (SQLException e1) { 499 fail("ResultSetMetaDataTest.testGetScale()"+e1.getMessage()); 500 e1.printStackTrace(); 501 } 502 503 504 505 try { 506 rsmd.getSchemaName(0); 507 fail("SQLException is not thrown"); 508 } catch (SQLException e) { 509 // expected 510 } 511 try { 512 rsmd.getSchemaName(5); 513 fail("SQLException is not thrown"); 514 } catch (SQLException e) { 515 // expected 516 } 517 518 519 try { 520 conn.close(); 521 rsmd.getSchemaName(2); 522 fail("Exception expected"); 523 } catch (SQLException e) { 524 //ok 525 } 526 527 } 528 529 /** 530 * @test {@link java.sql.ResultSetMetaData#isAutoIncrement(int column)} 531 */ 532 @TestTargetNew( 533 level = TestLevel.COMPLETE, 534 notes = "Tests fail: always returns false, failing statements commented out. Feature only partially implemented.Missing: Test positive case", 535 method = "isAutoIncrement", 536 args = {int.class} 537 ) 538 @KnownFailure("not supported") testisAutoIncrement()539 public void testisAutoIncrement() { 540 541 try { 542 assertFalse(rsmd.isAutoIncrement(1)); 543 } catch (SQLException e1) { 544 fail("ResultSetMetaDataTest.testGetScale()"+e1.getMessage()); 545 e1.printStackTrace(); 546 } 547 548 /* 549 // Exception testing 550 551 try { 552 rsmd.isAutoIncrement(0); 553 fail("SQLException is not thrown"); 554 } catch (SQLException e) { 555 // expected 556 } 557 try { 558 rsmd.isAutoIncrement(5); 559 fail("SQLException is not thrown"); 560 } catch (SQLException e) { 561 // expected 562 } 563 */ 564 565 try { 566 conn.close(); 567 rsmd.getSchemaName(2); 568 fail("Exception expected"); 569 } catch (SQLException e) { 570 //ok 571 } 572 573 } 574 575 /** 576 * @test {@link java.sql.ResultSetMetaData#isCaseSensitive(int column)} 577 */ 578 @TestTargetNew( 579 level = TestLevel.SUFFICIENT, 580 notes = "Tests fail: always returns false. Exception tests fail, failing statements commented out. Feature only partially implemented.", 581 method = "isCaseSensitive", 582 args = {int.class} 583 ) 584 @KnownFailure("not supported") testIsCaseSensitive()585 public void testIsCaseSensitive() { 586 587 try { 588 assertFalse(rsmd.isCaseSensitive(1)); 589 assertFalse(rsmd.isCaseSensitive(2)); 590 assertFalse(rsmd.isCaseSensitive(3)); 591 } catch (SQLException e1) { 592 fail("ResultSetMetaDataTest.testGetScale()"+e1.getMessage()); 593 e1.printStackTrace(); 594 } 595 596 /* 597 // Exception testing 598 599 try { 600 rsmd.isCaseSensitive(0); 601 fail("SQLException is not thrown"); 602 } catch (SQLException e) { 603 // expected 604 } 605 try { 606 rsmd.isCaseSensitive(5); 607 fail("SQLException is not thrown"); 608 } catch (SQLException e) { 609 // expected 610 } 611 */ 612 613 try { 614 conn.close(); 615 rsmd.isCaseSensitive(1); 616 fail("Exception expected"); 617 } catch (SQLException e) { 618 //ok 619 } 620 } 621 622 /** 623 * @test {@link java.sql.ResultSetMetaData#isCurrency(int column)} 624 */ 625 @TestTargetNew( 626 level = TestLevel.COMPLETE, 627 notes = "Tests fail: always returns false. Exceptions and tests non Numeric fields fail, failing statements commented out. Feature only partially implemented. May be an optional feature.", 628 method = "isCurrency", 629 args = {int.class} 630 ) 631 @KnownFailure("not supported") testIsCurrency()632 public void testIsCurrency() { 633 634 try { 635 assertFalse(rsmd.isCurrency(1)); 636 } catch (SQLException e1) { 637 fail("ResultSetMetaDataTest.testGetScale()"+e1.getMessage()); 638 e1.printStackTrace(); 639 } 640 641 642 // Exception testing 643 644 try { 645 rsmd.isCurrency(0); 646 fail("SQLException is not thrown"); 647 } catch (SQLException e) { 648 // expected 649 } 650 try { 651 rsmd.isCurrency(5); 652 fail("SQLException is not thrown"); 653 } catch (SQLException e) { 654 // expected 655 } 656 657 658 try { 659 rs.close(); 660 rsmd.isCurrency(1); 661 fail("Exception expected"); 662 } catch (SQLException e) { 663 //ok 664 } 665 } 666 667 /** 668 * @test {@link java.sql.ResultSetMetaData#isDefinitelyWritable(int column)} 669 */ 670 @TestTargetNew( 671 level = TestLevel.SUFFICIENT, 672 notes = "Tests fail: always returns true. Exceptions fail, Feature only partially implemented.", 673 method = "isDefinitelyWritable", 674 args = {int.class} 675 ) 676 @KnownFailure("not supported") testIsDefinitlyWritable()677 public void testIsDefinitlyWritable() { 678 679 try { 680 assertTrue(rsmd.isDefinitelyWritable(1)); 681 } catch (SQLException e1) { 682 fail("ResultSetMetaDataTest.testisDefinitelyWritable()" 683 + e1.getMessage()); 684 e1.printStackTrace(); 685 } 686 687 // Exception testing 688 689 try { 690 rsmd.isDefinitelyWritable(0); 691 fail("SQLException is not thrown"); 692 } catch (SQLException e) { 693 // expected 694 } 695 try { 696 rsmd.isDefinitelyWritable(5); 697 fail("SQLException is not thrown"); 698 } catch (SQLException e) { 699 // expected 700 } 701 } 702 703 /** 704 * @test {@link java.sql.ResultSetMetaData#isNullable(int column)} 705 */ 706 @TestTargetNew( 707 level = TestLevel.SUFFICIENT, 708 notes = "Tests fail: always returns ResultSetMetaData.columnNullableUnknown. Exceptions fail, failing statements commented out. Feature only partially implemented. May be an optional feature.", 709 method = "isNullable", 710 args = {int.class} 711 ) 712 @KnownFailure("not supported") testIsNullable()713 public void testIsNullable() { 714 715 try { 716 assertEquals(ResultSetMetaData.columnNullable, rsmd 717 .isNullable(1)); 718 assertEquals(ResultSetMetaData.columnNullable, rsmd 719 .isNullable(2)); 720 assertEquals(ResultSetMetaData.columnNullable, rsmd 721 .isNullable(3)); 722 } catch (SQLException e1) { 723 fail("ResultSetMetaDataTest.isNullable()" + e1.getMessage()); 724 e1.printStackTrace(); 725 } 726 727 /* 728 // Exception testing 729 730 try { 731 rsmd.isNullable(0); 732 fail("SQLException is not thrown"); 733 } catch (SQLException e) { 734 // expected 735 } 736 try { 737 rsmd.isNullable(5); 738 fail("SQLException is not thrown"); 739 } catch (SQLException e) { 740 // expected 741 } 742 */ 743 744 } 745 746 /** 747 * @test {@link java.sql.ResultSetMetaData#isReadOnly(int column)} 748 */ 749 @TestTargetNew( 750 level = TestLevel.NOT_FEASIBLE, 751 notes = "Cannot know from blackbox test if readonly or writable. Exceptions fail, Feature only partially implemented.", 752 method = "isReadOnly", 753 args = {int.class} 754 ) 755 @KnownFailure("not supported") testIsReadOnly()756 public void testIsReadOnly() { 757 758 try { 759 assertFalse(rsmd.isReadOnly(1)); 760 } catch (SQLException e1) { 761 fail("ResultSetMetaDataTest.isReadOnly" + e1.getMessage()); 762 e1.printStackTrace(); 763 } 764 765 // Exception testing 766 767 try { 768 rsmd.isReadOnly(0); 769 fail("SQLException is not thrown"); 770 } catch (SQLException e) { 771 // expected 772 } 773 } 774 775 /** 776 * @test {@link java.sql.ResultSetMetaData#isSearchable(int column)} 777 */ 778 @TestTargetNew( 779 level = TestLevel.SUFFICIENT, 780 notes = "Tests fail: always returns false. Exceptions fail, Feature only partially implemented. Missing: test for searchable field.", 781 method = "isSearchable", 782 args = {int.class} 783 ) 784 @KnownFailure("not supported") testIsSearchable()785 public void testIsSearchable() { 786 787 try { 788 assertTrue(rsmd.isSearchable(1)); 789 assertTrue(rsmd.isSearchable(2)); 790 assertTrue(rsmd.isSearchable(3)); 791 } catch (SQLException e1) { 792 fail("ResultSetMetaDataTest.isReadOnly" + e1.getMessage()); 793 e1.printStackTrace(); 794 } 795 796 // Exception testing 797 798 try { 799 rsmd.isSearchable(0); 800 fail("SQLException is not thrown"); 801 } catch (SQLException e) { 802 // expected 803 } 804 } 805 806 /** 807 * @test {@link java.sql.ResultSetMetaData#isSigned(int column)} 808 */ 809 @TestTargetNew( 810 level = TestLevel.SUFFICIENT, 811 notes = "Tests fail: always returns false. Exceptions and tests on non numeric fields fail, Feature only partially implemented. Missing: test positive result.", 812 method = "isSigned", 813 args = {int.class} 814 ) 815 @KnownFailure("not supported") testIsSigned()816 public void testIsSigned() { 817 818 try { 819 assertFalse(rsmd.isSigned(1)); 820 } catch (SQLException e1) { 821 fail("ResultSetMetaDataTest.isSigned" + e1.getMessage()); 822 e1.printStackTrace(); 823 } 824 825 // Exception testing 826 827 try { 828 rsmd.isSigned(0); 829 fail("SQLException is not thrown"); 830 } catch (SQLException e) { 831 // expected 832 } 833 } 834 835 /** 836 * @test {@link java.sql.ResultSetMetaData#isWritable(int column)} 837 */ 838 @TestTargetNew( 839 level = TestLevel.NOT_FEASIBLE, 840 notes = "Analaguous to is Readonly. Exceptions and tests on non numeric fields fail, failing statements commented out. Feature only partially implemented.", 841 method = "isWritable", 842 args = {int.class} 843 ) 844 @KnownFailure("not supported") testIsWritable()845 public void testIsWritable() { 846 847 try { 848 assertTrue(rsmd.isWritable(1)); 849 assertTrue(rsmd.isWritable(2)); 850 assertTrue(rsmd.isWritable(3)); 851 } catch (SQLException e1) { 852 fail("ResultSetMetaDataTest.isWritable" + e1.getMessage()); 853 e1.printStackTrace(); 854 } 855 856 // Exception testing 857 858 try { 859 rsmd.isWritable(0); 860 fail("SQLException is not thrown"); 861 } catch (SQLException e) { 862 // expected 863 } 864 } 865 866 867 /** 868 * @test {@link java.sql.ResultSetMetaData#getColumnDisplaySize(int Column)} 869 */ 870 @TestTargetNew( 871 level = TestLevel.SUFFICIENT, 872 notes = "Tests fail. always returns 0. Missing case where display"+ 873 " size greater than 0", 874 method = "getColumnDisplaySize", 875 args = {int.class} 876 ) 877 @KnownFailure("not supported") testGetColumnDisplaySize()878 public void testGetColumnDisplaySize() { 879 try { 880 for (int i = 0; i < rsmd.getColumnCount(); i++) { 881 int size = rsmd.getColumnDisplaySize(i + 1); 882 assertTrue(size > 0); 883 } 884 } catch (SQLException e) { 885 fail("SQLException is thrown: " + e.getMessage()); 886 } 887 888 // Exception testing 889 890 try { 891 rsmd.getColumnDisplaySize(0); 892 fail("SQLException is not thrown"); 893 } catch (SQLException e) { 894 // expected 895 } 896 try { 897 rsmd.getColumnDisplaySize(5); 898 fail("SQLException is not thrown"); 899 } catch (SQLException e) { 900 // expected 901 } 902 } 903 904 } 905