| /* |
| * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| package test.rowset; |
| |
| import java.sql.ResultSetMetaData; |
| import java.sql.SQLException; |
| import java.sql.Types; |
| import javax.sql.RowSetMetaData; |
| import javax.sql.rowset.RowSetMetaDataImpl; |
| import static org.testng.Assert.*; |
| import org.testng.annotations.BeforeMethod; |
| import org.testng.annotations.DataProvider; |
| import org.testng.annotations.Test; |
| import util.BaseTest; |
| |
| public class RowSetMetaDataTests extends BaseTest { |
| |
| // Max columns used in the tests |
| private final int MAX_COLUMNS = 5; |
| // Instance to be used within the tests |
| private RowSetMetaDataImpl rsmd; |
| |
| @BeforeMethod |
| public void setUpMethod() throws Exception { |
| rsmd = new RowSetMetaDataImpl(); |
| rsmd.setColumnCount(MAX_COLUMNS); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test(Integer col) throws Exception { |
| rsmd.getCatalogName(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test01(Integer col) throws Exception { |
| rsmd.getColumnClassName(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test02(Integer col) throws Exception { |
| rsmd.getColumnDisplaySize(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test03(Integer col) throws Exception { |
| rsmd.getColumnLabel(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test04(Integer col) throws Exception { |
| rsmd.getColumnName(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test05(Integer col) throws Exception { |
| rsmd.getColumnType(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test06(Integer col) throws Exception { |
| rsmd.getColumnTypeName(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test07(Integer col) throws Exception { |
| rsmd.getPrecision(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test08(Integer col) throws Exception { |
| rsmd.getScale(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test09(Integer col) throws Exception { |
| rsmd.getSchemaName(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test10(Integer col) throws Exception { |
| rsmd.getTableName(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test11(Integer col) throws Exception { |
| rsmd.isAutoIncrement(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test12(Integer col) throws Exception { |
| rsmd.isCaseSensitive(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test13(Integer col) throws Exception { |
| rsmd.isCurrency(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test14(Integer col) throws Exception { |
| rsmd.isDefinitelyWritable(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test15(Integer col) throws Exception { |
| rsmd.isNullable(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test16(Integer col) throws Exception { |
| rsmd.isReadOnly(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test17(Integer col) throws Exception { |
| rsmd.isSearchable(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test18(Integer col) throws Exception { |
| rsmd.isSigned(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test19(Integer col) throws Exception { |
| rsmd.isWritable(col); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test20(Integer col) throws Exception { |
| rsmd.setAutoIncrement(col, true); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test21(Integer col) throws Exception { |
| rsmd.setCaseSensitive(col, true); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test22(Integer col) throws Exception { |
| rsmd.setCatalogName(col, null); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test23(Integer col) throws Exception { |
| rsmd.setColumnDisplaySize(col, 5); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test24(Integer col) throws Exception { |
| rsmd.setColumnLabel(col, "label"); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test25(Integer col) throws Exception { |
| rsmd.setColumnName(col, "F1"); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test26(Integer col) throws Exception { |
| rsmd.setColumnType(col, Types.CHAR); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test27(Integer col) throws Exception { |
| rsmd.setColumnTypeName(col, "F1"); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test28(Integer col) throws Exception { |
| rsmd.setCurrency(col, true); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test29(Integer col) throws Exception { |
| rsmd.setNullable(col, ResultSetMetaData.columnNoNulls); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test30(Integer col) throws Exception { |
| rsmd.setPrecision(col, 2); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test31(Integer col) throws Exception { |
| rsmd.setScale(col, 2); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test32(Integer col) throws Exception { |
| rsmd.setSchemaName(col, "Gotham"); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test33(Integer col) throws Exception { |
| rsmd.setSearchable(col, false); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test34(Integer col) throws Exception { |
| rsmd.setSigned(col, false); |
| } |
| |
| /* |
| * Validate a SQLException is thrown for an invalid column index |
| */ |
| @Test(dataProvider = "invalidColumnRanges", |
| expectedExceptions = SQLException.class) |
| public void test35(Integer col) throws Exception { |
| rsmd.setTableName(col, "SUPERHEROS"); |
| } |
| |
| /* |
| * Validate that the correct class name is returned for the column |
| * Note: Once setColumnClassName is added to RowSetMetaData, this |
| * method will need to change. |
| */ |
| @Test(dataProvider = "columnClassNames") |
| public void test36(Integer type, String name) throws Exception { |
| rsmd.setColumnType(1, type); |
| assertTrue(rsmd.getColumnClassName(1).equals(name)); |
| } |
| |
| /* |
| * Validate that all of the methods are accessible and the correct value |
| * is returned for each column |
| */ |
| @Test(dataProvider = "columnRanges") |
| public void test37(Integer col) throws Exception { |
| rsmd.setAutoIncrement(col, true); |
| assertTrue(rsmd.isAutoIncrement(col)); |
| rsmd.setCaseSensitive(col, true); |
| assertTrue(rsmd.isCaseSensitive(col)); |
| rsmd.setCatalogName(col, "Gotham"); |
| assertTrue(rsmd.getCatalogName(col).equals("Gotham")); |
| rsmd.setColumnDisplaySize(col, 20); |
| assertTrue(rsmd.getColumnDisplaySize(col) == 20); |
| rsmd.setColumnLabel(col, "F1"); |
| assertTrue(rsmd.getColumnLabel(col).equals("F1")); |
| rsmd.setColumnName(col, "F1"); |
| assertTrue(rsmd.getColumnName(col).equals("F1")); |
| rsmd.setColumnType(col, Types.INTEGER); |
| assertTrue(rsmd.getColumnType(col) == Types.INTEGER); |
| assertTrue(rsmd.getColumnClassName(col).equals(Integer.class.getName())); |
| rsmd.setColumnTypeName(col, "INTEGER"); |
| assertTrue(rsmd.getColumnTypeName(col).equals("INTEGER")); |
| rsmd.setCurrency(col, true); |
| assertTrue(rsmd.isCurrency(col)); |
| rsmd.setNullable(col, ResultSetMetaData.columnNoNulls); |
| assertTrue(rsmd.isNullable(col) == ResultSetMetaData.columnNoNulls); |
| rsmd.setPrecision(col, 2); |
| assertTrue(rsmd.getPrecision(col) == 2); |
| rsmd.setScale(col, 2); |
| assertTrue(rsmd.getScale(col) == 2); |
| rsmd.setSchemaName(col, "GOTHAM"); |
| assertTrue(rsmd.getSchemaName(col).equals("GOTHAM")); |
| rsmd.setSearchable(col, false); |
| assertFalse(rsmd.isSearchable(col)); |
| rsmd.setSigned(col, false); |
| assertFalse(rsmd.isSigned(col)); |
| rsmd.setTableName(col, "SUPERHEROS"); |
| assertTrue(rsmd.getTableName(col).equals("SUPERHEROS")); |
| rsmd.isReadOnly(col); |
| rsmd.isDefinitelyWritable(col); |
| rsmd.isWritable(col); |
| |
| } |
| |
| /* |
| * Validate that the proper values are accepted by setNullable |
| */ |
| @Test(dataProvider = "validSetNullableValues") |
| public void test38(Integer val) throws Exception { |
| rsmd.setNullable(1, val); |
| } |
| |
| /* |
| * Validate that the correct type is returned for the column |
| */ |
| @Test(dataProvider = "jdbcTypes") |
| public void test39(Integer type) throws Exception { |
| rsmd.setColumnType(1, type); |
| assertTrue(type == rsmd.getColumnType(1)); |
| } |
| |
| /* |
| * Validate that the correct value is returned from the isXXX methods |
| */ |
| @Test(dataProvider = "trueFalse") |
| public void test40(Boolean b) throws Exception { |
| rsmd.setAutoIncrement(1, b); |
| rsmd.setCaseSensitive(1, b); |
| rsmd.setCurrency(1, b); |
| rsmd.setSearchable(1, b); |
| rsmd.setSigned(1, b); |
| assertTrue(rsmd.isAutoIncrement(1) == b); |
| assertTrue(rsmd.isCaseSensitive(1) == b); |
| assertTrue(rsmd.isCurrency(1) == b); |
| assertTrue(rsmd.isSearchable(1) == b); |
| assertTrue(rsmd.isSigned(1) == b); |
| } |
| |
| /* |
| * Validate isWrapperFor and unwrap work correctly |
| */ |
| @SuppressWarnings("unchecked") |
| @Test |
| public void test99() throws Exception { |
| RowSetMetaData rsmd1 = rsmd; |
| ResultSetMetaData rsmd2 = rsmd; |
| Class clzz = rsmd.getClass(); |
| assertTrue(rsmd1.isWrapperFor(clzz)); |
| assertTrue(rsmd2.isWrapperFor(clzz)); |
| RowSetMetaDataImpl rsmdi = (RowSetMetaDataImpl) rsmd2.unwrap(clzz); |
| |
| // False should be returned |
| assertFalse(rsmd1.isWrapperFor(this.getClass())); |
| assertFalse(rsmd2.isWrapperFor(this.getClass())); |
| } |
| |
| /* |
| * DataProvider used to provide Date which are not valid and are used |
| * to validate that an IllegalArgumentException will be thrown from the |
| * valueOf method |
| */ |
| @DataProvider(name = "validSetNullableValues") |
| private Object[][] validSetNullableValues() { |
| return new Object[][]{ |
| {ResultSetMetaData.columnNoNulls}, |
| {ResultSetMetaData.columnNullable}, |
| {ResultSetMetaData.columnNullableUnknown} |
| }; |
| } |
| |
| /* |
| * DataProvider used to provide column indexes that are out of range so that |
| * SQLException is thrown |
| */ |
| @DataProvider(name = "invalidColumnRanges") |
| private Object[][] invalidColumnRanges() { |
| return new Object[][]{ |
| {-1}, |
| {0}, |
| {MAX_COLUMNS + 1} |
| }; |
| } |
| |
| /* |
| * DataProvider used to provide the valid column ranges for the |
| * RowSetMetaDataImpl object |
| */ |
| @DataProvider(name = "columnRanges") |
| private Object[][] columnRanges() { |
| Object[][] o = new Object[MAX_COLUMNS][1]; |
| for (int i = 1; i <= MAX_COLUMNS; i++) { |
| o[i - 1][0] = i; |
| } |
| return o; |
| } |
| |
| /* |
| * DataProvider used to specify the value to set via setColumnType and |
| * the expected value to be returned from getColumnClassName |
| */ |
| @DataProvider(name = "columnClassNames") |
| private Object[][] columnClassNames() { |
| return new Object[][]{ |
| {Types.CHAR, "java.lang.String"}, |
| {Types.NCHAR, "java.lang.String"}, |
| {Types.VARCHAR, "java.lang.String"}, |
| {Types.NVARCHAR, "java.lang.String"}, |
| {Types.LONGVARCHAR, "java.lang.String"}, |
| {Types.LONGNVARCHAR, "java.lang.String"}, |
| {Types.NUMERIC, "java.math.BigDecimal"}, |
| {Types.DECIMAL, "java.math.BigDecimal"}, |
| {Types.BIT, "java.lang.Boolean"}, |
| {Types.TINYINT, "java.lang.Byte"}, |
| {Types.SMALLINT, "java.lang.Short"}, |
| {Types.INTEGER, "java.lang.Integer"}, |
| {Types.FLOAT, "java.lang.Double"}, |
| {Types.DOUBLE, "java.lang.Double"}, |
| {Types.BINARY, "byte[]"}, |
| {Types.VARBINARY, "byte[]"}, |
| {Types.LONGVARBINARY, "byte[]"}, |
| {Types.DATE, "java.sql.Date"}, |
| {Types.TIME, "java.sql.Time"}, |
| {Types.TIMESTAMP, "java.sql.Timestamp"}, |
| {Types.CLOB, "java.sql.Clob"}, |
| {Types.BLOB, "java.sql.Blob"} |
| |
| }; |
| |
| } |
| |
| } |