Home | History | Annotate | Download | only in reflect
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 package tests.api.java.lang.reflect;
     19 
     20 import dalvik.annotation.TestTargets;
     21 import dalvik.annotation.TestLevel;
     22 import dalvik.annotation.TestTargetNew;
     23 import dalvik.annotation.TestTargetClass;
     24 import tests.support.Support_Field;
     25 
     26 import java.lang.annotation.Annotation;
     27 import java.lang.annotation.ElementType;
     28 import java.lang.annotation.Inherited;
     29 import java.lang.annotation.Retention;
     30 import java.lang.annotation.RetentionPolicy;
     31 import java.lang.annotation.Target;
     32 import java.lang.reflect.Field;
     33 import java.lang.reflect.Modifier;
     34 import java.lang.reflect.Type;
     35 import java.lang.reflect.TypeVariable;
     36 import java.util.HashSet;
     37 import java.util.Set;
     38 
     39 @TestTargetClass(Field.class)
     40 public class FieldTest extends junit.framework.TestCase {
     41 
     42     // BEGIN android-note
     43     // This test had a couple of bugs in it. Some parts of the code were
     44     // unreachable before. Also some tests expected the wrong excpetions
     45     // to be thrown. This version has been validated to pass on a standard
     46     // JDK 1.5.
     47     // END android-note
     48 
     49     public class TestClass {
     50         @AnnotationRuntime0
     51         @AnnotationRuntime1
     52         @AnnotationClass0
     53         @AnnotationSource0
     54         public int annotatedField;
     55         class Inner{}
     56     }
     57 
     58 
     59     @Retention(RetentionPolicy.RUNTIME)
     60     @Target( {ElementType.FIELD})
     61     static @interface AnnotationRuntime0 {
     62     }
     63 
     64     @Retention(RetentionPolicy.RUNTIME)
     65     @Target( { ElementType.FIELD})
     66     static @interface AnnotationRuntime1 {
     67     }
     68 
     69     @Retention(RetentionPolicy.CLASS)
     70     @Target( { ElementType.FIELD})
     71     static @interface AnnotationClass0 {
     72     }
     73 
     74     @Retention(RetentionPolicy.SOURCE)
     75     @Target( {ElementType.FIELD})
     76     static @interface AnnotationSource0 {
     77     }
     78 
     79     @Inherited
     80     @Retention(RetentionPolicy.RUNTIME)
     81     @Target( {ElementType.FIELD})
     82     static @interface InheritedRuntime {
     83     }
     84 
     85     public class GenericField<S, T extends Number> {
     86         S field;
     87         T boundedField;
     88         int intField;
     89     }
     90 
     91 
     92     static class TestField {
     93         public static int pubfield1;
     94 
     95         private static int privfield1 = 123;
     96 
     97         protected int intField = Integer.MAX_VALUE;
     98         protected final int intFField = Integer.MAX_VALUE;
     99         protected static int intSField = Integer.MAX_VALUE;
    100         private final int intPFField = Integer.MAX_VALUE;
    101 
    102         protected short shortField = Short.MAX_VALUE;
    103         protected final short shortFField = Short.MAX_VALUE;
    104         protected static short shortSField = Short.MAX_VALUE;
    105         private final short shortPFField = Short.MAX_VALUE;
    106 
    107         protected boolean booleanField = true;
    108         protected static boolean booleanSField = true;
    109         protected final boolean booleanFField = true;
    110         private final boolean booleanPFField = true;
    111 
    112         protected byte byteField = Byte.MAX_VALUE;
    113         protected static byte byteSField = Byte.MAX_VALUE;
    114         protected final byte byteFField = Byte.MAX_VALUE;
    115         private final byte bytePFField = Byte.MAX_VALUE;
    116 
    117         protected long longField = Long.MAX_VALUE;
    118         protected final long longFField = Long.MAX_VALUE;
    119         protected static long longSField = Long.MAX_VALUE;
    120         private final long longPFField = Long.MAX_VALUE;
    121 
    122         protected double doubleField = Double.MAX_VALUE;
    123         protected static double doubleSField = Double.MAX_VALUE;
    124         protected static final double doubleSFField = Double.MAX_VALUE;
    125         protected final double doubleFField = Double.MAX_VALUE;
    126         private final double doublePFField = Double.MAX_VALUE;
    127 
    128         protected float floatField = Float.MAX_VALUE;
    129         protected final float floatFField = Float.MAX_VALUE;
    130         protected static float floatSField = Float.MAX_VALUE;
    131         private final float floatPFField = Float.MAX_VALUE;
    132 
    133         protected char charField = 'T';
    134         protected static char charSField = 'T';
    135         private final char charPFField = 'T';
    136 
    137         protected final char charFField = 'T';
    138 
    139         private static final int x = 1;
    140 
    141         public volatile transient int y = 0;
    142 
    143         protected static transient volatile int prsttrvol = 99;
    144     }
    145 
    146     public class TestFieldSub1 extends TestField {
    147     }
    148 
    149     public class TestFieldSub2 extends TestField {
    150     }
    151 
    152     static class A {
    153         protected short shortField = Short.MAX_VALUE;
    154     }
    155 
    156     static enum TestEnum {
    157         A, B, C;
    158         int field;
    159     }
    160 
    161     /**
    162      * @tests java.lang.reflect.Field#equals(java.lang.Object)
    163      */
    164     @TestTargetNew(
    165         level = TestLevel.COMPLETE,
    166         notes = "",
    167         method = "equals",
    168         args = {java.lang.Object.class}
    169     )
    170     public void test_equalsLjava_lang_Object() {
    171         // Test for method boolean
    172         // java.lang.reflect.Field.equals(java.lang.Object)
    173         TestField x = new TestField();
    174         Field f = null;
    175         try {
    176             f = x.getClass().getDeclaredField("shortField");
    177         } catch (Exception e) {
    178             fail("Exception during getType test : " + e.getMessage());
    179         }
    180         try {
    181             assertTrue("Same Field returned false", f.equals(f));
    182             assertTrue("Inherited Field returned false", f.equals(x.getClass()
    183                     .getDeclaredField("shortField")));
    184             assertTrue("Identical Field from different class returned true", !f
    185                     .equals(A.class.getDeclaredField("shortField")));
    186         } catch (Exception e) {
    187             fail("Exception during getType test : " + e.getMessage());
    188         }
    189     }
    190 
    191     /**
    192      * @tests java.lang.reflect.Field#get(java.lang.Object)
    193      */
    194     @TestTargetNew(
    195         level = TestLevel.COMPLETE,
    196         notes = "",
    197         method = "get",
    198         args = {java.lang.Object.class}
    199     )
    200     public void test_getLjava_lang_Object() throws Throwable {
    201         // Test for method java.lang.Object
    202         // java.lang.reflect.Field.get(java.lang.Object)
    203         TestField x = new TestField();
    204         Field f = x.getClass().getDeclaredField("doubleField");
    205         Double val = (Double) f.get(x);
    206 
    207         assertTrue("Returned incorrect double field value",
    208                 val.doubleValue() == Double.MAX_VALUE);
    209         // Test getting a static field;
    210         f = x.getClass().getDeclaredField("doubleSField");
    211         f.set(x, new Double(1.0));
    212         val = (Double) f.get(x);
    213         assertEquals("Returned incorrect double field value", 1.0, val
    214                 .doubleValue());
    215 
    216         // Try a get on a private field
    217         boolean thrown = false;
    218         try {
    219             f = TestAccess.class.getDeclaredField("xxx");
    220             assertNotNull(f);
    221             f.get(null);
    222             fail("No expected IllegalAccessException");
    223         } catch (IllegalAccessException ok) {
    224             thrown = true;
    225         }
    226         assertTrue("IllegalAccessException expected but not thrown", thrown);
    227 
    228         // Try a get on a private field in nested member
    229         // temporarily commented because it breaks J9 VM
    230         // Regression for HARMONY-1309
    231         //f = x.getClass().getDeclaredField("privfield1");
    232         //assertEquals(x.privfield1, f.get(x));
    233 
    234         // Try a get using an invalid class.
    235         thrown = false;
    236         try {
    237             f = x.getClass().getDeclaredField("doubleField");
    238             f.get(new String());
    239             fail("No expected IllegalArgumentException");
    240         } catch (IllegalArgumentException exc) {
    241             // Correct - Passed an Object that does not declare or inherit f
    242             thrown = true;
    243         }
    244         assertTrue("IllegalArgumentException expected but not thrown", thrown);
    245 
    246         //Test NPE
    247         thrown = false;
    248         try {
    249             f = TestField.class.getDeclaredField("intField");
    250             f.get(null);
    251             fail("Expected NullPointerException not thrown");
    252         } catch (NullPointerException exc) {
    253             // Correct - Passed an Object that does not declare or inherit f
    254             thrown = true;
    255         }
    256         assertTrue("NullPointerException expected but not thrown", thrown);
    257 
    258         //Test no NPE on static fields
    259         thrown = false;
    260         try {
    261             f = TestField.class.getDeclaredField("doubleSField");
    262             f.get(null);
    263             assertTrue("Exception thrown", true);
    264         } catch (Exception exc) {
    265             fail("No exception expected");
    266         }
    267     }
    268 
    269     class SupportSubClass extends Support_Field {
    270 
    271         Object getField(char primitiveType, Object o, Field f,
    272                 Class expectedException) {
    273             Object res = null;
    274             try {
    275                 primitiveType = Character.toUpperCase(primitiveType);
    276                 switch (primitiveType) {
    277                 case 'I': // int
    278                     res = new Integer(f.getInt(o));
    279                     break;
    280                 case 'J': // long
    281                     res = new Long(f.getLong(o));
    282                     break;
    283                 case 'Z': // boolean
    284                     res = new Boolean(f.getBoolean(o));
    285                     break;
    286                 case 'S': // short
    287                     res = new Short(f.getShort(o));
    288                     break;
    289                 case 'B': // byte
    290                     res = new Byte(f.getByte(o));
    291                     break;
    292                 case 'C': // char
    293                     res = new Character(f.getChar(o));
    294                     break;
    295                 case 'D': // double
    296                     res = new Double(f.getDouble(o));
    297                     break;
    298                 case 'F': // float
    299                     res = new Float(f.getFloat(o));
    300                     break;
    301                 default:
    302                     res = f.get(o);
    303                 }
    304                 if (expectedException != null) {
    305                     fail("expected exception " + expectedException.getName());
    306                 }
    307             } catch (Exception e) {
    308                 if (expectedException == null) {
    309                     fail("unexpected exception " + e);
    310                 } else {
    311                     assertTrue("expected exception "
    312                             + expectedException.getName() + " and got " + e, e
    313                             .getClass().equals(expectedException));
    314                 }
    315             }
    316             return res;
    317         }
    318 
    319         void setField(char primitiveType, Object o, Field f,
    320                 Class expectedException, Object value) {
    321             try {
    322                 primitiveType = Character.toUpperCase(primitiveType);
    323                 switch (primitiveType) {
    324                 case 'I': // int
    325                     f.setInt(o, ((Integer) value).intValue());
    326                     break;
    327                 case 'J': // long
    328                     f.setLong(o, ((Long) value).longValue());
    329                     break;
    330                 case 'Z': // boolean
    331                     f.setBoolean(o, ((Boolean) value).booleanValue());
    332                     break;
    333                 case 'S': // short
    334                     f.setShort(o, ((Short) value).shortValue());
    335                     break;
    336                 case 'B': // byte
    337                     f.setByte(o, ((Byte) value).byteValue());
    338                     break;
    339                 case 'C': // char
    340                     f.setChar(o, ((Character) value).charValue());
    341                     break;
    342                 case 'D': // double
    343                     f.setDouble(o, ((Double) value).doubleValue());
    344                     break;
    345                 case 'F': // float
    346                     f.setFloat(o, ((Float) value).floatValue());
    347                     break;
    348                 default:
    349                     f.set(o, value);
    350                 }
    351                 if (expectedException != null) {
    352                     fail("expected exception " + expectedException.getName()
    353                             + " for field " + f.getName() + ", value " + value);
    354                 }
    355             } catch (Exception e) {
    356                 if (expectedException == null) {
    357                     fail("unexpected exception " + e + " for field "
    358                             + f.getName() + ", value " + value);
    359                 } else {
    360                     assertTrue("expected exception "
    361                             + expectedException.getName() + " and got " + e
    362                             + " for field " + f.getName() + ", value " + value,
    363                             e.getClass().equals(expectedException));
    364                 }
    365             }
    366         }
    367     }
    368 
    369     /**
    370      * @tests java.lang.reflect.Field#get(java.lang.Object)
    371      * @tests java.lang.reflect.Field#getByte(java.lang.Object)
    372      * @tests java.lang.reflect.Field#getBoolean(java.lang.Object)
    373      * @tests java.lang.reflect.Field#getShort(java.lang.Object)
    374      * @tests java.lang.reflect.Field#getInt(java.lang.Object)
    375      * @tests java.lang.reflect.Field#getLong(java.lang.Object)
    376      * @tests java.lang.reflect.Field#getFloat(java.lang.Object)
    377      * @tests java.lang.reflect.Field#getDouble(java.lang.Object)
    378      * @tests java.lang.reflect.Field#getChar(java.lang.Object)
    379      * @tests java.lang.reflect.Field#set(java.lang.Object, java.lang.Object)
    380      * @tests java.lang.reflect.Field#setByte(java.lang.Object, byte)
    381      * @tests java.lang.reflect.Field#setBoolean(java.lang.Object, boolean)
    382      * @tests java.lang.reflect.Field#setShort(java.lang.Object, short)
    383      * @tests java.lang.reflect.Field#setInt(java.lang.Object, int)
    384      * @tests java.lang.reflect.Field#setLong(java.lang.Object, long)
    385      * @tests java.lang.reflect.Field#setFloat(java.lang.Object, float)
    386      * @tests java.lang.reflect.Field#setDouble(java.lang.Object, double)
    387      * @tests java.lang.reflect.Field#setChar(java.lang.Object, char)
    388      */
    389     @TestTargets({
    390         @TestTargetNew(
    391             level = TestLevel.PARTIAL,
    392             notes = "Stress test.",
    393             method = "get",
    394             args = {java.lang.Object.class}
    395         ),
    396         @TestTargetNew(
    397             level = TestLevel.PARTIAL,
    398             notes = "Stress test.",
    399             method = "getByte",
    400             args = {java.lang.Object.class}
    401         ),
    402         @TestTargetNew(
    403             level = TestLevel.PARTIAL,
    404             notes = "Stress test.",
    405             method = "getBoolean",
    406             args = {java.lang.Object.class}
    407         ),
    408         @TestTargetNew(
    409             level = TestLevel.PARTIAL,
    410             notes = "Stress test.",
    411             method = "getShort",
    412             args = {java.lang.Object.class}
    413         ),
    414         @TestTargetNew(
    415             level = TestLevel.PARTIAL,
    416             notes = "Stress test.",
    417             method = "getInt",
    418             args = {java.lang.Object.class}
    419         ),
    420         @TestTargetNew(
    421             level = TestLevel.PARTIAL,
    422             notes = "Stress test.",
    423             method = "getFloat",
    424             args = {java.lang.Object.class}
    425         ),
    426         @TestTargetNew(
    427             level = TestLevel.PARTIAL,
    428             notes = "Stress test.",
    429             method = "getDouble",
    430             args = {java.lang.Object.class}
    431         ),
    432         @TestTargetNew(
    433             level = TestLevel.PARTIAL,
    434             notes = "Stress test.",
    435             method = "getChar",
    436             args = {java.lang.Object.class}
    437         ),
    438         @TestTargetNew(
    439             level = TestLevel.PARTIAL,
    440             notes = "Stress test.",
    441             method = "set",
    442             args = {java.lang.Object.class, java.lang.Object.class}
    443         ),
    444         @TestTargetNew(
    445             level = TestLevel.PARTIAL,
    446             notes = "Stress test.",
    447             method = "setBoolean",
    448             args = {java.lang.Object.class, boolean.class}
    449         ),
    450         @TestTargetNew(
    451             level = TestLevel.PARTIAL,
    452             notes = "Stress test.",
    453             method = "setByte",
    454             args = {java.lang.Object.class, byte.class}
    455         ),
    456         @TestTargetNew(
    457             level = TestLevel.PARTIAL,
    458             notes = "Stress test.",
    459             method = "setShort",
    460             args = {java.lang.Object.class, short.class}
    461         ),
    462         @TestTargetNew(
    463             level = TestLevel.PARTIAL,
    464             notes = "Stress test.",
    465             method = "setInt",
    466             args = {java.lang.Object.class, int.class}
    467         ),
    468         @TestTargetNew(
    469             level = TestLevel.PARTIAL,
    470             notes = "Stress test.",
    471             method = "setLong",
    472             args = {java.lang.Object.class, long.class}
    473         ),
    474         @TestTargetNew(
    475             level = TestLevel.PARTIAL,
    476             notes = "Stress test.",
    477             method = "setFloat",
    478             args = {java.lang.Object.class, float.class}
    479         ),
    480         @TestTargetNew(
    481             level = TestLevel.PARTIAL,
    482             notes = "Stress test.",
    483             method = "setDouble",
    484             args = {java.lang.Object.class, double.class}
    485         ),
    486         @TestTargetNew(
    487             level = TestLevel.PARTIAL,
    488             notes = "Stress test.",
    489             method = "setChar",
    490             args = {java.lang.Object.class, char.class}
    491         )
    492     })
    493     public void testProtectedFieldAccess() {
    494         Class fieldClass = new Support_Field().getClass();
    495         String fieldName = null;
    496         Field objectField = null;
    497         Field booleanField = null;
    498         Field byteField = null;
    499         Field charField = null;
    500         Field shortField = null;
    501         Field intField = null;
    502         Field longField = null;
    503         Field floatField = null;
    504         Field doubleField = null;
    505         try {
    506             fieldName = "objectField";
    507             objectField = fieldClass.getDeclaredField(fieldName);
    508 
    509             fieldName = "booleanField";
    510             booleanField = fieldClass.getDeclaredField(fieldName);
    511 
    512             fieldName = "byteField";
    513             byteField = fieldClass.getDeclaredField(fieldName);
    514 
    515             fieldName = "charField";
    516             charField = fieldClass.getDeclaredField(fieldName);
    517 
    518             fieldName = "shortField";
    519             shortField = fieldClass.getDeclaredField(fieldName);
    520 
    521             fieldName = "intField";
    522             intField = fieldClass.getDeclaredField(fieldName);
    523 
    524             fieldName = "longField";
    525             longField = fieldClass.getDeclaredField(fieldName);
    526 
    527             fieldName = "floatField";
    528             floatField = fieldClass.getDeclaredField(fieldName);
    529 
    530             fieldName = "doubleField";
    531             doubleField = fieldClass.getDeclaredField(fieldName);
    532         } catch (NoSuchFieldException e) {
    533             fail("missing field " + fieldName + " in test support class "
    534                     + fieldClass.getName());
    535         }
    536 
    537         // create the various objects that might or might not have an instance
    538         // of the field
    539         Support_Field parentClass = new Support_Field();
    540         SupportSubClass subclass = new SupportSubClass();
    541         SupportSubClass otherSubclass = new SupportSubClass();
    542         Object plainObject = new Object();
    543 
    544         Class illegalAccessExceptionClass = new IllegalAccessException()
    545                 .getClass();
    546         Class illegalArgumentExceptionClass = new IllegalArgumentException()
    547                 .getClass();
    548 
    549         // The test will attempt to use pass an object to set for object, byte,
    550         // short, ..., float and double fields
    551         // and pass a byte to to setByte for byte, short, ..., float and double
    552         // fields and so on.
    553         // It will also test if IllegalArgumentException is thrown when the
    554         // field does not exist in the given object and that
    555         // IllegalAccessException is thrown when trying to access an
    556         // inaccessible protected field.
    557         // The test will also check that IllegalArgumentException is thrown for
    558         // all other attempts.
    559 
    560         // Ordered by widening conversion, except for 'L' at the beg (which
    561         // stands for Object).
    562         // If the object provided to set can be unwrapped to a primitive, then
    563         // the set method can set
    564         // primitive fields.
    565         char types[] = { 'L', 'B', 'S', 'C', 'I', 'J', 'F', 'D' };
    566         Field fields[] = { objectField, byteField, shortField, charField,
    567                 intField, longField, floatField, doubleField };
    568         Object values[] = { new Byte((byte) 1), new Byte((byte) 1),
    569                 new Short((short) 1), new Character((char) 1), new Integer(1),
    570                 new Long(1), new Float(1), new Double(1) };
    571 
    572         // test set methods
    573         for (int i = 0; i < types.length; i++) {
    574             char type = types[i];
    575             Object value = values[i];
    576             for (int j = i; j < fields.length; j++) {
    577                 Field field = fields[j];
    578                 fieldName = field.getName();
    579 
    580                 if (field == charField && type != 'C') {
    581                     // the exception is that bytes and shorts CANNOT be
    582                     // converted into chars even though chars CAN be
    583                     // converted into ints, longs, floats and doubles
    584                     subclass.setField(type, subclass, field,
    585                             illegalArgumentExceptionClass, value);
    586                 } else {
    587                     // setting type into field);
    588                     subclass.setField(type, subclass, field, null, value);
    589                     subclass.setField(type, otherSubclass, field, null, value);
    590                     subclass.setField(type, parentClass, field,
    591                             illegalAccessExceptionClass, value);
    592                     subclass.setField(type, plainObject, field,
    593                             // Failed on JDK.
    594                             illegalAccessExceptionClass, value);
    595                 }
    596             }
    597             for (int j = 0; j < i; j++) {
    598                 Field field = fields[j];
    599                 fieldName = field.getName();
    600                 // not setting type into field);
    601                 subclass.setField(type, subclass, field,
    602                         illegalArgumentExceptionClass, value);
    603             }
    604         }
    605 
    606         // test setBoolean
    607         Boolean booleanValue = Boolean.TRUE;
    608         subclass.setField('Z', subclass, booleanField, null, booleanValue);
    609         subclass.setField('Z', otherSubclass, booleanField, null, booleanValue);
    610         subclass.setField('Z', parentClass, booleanField,
    611                 illegalAccessExceptionClass, booleanValue);
    612         subclass.setField('Z', plainObject, booleanField,
    613                 // Failed on JDK
    614                 illegalAccessExceptionClass, booleanValue);
    615         for (int j = 0; j < fields.length; j++) {
    616             Field listedField = fields[j];
    617             fieldName = listedField.getName();
    618             // not setting boolean into listedField
    619             subclass.setField('Z', subclass, listedField,
    620                     illegalArgumentExceptionClass, booleanValue);
    621         }
    622         for (int i = 0; i < types.length; i++) {
    623             char type = types[i];
    624             Object value = values[i];
    625             subclass.setField(type, subclass, booleanField,
    626                     illegalArgumentExceptionClass, value);
    627         }
    628 
    629         // We perform the analagous test on the get methods.
    630 
    631         // ordered by widening conversion, except for 'L' at the end (which
    632         // stands for Object), to which all primitives can be converted by
    633         // wrapping
    634         char newTypes[] = new char[] { 'B', 'S', 'C', 'I', 'J', 'F', 'D', 'L' };
    635         Field newFields[] = { byteField, shortField, charField, intField,
    636                 longField, floatField, doubleField, objectField };
    637         fields = newFields;
    638         types = newTypes;
    639         // test get methods
    640         for (int i = 0; i < types.length; i++) {
    641             char type = types[i];
    642             for (int j = 0; j <= i; j++) {
    643                 Field field = fields[j];
    644                 fieldName = field.getName();
    645                 if (type == 'C' && field != charField) {
    646                     // the exception is that bytes and shorts CANNOT be
    647                     // converted into chars even though chars CAN be
    648                     // converted into ints, longs, floats and doubles
    649                     subclass.getField(type, subclass, field,
    650                             illegalArgumentExceptionClass);
    651                 } else {
    652                     // getting type from field
    653                     subclass.getField(type, subclass, field, null);
    654                     subclass.getField(type, otherSubclass, field, null);
    655                     subclass.getField(type, parentClass, field,
    656                             illegalAccessExceptionClass);
    657                     subclass.getField(type, plainObject, field,
    658                             illegalAccessExceptionClass);
    659                 }
    660             }
    661             for (int j = i + 1; j < fields.length; j++) {
    662                 Field field = fields[j];
    663                 fieldName = field.getName();
    664                 subclass.getField(type, subclass, field,
    665                         illegalArgumentExceptionClass);
    666             }
    667         }
    668 
    669         // test getBoolean
    670         subclass.getField('Z', subclass, booleanField, null);
    671         subclass.getField('Z', otherSubclass, booleanField, null);
    672         subclass.getField('Z', parentClass, booleanField,
    673                 illegalAccessExceptionClass);
    674         subclass.getField('Z', plainObject, booleanField,
    675                 illegalAccessExceptionClass);
    676         for (int j = 0; j < fields.length; j++) {
    677             Field listedField = fields[j];
    678             fieldName = listedField.getName();
    679             // not getting boolean from listedField
    680             subclass.getField('Z', subclass, listedField,
    681                     illegalArgumentExceptionClass);
    682         }
    683         for (int i = 0; i < types.length - 1; i++) {
    684             char type = types[i];
    685             subclass.getField(type, subclass, booleanField,
    686                     illegalArgumentExceptionClass);
    687         }
    688         Object res = subclass.getField('L', subclass, booleanField, null);
    689         assertTrue("unexpected object " + res, res instanceof Boolean);
    690     }
    691 
    692     /**
    693      * @tests java.lang.reflect.Field#getBoolean(java.lang.Object)
    694      */
    695     @TestTargetNew(
    696         level = TestLevel.COMPLETE,
    697         notes = "",
    698         method = "getBoolean",
    699         args = {java.lang.Object.class}
    700     )
    701     public void test_getBooleanLjava_lang_Object() {
    702         TestField x = new TestField();
    703         Field f = null;
    704         boolean val = false;
    705         try {
    706             f = x.getClass().getDeclaredField("booleanField");
    707             val = f.getBoolean(x);
    708         } catch (Exception e) {
    709             fail("Exception during getBoolean test: " + e.toString());
    710         }
    711         assertTrue("Returned incorrect boolean field value", val);
    712 
    713         boolean thrown = false;
    714         try {
    715             f = x.getClass().getDeclaredField("doubleField");
    716             f.getBoolean(x);
    717             fail("IllegalArgumentException expected but not thrown");
    718         } catch (IllegalArgumentException ex) {
    719             thrown = true;
    720         } catch (Exception ex) {
    721             fail("IllegalArgumentException expected but not thrown");
    722         }
    723         assertTrue("IllegalArgumentException expected but not thrown", thrown);
    724 
    725         thrown = false;
    726         try {
    727             f = x.getClass().getDeclaredField("booleanPFField");
    728             f.getBoolean(x);
    729             fail("IllegalAccessException expected but not thrown");
    730         } catch (IllegalAccessException ex) {
    731             thrown = true;
    732         } catch (Exception ex) {
    733             fail("IllegalAccessException expected but not thrown"
    734                     + ex.getMessage());
    735         }
    736         assertTrue("IllegalAccessException expected but not thrown", thrown);
    737 
    738         //Test NPE
    739         thrown = false;
    740         try {
    741             f = x.getClass().getDeclaredField("booleanField");
    742             f.getBoolean(null);
    743             fail("NullPointerException expected but not thrown");
    744         } catch (NullPointerException ex) {
    745             thrown = true;
    746         } catch (Exception ex) {
    747             fail("NullPointerException expected but not thrown");
    748         }
    749         assertTrue("NullPointerException expected but not thrown", thrown);
    750 
    751         //Test no NPE on static field
    752         thrown = false;
    753         try {
    754             f = x.getClass().getDeclaredField("booleanSField");
    755             boolean staticValue = f.getBoolean(null);
    756             assertTrue("Wrong value returned", staticValue);
    757         }  catch (Exception ex) {
    758             fail("No exception expected");
    759         }
    760     }
    761 
    762 
    763     /**
    764      * @tests java.lang.reflect.Field#getByte(java.lang.Object)
    765      */
    766     @TestTargetNew(
    767         level = TestLevel.COMPLETE,
    768         notes = "",
    769         method = "getByte",
    770         args = {java.lang.Object.class}
    771     )
    772     public void test_getByteLjava_lang_Object() {
    773         // Test for method byte
    774         // java.lang.reflect.Field.getByte(java.lang.Object)
    775         TestField x = new TestField();
    776         Field f = null;
    777         byte val = 0;
    778         try {
    779             f = x.getClass().getDeclaredField("byteField");
    780             val = f.getByte(x);
    781         } catch (Exception e) {
    782             fail("Exception during getbyte test : " + e.getMessage());
    783         }
    784         assertTrue("Returned incorrect byte field value", val == Byte.MAX_VALUE);
    785 
    786         boolean thrown = false;
    787         try {
    788             f = x.getClass().getDeclaredField("doubleField");
    789             f.getByte(x);
    790             fail("IllegalArgumentException expected but not thrown");
    791         } catch (IllegalArgumentException ex) {
    792             thrown = true;
    793         } catch (Exception ex) {
    794             fail("IllegalArgumentException expected but not thrown");
    795         }
    796         assertTrue("IllegalArgumentException expected but not thrown", thrown);
    797 
    798         thrown = false;
    799         try {
    800             f = x.getClass().getDeclaredField("bytePFField");
    801             f.getByte(x);
    802             fail("IllegalAccessException expected but not thrown");
    803         } catch (IllegalAccessException ex) {
    804             thrown = true;
    805         } catch (Exception ex) {
    806             fail("IllegalAccessException expected but not thrown"
    807                     + ex.getMessage());
    808         }
    809         assertTrue("IllegalAccessException expected but not thrown", thrown);
    810 
    811         //Test NPE
    812         thrown = false;
    813         try {
    814             f = x.getClass().getDeclaredField("byteField");
    815             f.getByte(null);
    816             fail("NullPointerException expected but not thrown");
    817         } catch (NullPointerException ex) {
    818             thrown = true;
    819         } catch (Exception ex) {
    820             fail("NullPointerException expected but not thrown");
    821         }
    822         assertTrue("NullPointerException expected but not thrown", thrown);
    823 
    824         //Test no NPE on static field
    825         thrown = false;
    826         try {
    827             f = x.getClass().getDeclaredField("byteSField");
    828             byte staticValue = f.getByte(null);
    829             assertEquals("Wrong value returned", Byte.MAX_VALUE, staticValue);
    830         }  catch (Exception ex) {
    831             fail("No exception expected "+ ex.getMessage());
    832         }
    833     }
    834 
    835     /**
    836      * @tests java.lang.reflect.Field#getChar(java.lang.Object)
    837      */
    838     @TestTargetNew(
    839         level = TestLevel.COMPLETE,
    840         notes = "",
    841         method = "getChar",
    842         args = {java.lang.Object.class}
    843     )
    844     public void test_getCharLjava_lang_Object() {
    845         // Test for method char
    846         // java.lang.reflect.Field.getChar(java.lang.Object)
    847         TestField x = new TestField();
    848         Field f = null;
    849         char val = 0;
    850         try {
    851             f = x.getClass().getDeclaredField("charField");
    852             val = f.getChar(x);
    853         } catch (Exception e) {
    854             fail("Exception during getCharacter test: " + e.toString());
    855         }
    856         assertEquals("Returned incorrect char field value", 'T', val);
    857 
    858         boolean thrown = false;
    859         try {
    860             f = x.getClass().getDeclaredField("doubleField");
    861             f.getChar(x);
    862             fail("IllegalArgumentException expected but not thrown");
    863         } catch (IllegalArgumentException ex) {
    864             thrown = true;
    865         } catch (Exception ex) {
    866             fail("IllegalArgumentException expected but not thrown");
    867         }
    868         assertTrue("IllegalArgumentException expected but not thrown", thrown);
    869 
    870         thrown = false;
    871         try {
    872             f = x.getClass().getDeclaredField("charPFField");
    873             f.getChar(x);
    874             fail("IllegalAccessException expected but not thrown");
    875         } catch (IllegalAccessException ex) {
    876             thrown = true;
    877         } catch (Exception ex) {
    878             fail("IllegalAccessException expected but not thrown"
    879                     + ex.getMessage());
    880         }
    881         assertTrue("IllegalAccessException expected but not thrown", thrown);
    882 
    883         //Test NPE
    884         thrown = false;
    885         try {
    886             f = x.getClass().getDeclaredField("charField");
    887             f.getChar(null);
    888             fail("NullPointerException expected but not thrown");
    889         } catch (NullPointerException ex) {
    890             thrown = true;
    891         } catch (Exception ex) {
    892             fail("NullPointerException expected but not thrown");
    893         }
    894         assertTrue("NullPointerException expected but not thrown", thrown);
    895 
    896         //Test no NPE on static field
    897         thrown = false;
    898         try {
    899             f = x.getClass().getDeclaredField("charSField");
    900             char staticValue = f.getChar(null);
    901             assertEquals("Wrong value returned", 'T', staticValue);
    902         }  catch (Exception ex) {
    903             fail("No exception expected "+ ex.getMessage());
    904         }
    905     }
    906 
    907     /**
    908      * @tests java.lang.reflect.Field#getDeclaringClass()
    909      */
    910     @TestTargetNew(
    911         level = TestLevel.COMPLETE,
    912         notes = "",
    913         method = "getDeclaringClass",
    914         args = {}
    915     )
    916     public void test_getDeclaringClass() {
    917         // Test for method java.lang.Class
    918         // java.lang.reflect.Field.getDeclaringClass()
    919         Field[] fields;
    920 
    921         try {
    922             fields = new TestField().getClass().getFields();
    923             assertTrue("Returned incorrect declaring class", fields[0]
    924                     .getDeclaringClass().equals(new TestField().getClass()));
    925 
    926             // Check the case where the field is inherited to be sure the parent
    927             // is returned as the declarator
    928             fields = new TestFieldSub1().getClass().getFields();
    929             assertTrue("Returned incorrect declaring class", fields[0]
    930                     .getDeclaringClass().equals(new TestField().getClass()));
    931         } catch (Exception e) {
    932             fail("Exception : " + e.getMessage());
    933         }
    934     }
    935 
    936     /**
    937      * @tests java.lang.reflect.Field#getDouble(java.lang.Object)
    938      */
    939     @TestTargetNew(
    940         level = TestLevel.COMPLETE,
    941         notes = "",
    942         method = "getDouble",
    943         args = {java.lang.Object.class}
    944     )
    945     public void test_getDoubleLjava_lang_Object() {
    946         // Test for method double
    947         // java.lang.reflect.Field.getDouble(java.lang.Object)
    948         TestField x = new TestField();
    949         Field f = null;
    950         double val = 0.0;
    951         try {
    952             f = x.getClass().getDeclaredField("doubleField");
    953             val = f.getDouble(x);
    954         } catch (Exception e) {
    955             fail("Exception during getDouble test: " + e.toString());
    956         }
    957         assertTrue("Returned incorrect double field value",
    958                 val == Double.MAX_VALUE);
    959 
    960         boolean thrown = false;
    961         try {
    962             f = x.getClass().getDeclaredField("booleanField");
    963             f.getDouble(x);
    964             fail("IllegalArgumentException expected but not thrown");
    965         } catch (IllegalArgumentException ex) {
    966             thrown = true;
    967         } catch (Exception ex) {
    968             fail("IllegalArgumentException expected but not thrown "
    969                     + ex.getMessage());
    970         }
    971         assertTrue("IllegalArgumentException expected but not thrown", thrown);
    972 
    973         thrown = false;
    974         try {
    975             f = x.getClass().getDeclaredField("doublePFField");
    976             f.getDouble(x);
    977             fail("IllegalAccessException expected but not thrown");
    978         } catch (IllegalAccessException ex) {
    979             thrown = true;
    980         } catch (Exception ex) {
    981             fail("IllegalAccessException expected but not thrown"
    982                     + ex.getMessage());
    983         }
    984         assertTrue("IllegalAccessException expected but not thrown", thrown);
    985 
    986         //Test NPE
    987         thrown = false;
    988         try {
    989             f = x.getClass().getDeclaredField("doubleField");
    990             f.getDouble(null);
    991             fail("NullPointerException expected but not thrown");
    992         } catch (NullPointerException ex) {
    993             thrown = true;
    994         } catch (Exception ex) {
    995             fail("NullPointerException expected but not thrown");
    996         }
    997         assertTrue("NullPointerException expected but not thrown", thrown);
    998 
    999         //Test no NPE on static field
   1000         thrown = false;
   1001         try {
   1002             f = x.getClass().getDeclaredField("doubleSFField");
   1003             double staticValue = f.getDouble(null);
   1004             assertEquals("Wrong value returned", Double.MAX_VALUE, staticValue);
   1005         }  catch (Exception ex) {
   1006             fail("No exception expected "+ ex.getMessage());
   1007         }
   1008     }
   1009 
   1010     /**
   1011      * @tests java.lang.reflect.Field#getFloat(java.lang.Object)
   1012      */
   1013     @TestTargetNew(
   1014         level = TestLevel.COMPLETE,
   1015         notes = "",
   1016         method = "getFloat",
   1017         args = {java.lang.Object.class}
   1018     )
   1019     public void test_getFloatLjava_lang_Object() {
   1020         // Test for method float
   1021         // java.lang.reflect.Field.getFloat(java.lang.Object)
   1022         TestField x = new TestField();
   1023         Field f = null;
   1024         float val = 0;
   1025         try {
   1026             f = x.getClass().getDeclaredField("floatField");
   1027             val = f.getFloat(x);
   1028         } catch (Exception e) {
   1029             fail("Exception during getFloat test : " + e.getMessage());
   1030         }
   1031         assertTrue("Returned incorrect float field value",
   1032                 val == Float.MAX_VALUE);
   1033 
   1034         boolean thrown = false;
   1035         try {
   1036             f = x.getClass().getDeclaredField("booleanField");
   1037             f.getFloat(x);
   1038             fail("IllegalArgumentException expected but not thrown");
   1039         } catch (IllegalArgumentException ex) {
   1040             thrown = true;
   1041         } catch (Exception ex) {
   1042             fail("IllegalArgumentException expected but not thrown "
   1043                     + ex.getMessage());
   1044         }
   1045         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1046 
   1047         thrown = false;
   1048         try {
   1049             f = x.getClass().getDeclaredField("floatPFField");
   1050             f.getFloat(x);
   1051             fail("IllegalAccessException expected but not thrown");
   1052         } catch (IllegalAccessException ex) {
   1053             thrown = true;
   1054         } catch (Exception ex) {
   1055             fail("IllegalAccessException expected but not thrown"
   1056                     + ex.getMessage());
   1057         }
   1058         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1059 
   1060         //Test NPE
   1061         thrown = false;
   1062         try {
   1063             f = x.getClass().getDeclaredField("floatField");
   1064             f.getFloat(null);
   1065             fail("NullPointerException expected but not thrown");
   1066         } catch (NullPointerException ex) {
   1067             thrown = true;
   1068         } catch (Exception ex) {
   1069             fail("NullPointerException expected but not thrown");
   1070         }
   1071         assertTrue("NullPointerException expected but not thrown", thrown);
   1072 
   1073         //Test no NPE on static field
   1074         thrown = false;
   1075         try {
   1076             f = x.getClass().getDeclaredField("floatSField");
   1077             float staticValue = f.getFloat(null);
   1078             assertEquals("Wrong value returned", Float.MAX_VALUE, staticValue);
   1079         }  catch (Exception ex) {
   1080             fail("No exception expected "+ ex.getMessage());
   1081         }
   1082     }
   1083 
   1084     /**
   1085      * @tests java.lang.reflect.Field#getInt(java.lang.Object)
   1086      */
   1087     @TestTargetNew(
   1088         level = TestLevel.COMPLETE,
   1089         notes = "",
   1090         method = "getInt",
   1091         args = {java.lang.Object.class}
   1092     )
   1093     public void test_getIntLjava_lang_Object() {
   1094         // Test for method int java.lang.reflect.Field.getInt(java.lang.Object)
   1095         TestField x = new TestField();
   1096         Field f = null;
   1097         int val = 0;
   1098         try {
   1099             f = x.getClass().getDeclaredField("intField");
   1100             val = f.getInt(x);
   1101         } catch (Exception e) {
   1102             fail("Exception during getInt test : " + e.getMessage());
   1103         }
   1104         assertTrue("Returned incorrect Int field value",
   1105                 val == Integer.MAX_VALUE);
   1106 
   1107         boolean thrown = false;
   1108         try {
   1109             f = x.getClass().getDeclaredField("booleanField");
   1110             f.getInt(x);
   1111             fail("IllegalArgumentException expected but not thrown");
   1112         } catch (IllegalArgumentException ex) {
   1113             thrown = true;
   1114         } catch (Exception ex) {
   1115             fail("IllegalArgumentException expected but not thrown "
   1116                     + ex.getMessage());
   1117         }
   1118         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1119 
   1120         thrown = false;
   1121         try {
   1122             f = x.getClass().getDeclaredField("intPFField");
   1123             f.getInt(x);
   1124             fail("IllegalAccessException expected but not thrown");
   1125         } catch (IllegalAccessException ex) {
   1126             thrown = true;
   1127         } catch (Exception ex) {
   1128             fail("IllegalAccessException expected but not thrown"
   1129                     + ex.getMessage());
   1130         }
   1131         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1132 
   1133         //Test NPE
   1134         thrown = false;
   1135         try {
   1136             f = x.getClass().getDeclaredField("intField");
   1137             f.getInt(null);
   1138             fail("NullPointerException expected but not thrown");
   1139         } catch (NullPointerException ex) {
   1140             thrown = true;
   1141         } catch (Exception ex) {
   1142             fail("NullPointerException expected but not thrown");
   1143         }
   1144         assertTrue("NullPointerException expected but not thrown", thrown);
   1145 
   1146         //Test no NPE on static field
   1147         thrown = false;
   1148         try {
   1149             f = x.getClass().getDeclaredField("intSField");
   1150             int staticValue = f.getInt(null);
   1151             assertEquals("Wrong value returned", Integer.MAX_VALUE, staticValue);
   1152         } catch (Exception ex) {
   1153             fail("No exception expected " + ex.getMessage());
   1154         }
   1155 
   1156     }
   1157 
   1158     /**
   1159      * @tests java.lang.reflect.Field#getLong(java.lang.Object)
   1160      */
   1161     @TestTargetNew(
   1162         level = TestLevel.COMPLETE,
   1163         notes = "",
   1164         method = "getLong",
   1165         args = {java.lang.Object.class}
   1166     )
   1167     public void test_getLongLjava_lang_Object() {
   1168         // Test for method long
   1169         // java.lang.reflect.Field.getLong(java.lang.Object)
   1170         TestField x = new TestField();
   1171         Field f = null;
   1172         long val = 0;
   1173         try {
   1174             f = x.getClass().getDeclaredField("longField");
   1175             val = f.getLong(x);
   1176         } catch (Exception e) {
   1177             fail("Exception during getLong test : " + e.getMessage());
   1178         }
   1179 
   1180         boolean thrown = false;
   1181         try {
   1182             f = x.getClass().getDeclaredField("booleanField");
   1183             f.getLong(x);
   1184             fail("IllegalArgumentException expected but not thrown");
   1185         } catch (IllegalArgumentException ex) {
   1186             thrown = true;
   1187         } catch (Exception ex) {
   1188             fail("IllegalArgumentException expected but not thrown "
   1189                     + ex.getMessage());
   1190         }
   1191         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1192 
   1193         thrown = false;
   1194         try {
   1195             f = x.getClass().getDeclaredField("longPFField");
   1196             f.getLong(x);
   1197             fail("IllegalAccessException expected but not thrown");
   1198         } catch (IllegalAccessException ex) {
   1199             thrown = true;
   1200         } catch (Exception ex) {
   1201             fail("IllegalAccessException expected but not thrown"
   1202                     + ex.getMessage());
   1203         }
   1204         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1205 
   1206         //Test NPE
   1207         thrown = false;
   1208         try {
   1209             f = x.getClass().getDeclaredField("longField");
   1210             f.getLong(null);
   1211             fail("NullPointerException expected but not thrown");
   1212         } catch (NullPointerException ex) {
   1213             thrown = true;
   1214         } catch (Exception ex) {
   1215             fail("NullPointerException expected but not thrown");
   1216         }
   1217         assertTrue("NullPointerException expected but not thrown", thrown);
   1218 
   1219         //Test no NPE on static field
   1220         thrown = false;
   1221         try {
   1222             f = x.getClass().getDeclaredField("longSField");
   1223             long staticValue = f.getLong(null);
   1224             assertEquals("Wrong value returned", Long.MAX_VALUE, staticValue);
   1225         }  catch (Exception ex) {
   1226             fail("No exception expected "+ ex.getMessage());
   1227         }
   1228     }
   1229 
   1230     /**
   1231      * @tests java.lang.reflect.Field#getModifiers()
   1232      */
   1233     @TestTargetNew(
   1234         level = TestLevel.COMPLETE,
   1235         notes = "",
   1236         method = "getModifiers",
   1237         args = {}
   1238     )
   1239     public void test_getModifiers() {
   1240         // Test for method int java.lang.reflect.Field.getModifiers()
   1241         TestField x = new TestField();
   1242         Field f = null;
   1243         try {
   1244             f = x.getClass().getDeclaredField("prsttrvol");
   1245         } catch (Exception e) {
   1246             fail("Exception during getModifiers test: " + e.toString());
   1247         }
   1248         int mod = f.getModifiers();
   1249         int mask = (Modifier.PROTECTED | Modifier.STATIC)
   1250                 | (Modifier.TRANSIENT | Modifier.VOLATILE);
   1251         int nmask = (Modifier.PUBLIC | Modifier.NATIVE);
   1252         assertTrue("Returned incorrect field modifiers: ",
   1253                 ((mod & mask) == mask) && ((mod & nmask) == 0));
   1254     }
   1255 
   1256     /**
   1257      * @tests java.lang.reflect.Field#getName()
   1258      */
   1259     @TestTargetNew(
   1260         level = TestLevel.COMPLETE,
   1261         notes = "",
   1262         method = "getName",
   1263         args = {}
   1264     )
   1265     public void test_getName() {
   1266         // Test for method java.lang.String java.lang.reflect.Field.getName()
   1267         TestField x = new TestField();
   1268         Field f = null;
   1269         try {
   1270             f = x.getClass().getDeclaredField("shortField");
   1271         } catch (Exception e) {
   1272             fail("Exception during getType test : " + e.getMessage());
   1273         }
   1274         assertEquals("Returned incorrect field name",
   1275                 "shortField", f.getName());
   1276     }
   1277 
   1278     /**
   1279      * @tests java.lang.reflect.Field#getShort(java.lang.Object)
   1280      */
   1281     @TestTargetNew(
   1282         level = TestLevel.COMPLETE,
   1283         notes = "",
   1284         method = "getShort",
   1285         args = {java.lang.Object.class}
   1286     )
   1287     public void test_getShortLjava_lang_Object() {
   1288         // Test for method short
   1289         // java.lang.reflect.Field.getShort(java.lang.Object)
   1290         TestField x = new TestField();
   1291         Field f = null;
   1292         short val = 0;
   1293         ;
   1294         try {
   1295             f = x.getClass().getDeclaredField("shortField");
   1296             val = f.getShort(x);
   1297         } catch (Exception e) {
   1298             fail("Exception during getShort test : " + e.getMessage());
   1299         }
   1300         assertTrue("Returned incorrect short field value",
   1301                 val == Short.MAX_VALUE);
   1302 
   1303         boolean thrown = false;
   1304         try {
   1305             f = x.getClass().getDeclaredField("booleanField");
   1306             f.getShort(x);
   1307             fail("IllegalArgumentException expected but not thrown");
   1308         } catch (IllegalArgumentException ex) {
   1309             thrown = true;
   1310         } catch (Exception ex) {
   1311             fail("IllegalArgumentException expected but not thrown "
   1312                     + ex.getMessage());
   1313         }
   1314         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1315 
   1316         thrown = false;
   1317         try {
   1318             f = x.getClass().getDeclaredField("shortPFField");
   1319             f.getShort(x);
   1320             fail("IllegalAccessException expected but not thrown");
   1321         } catch (IllegalAccessException ex) {
   1322             thrown = true;
   1323         } catch (Exception ex) {
   1324             fail("IllegalAccessException expected but not thrown"
   1325                     + ex.getMessage());
   1326         }
   1327         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1328 
   1329         //Test NPE
   1330         thrown = false;
   1331         try {
   1332             f = x.getClass().getDeclaredField("shortField");
   1333             f.getShort(null);
   1334             fail("NullPointerException expected but not thrown");
   1335         } catch (NullPointerException ex) {
   1336             thrown = true;
   1337         } catch (Exception ex) {
   1338             fail("NullPointerException expected but not thrown");
   1339         }
   1340         assertTrue("NullPointerException expected but not thrown", thrown);
   1341 
   1342         //Test no NPE on static field
   1343         thrown = false;
   1344         try {
   1345             f = x.getClass().getDeclaredField("shortSField");
   1346             short staticValue = f.getShort(null);
   1347             assertEquals("Wrong value returned", Short.MAX_VALUE, staticValue);
   1348         }  catch (Exception ex) {
   1349             fail("No exception expected "+ ex.getMessage());
   1350         }
   1351     }
   1352 
   1353     /**
   1354      * @tests java.lang.reflect.Field#getType()
   1355      */
   1356     @TestTargetNew(
   1357         level = TestLevel.COMPLETE,
   1358         notes = "",
   1359         method = "getType",
   1360         args = {}
   1361     )
   1362     public void test_getType() {
   1363         // Test for method java.lang.Class java.lang.reflect.Field.getType()
   1364         TestField x = new TestField();
   1365         Field f = null;
   1366         try {
   1367             f = x.getClass().getDeclaredField("shortField");
   1368         } catch (Exception e) {
   1369             fail("Exception during getType test : " + e.getMessage());
   1370         }
   1371         assertTrue("Returned incorrect field type: " + f.getType().toString(),
   1372                 f.getType().equals(short.class));
   1373     }
   1374 
   1375     /**
   1376      * @tests java.lang.reflect.Field#set(java.lang.Object, java.lang.Object)
   1377      */
   1378     @TestTargetNew(
   1379         level = TestLevel.COMPLETE,
   1380         notes = "",
   1381         method = "set",
   1382         args = {java.lang.Object.class, java.lang.Object.class}
   1383     )
   1384     public void test_setLjava_lang_ObjectLjava_lang_Object() throws Exception{
   1385         // Test for method void java.lang.reflect.Field.set(java.lang.Object,
   1386         // java.lang.Object)
   1387         TestField x = new TestField();
   1388         Field f = null;
   1389         double val = 0.0;
   1390         try {
   1391             f = x.getClass().getDeclaredField("doubleField");
   1392             f.set(x, new Double(1.0));
   1393             val = f.getDouble(x);
   1394         } catch (Exception e) {
   1395             fail("Exception during set test : " + e.getMessage());
   1396         }
   1397         assertEquals("Returned incorrect double field value", 1.0, val);
   1398 
   1399         //test wrong type
   1400         boolean thrown = false;
   1401         try {
   1402             f = x.getClass().getDeclaredField("booleanField");
   1403             f.set(x, new Double(1.0));
   1404             fail("Accessed field of invalid type");
   1405         } catch (IllegalArgumentException ex) {
   1406             thrown = true;
   1407         }
   1408         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1409 
   1410         //test not accessible
   1411         thrown = false;
   1412         try {
   1413             f = x.getClass().getDeclaredField("doubleFField");
   1414             assertFalse(f.isAccessible());
   1415             f.set(x, new Double(1.0));
   1416             fail("Accessed inaccessible field");
   1417         } catch (IllegalAccessException ex) {
   1418             thrown = true;
   1419         }
   1420         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1421 
   1422       //Test NPE
   1423         thrown = false;
   1424         try {
   1425             f = x.getClass().getDeclaredField("booleanField");
   1426             f.set(null, true);
   1427             fail("NullPointerException expected but not thrown");
   1428         } catch (NullPointerException ex) {
   1429             thrown = true;
   1430         } catch (Exception ex) {
   1431             fail("NullPointerException expected but not thrown");
   1432         }
   1433         assertTrue("NullPointerException expected but not thrown", thrown);
   1434 
   1435         // Test setting a static field;
   1436         f = x.getClass().getDeclaredField("doubleSField");
   1437         f.set(null, new Double(1.0));
   1438         val = f.getDouble(x);
   1439         assertEquals("Returned incorrect double field value", 1.0, val);
   1440     }
   1441 
   1442     /**
   1443      * @tests java.lang.reflect.Field#setBoolean(java.lang.Object, boolean)
   1444      */
   1445     @TestTargetNew(
   1446         level = TestLevel.COMPLETE,
   1447         notes = "",
   1448         method = "setBoolean",
   1449         args = {java.lang.Object.class, boolean.class}
   1450     )
   1451     public void test_setBooleanLjava_lang_ObjectZ() throws Exception{
   1452         // Test for method void
   1453         // java.lang.reflect.Field.setBoolean(java.lang.Object, boolean)
   1454         TestField x = new TestField();
   1455         Field f = null;
   1456         boolean val = false;
   1457         try {
   1458             f = x.getClass().getDeclaredField("booleanField");
   1459             f.setBoolean(x, false);
   1460             val = f.getBoolean(x);
   1461         } catch (Exception e) {
   1462             fail("Exception during setboolean test: " + e.toString());
   1463         }
   1464         assertTrue("Returned incorrect float field value", !val);
   1465 
   1466       //test wrong type
   1467         boolean thrown = false;
   1468         try {
   1469             f = x.getClass().getDeclaredField("doubleField");
   1470             f.setBoolean(x, false);
   1471             fail("Accessed field of invalid type");
   1472         } catch (IllegalArgumentException ex) {
   1473             thrown = true;
   1474         }
   1475         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1476 
   1477         //test not accessible
   1478         thrown = false;
   1479         try {
   1480             f = x.getClass().getDeclaredField("booleanPFField");
   1481             assertFalse(f.isAccessible());
   1482             f.setBoolean(x, true);
   1483             fail("Accessed inaccessible field");
   1484         } catch (IllegalAccessException ex) {
   1485             thrown = true;
   1486         }
   1487         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1488 
   1489       //Test NPE
   1490         thrown = false;
   1491         try {
   1492             f = x.getClass().getDeclaredField("booleanField");
   1493             f.setBoolean(null, true);
   1494             fail("NullPointerException expected but not thrown");
   1495         } catch (NullPointerException ex) {
   1496             thrown = true;
   1497         } catch (Exception ex) {
   1498             fail("NullPointerException expected but not thrown");
   1499         }
   1500         assertTrue("NullPointerException expected but not thrown", thrown);
   1501 
   1502         // Test setting a static field;
   1503         f = x.getClass().getDeclaredField("booleanSField");
   1504         f.setBoolean(null, false);
   1505         val = f.getBoolean(x);
   1506         assertFalse("Returned incorrect boolean field value", val);
   1507     }
   1508 
   1509     /**
   1510      * @tests java.lang.reflect.Field#setByte(java.lang.Object, byte)
   1511      */
   1512     @TestTargetNew(
   1513         level = TestLevel.COMPLETE,
   1514         notes = "",
   1515         method = "setByte",
   1516         args = {java.lang.Object.class, byte.class}
   1517     )
   1518     public void test_setByteLjava_lang_ObjectB() throws Exception{
   1519         // Test for method void
   1520         // java.lang.reflect.Field.setByte(java.lang.Object, byte)
   1521         TestField x = new TestField();
   1522         Field f = null;
   1523         byte val = 0;
   1524         try {
   1525             f = x.getClass().getDeclaredField("byteField");
   1526             f.setByte(x, (byte) 1);
   1527             val = f.getByte(x);
   1528         } catch (Exception e) {
   1529             fail("Exception during setByte test : " + e.getMessage());
   1530         }
   1531         assertEquals("Returned incorrect float field value", 1, val);
   1532 
   1533         //test wrong type
   1534         boolean thrown = false;
   1535         try {
   1536             f = x.getClass().getDeclaredField("booleanField");
   1537             f.setByte(x, Byte.MIN_VALUE);
   1538             fail("Accessed field of invalid type");
   1539         } catch (IllegalArgumentException ex) {
   1540             thrown = true;
   1541         }
   1542         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1543 
   1544         //test not accessible
   1545         thrown = false;
   1546         try {
   1547             f = x.getClass().getDeclaredField("bytePFField");
   1548             assertFalse(f.isAccessible());
   1549             f.setByte(x, Byte.MIN_VALUE);
   1550             fail("Accessed inaccessible field");
   1551         } catch (IllegalAccessException ex) {
   1552             thrown = true;
   1553         }
   1554         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1555 
   1556       //Test NPE
   1557         thrown = false;
   1558         try {
   1559             f = x.getClass().getDeclaredField("byteField");
   1560             f.setByte(null, Byte.MIN_VALUE);
   1561             fail("NullPointerException expected but not thrown");
   1562         } catch (NullPointerException ex) {
   1563             thrown = true;
   1564         } catch (Exception ex) {
   1565             fail("NullPointerException expected but not thrown");
   1566         }
   1567         assertTrue("NullPointerException expected but not thrown", thrown);
   1568 
   1569         // Test setting a static field;
   1570         f = x.getClass().getDeclaredField("byteSField");
   1571         f.setByte(null, Byte.MIN_VALUE);
   1572         val = f.getByte(x);
   1573         assertEquals("Returned incorrect byte field value", Byte.MIN_VALUE,
   1574                 val);
   1575     }
   1576 
   1577     /**
   1578      * @tests java.lang.reflect.Field#setChar(java.lang.Object, char)
   1579      */
   1580     @TestTargetNew(
   1581         level = TestLevel.COMPLETE,
   1582         notes = "",
   1583         method = "setChar",
   1584         args = {java.lang.Object.class, char.class}
   1585     )
   1586     public void test_setCharLjava_lang_ObjectC() throws Exception{
   1587         // Test for method void
   1588         // java.lang.reflect.Field.setChar(java.lang.Object, char)
   1589         TestField x = new TestField();
   1590         Field f = null;
   1591         char val = 0;
   1592         try {
   1593             f = x.getClass().getDeclaredField("charField");
   1594             f.setChar(x, (char) 1);
   1595             val = f.getChar(x);
   1596         } catch (Exception e) {
   1597             fail("Exception during setChar test : " + e.getMessage());
   1598         }
   1599         assertEquals("Returned incorrect float field value", 1, val);
   1600 
   1601       //test wrong type
   1602         boolean thrown = false;
   1603         try {
   1604             f = x.getClass().getDeclaredField("booleanField");
   1605             f.setChar(x, Character.MIN_VALUE);
   1606             fail("Accessed field of invalid type");
   1607         } catch (IllegalArgumentException ex) {
   1608             thrown = true;
   1609         }
   1610         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1611 
   1612         //test not accessible
   1613         thrown = false;
   1614         try {
   1615             f = x.getClass().getDeclaredField("charPFField");
   1616             assertFalse(f.isAccessible());
   1617             f.setChar(x, Character.MIN_VALUE);
   1618             fail("Accessed inaccessible field");
   1619         } catch (IllegalAccessException ex) {
   1620             thrown = true;
   1621         }
   1622         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1623 
   1624       //Test NPE
   1625         thrown = false;
   1626         try {
   1627             f = x.getClass().getDeclaredField("charField");
   1628             f.setChar(null, Character.MIN_VALUE);
   1629             fail("NullPointerException expected but not thrown");
   1630         } catch (NullPointerException ex) {
   1631             thrown = true;
   1632         } catch (Exception ex) {
   1633             fail("NullPointerException expected but not thrown");
   1634         }
   1635         assertTrue("NullPointerException expected but not thrown", thrown);
   1636 
   1637         // Test setting a static field;
   1638         f = x.getClass().getDeclaredField("charSField");
   1639         f.setChar(null, Character.MIN_VALUE);
   1640         val = f.getChar(x);
   1641         assertEquals("Returned incorrect char field value",
   1642                 Character.MIN_VALUE, val);
   1643     }
   1644 
   1645     /**
   1646      * @tests java.lang.reflect.Field#setDouble(java.lang.Object, double)
   1647      */
   1648     @TestTargetNew(
   1649         level = TestLevel.COMPLETE,
   1650         notes = "",
   1651         method = "setDouble",
   1652         args = {java.lang.Object.class, double.class}
   1653     )
   1654     public void test_setDoubleLjava_lang_ObjectD() throws Exception{
   1655         // Test for method void
   1656         // java.lang.reflect.Field.setDouble(java.lang.Object, double)
   1657         TestField x = new TestField();
   1658         Field f = null;
   1659         double val = 0.0;
   1660         try {
   1661             f = x.getClass().getDeclaredField("doubleField");
   1662             f.setDouble(x, Double.MIN_VALUE);
   1663             val = f.getDouble(x);
   1664         } catch (Exception e) {
   1665             fail("Exception during setDouble test: " + e.toString());
   1666         }
   1667         assertEquals("Returned incorrect double field value", Double.MIN_VALUE,
   1668                 val);
   1669 
   1670       //test wrong type
   1671         boolean thrown = false;
   1672         try {
   1673             f = x.getClass().getDeclaredField("booleanField");
   1674             f.setDouble(x, Double.MIN_VALUE);
   1675             fail("Accessed field of invalid type");
   1676         } catch (IllegalArgumentException ex) {
   1677             thrown = true;
   1678         }
   1679         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1680 
   1681         //test not accessible
   1682         thrown = false;
   1683         try {
   1684             f = x.getClass().getDeclaredField("doublePFField");
   1685             assertFalse(f.isAccessible());
   1686             f.setDouble(x, Double.MIN_VALUE);
   1687             fail("Accessed inaccessible field");
   1688         } catch (IllegalAccessException ex) {
   1689             thrown = true;
   1690         }
   1691         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1692 
   1693       //Test NPE
   1694         thrown = false;
   1695         try {
   1696             f = x.getClass().getDeclaredField("doubleField");
   1697             f.setDouble(null, Double.MIN_VALUE);
   1698             fail("NullPointerException expected but not thrown");
   1699         } catch (NullPointerException ex) {
   1700             thrown = true;
   1701         } catch (Exception ex) {
   1702             fail("NullPointerException expected but not thrown");
   1703         }
   1704         assertTrue("NullPointerException expected but not thrown", thrown);
   1705 
   1706         // Test setting a static field;
   1707         f = x.getClass().getDeclaredField("doubleSField");
   1708         f.setDouble(null, Double.MIN_VALUE);
   1709         val = f.getDouble(x);
   1710         assertEquals("Returned incorrect double field value",
   1711                 Double.MIN_VALUE, val);
   1712     }
   1713 
   1714     /**
   1715      * @tests java.lang.reflect.Field#setFloat(java.lang.Object, float)
   1716      */
   1717     @TestTargetNew(
   1718         level = TestLevel.COMPLETE,
   1719         notes = "",
   1720         method = "setFloat",
   1721         args = {java.lang.Object.class, float.class}
   1722     )
   1723     public void test_setFloatLjava_lang_ObjectF() throws Exception{
   1724         // Test for method void
   1725         // java.lang.reflect.Field.setFloat(java.lang.Object, float)
   1726         TestField x = new TestField();
   1727         Field f = null;
   1728         float val = 0.0F;
   1729         try {
   1730             f = x.getClass().getDeclaredField("floatField");
   1731             f.setFloat(x, Float.MIN_VALUE);
   1732             val = f.getFloat(x);
   1733         } catch (Exception e) {
   1734             fail("Exception during setFloat test : " + e.getMessage());
   1735         }
   1736         assertEquals("Returned incorrect float field value", Float.MIN_VALUE,
   1737                 val, 0.0);
   1738 
   1739         //test wrong type
   1740         boolean thrown = false;
   1741         try {
   1742             f = x.getClass().getDeclaredField("booleanField");
   1743             f.setFloat(x, Float.MIN_VALUE);
   1744             fail("Accessed field of invalid type");
   1745         } catch (IllegalArgumentException ex) {
   1746             thrown = true;
   1747         }
   1748         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1749 
   1750         //test not accessible
   1751         thrown = false;
   1752         try {
   1753             f = x.getClass().getDeclaredField("floatPFField");
   1754             assertFalse(f.isAccessible());
   1755             f.setFloat(x, Float.MIN_VALUE);
   1756             fail("Accessed inaccessible field");
   1757         } catch (IllegalAccessException ex) {
   1758             thrown = true;
   1759         }
   1760         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1761 
   1762       //Test NPE
   1763         thrown = false;
   1764         try {
   1765             f = x.getClass().getDeclaredField("floatField");
   1766             f.setFloat(null, Float.MIN_VALUE);
   1767             fail("NullPointerException expected but not thrown");
   1768         } catch (NullPointerException ex) {
   1769             thrown = true;
   1770         } catch (Exception ex) {
   1771             fail("NullPointerException expected but not thrown");
   1772         }
   1773         assertTrue("NullPointerException expected but not thrown", thrown);
   1774 
   1775         // Test setting a static field;
   1776         f = x.getClass().getDeclaredField("floatSField");
   1777         f.setFloat(null, Float.MIN_VALUE);
   1778         val = f.getFloat(x);
   1779         assertEquals("Returned incorrect float field value",
   1780                 Float.MIN_VALUE, val);
   1781     }
   1782 
   1783     /**
   1784      * @tests java.lang.reflect.Field#setInt(java.lang.Object, int)
   1785      */
   1786     @TestTargetNew(
   1787         level = TestLevel.COMPLETE,
   1788         notes = "",
   1789         method = "setInt",
   1790         args = {java.lang.Object.class, int.class}
   1791     )
   1792     public void test_setIntLjava_lang_ObjectI() throws Exception{
   1793         // Test for method void java.lang.reflect.Field.setInt(java.lang.Object,
   1794         // int)
   1795         TestField x = new TestField();
   1796         Field f = null;
   1797         int val = 0;
   1798         try {
   1799             f = x.getClass().getDeclaredField("intField");
   1800             f.setInt(x, Integer.MIN_VALUE);
   1801             val = f.getInt(x);
   1802         } catch (Exception e) {
   1803             fail("Exception during setInteger test: " + e.toString());
   1804         }
   1805         assertEquals("Returned incorrect int field value", Integer.MIN_VALUE,
   1806                 val);
   1807 
   1808         // test wrong type
   1809         boolean thrown = false;
   1810         try {
   1811             f = x.getClass().getDeclaredField("booleanField");
   1812             f.setInt(x, Integer.MIN_VALUE);
   1813             fail("Accessed field of invalid type");
   1814         } catch (IllegalArgumentException ex) {
   1815             thrown = true;
   1816         }
   1817         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1818 
   1819         // test not accessible
   1820         thrown = false;
   1821         try {
   1822             f = x.getClass().getDeclaredField("intPFField");
   1823             assertFalse(f.isAccessible());
   1824             f.setInt(x, Integer.MIN_VALUE);
   1825             fail("Accessed inaccessible field");
   1826         } catch (IllegalAccessException ex) {
   1827             thrown = true;
   1828         }
   1829         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1830 
   1831         // Test NPE
   1832         thrown = false;
   1833         try {
   1834             f = x.getClass().getDeclaredField("intField");
   1835             f.setInt(null, Integer.MIN_VALUE);
   1836             fail("NullPointerException expected but not thrown");
   1837         } catch (NullPointerException ex) {
   1838             thrown = true;
   1839         } catch (Exception ex) {
   1840             fail("NullPointerException expected but not thrown");
   1841         }
   1842         assertTrue("NullPointerException expected but not thrown", thrown);
   1843 
   1844         // Test setting a static field;
   1845         f = x.getClass().getDeclaredField("intSField");
   1846         f.setInt(null, Integer.MIN_VALUE);
   1847         val = f.getInt(x);
   1848         assertEquals("Returned incorrect int field value",
   1849                 Integer.MIN_VALUE, val);
   1850     }
   1851 
   1852     /**
   1853      * @tests java.lang.reflect.Field#setLong(java.lang.Object, long)
   1854      */
   1855     @TestTargetNew(
   1856         level = TestLevel.COMPLETE,
   1857         notes = "",
   1858         method = "setLong",
   1859         args = {java.lang.Object.class, long.class}
   1860     )
   1861     public void test_setLongLjava_lang_ObjectJ() throws Exception{
   1862         // Test for method void
   1863         // java.lang.reflect.Field.setLong(java.lang.Object, long)
   1864         TestField x = new TestField();
   1865         Field f = null;
   1866         long val = 0L;
   1867         try {
   1868             f = x.getClass().getDeclaredField("longField");
   1869             f.setLong(x, Long.MIN_VALUE);
   1870             val = f.getLong(x);
   1871         } catch (Exception e) {
   1872             fail("Exception during setLong test : " + e.getMessage());
   1873         }
   1874         assertEquals("Returned incorrect long field value", Long.MIN_VALUE, val);
   1875 
   1876         // test wrong type
   1877         boolean thrown = false;
   1878         try {
   1879             f = x.getClass().getDeclaredField("booleanField");
   1880             f.setLong(x, Long.MIN_VALUE);
   1881             fail("Accessed field of invalid type");
   1882         } catch (IllegalArgumentException ex) {
   1883             thrown = true;
   1884         }
   1885         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1886 
   1887         // test not accessible
   1888         thrown = false;
   1889         try {
   1890             f = x.getClass().getDeclaredField("longPFField");
   1891             assertFalse(f.isAccessible());
   1892             f.setLong(x, Long.MIN_VALUE);
   1893             fail("Accessed inaccessible field");
   1894         } catch (IllegalAccessException ex) {
   1895             thrown = true;
   1896         }
   1897         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1898 
   1899         // Test NPE
   1900         thrown = false;
   1901         try {
   1902             f = x.getClass().getDeclaredField("longField");
   1903             f.setLong(null, Long.MIN_VALUE);
   1904             fail("NullPointerException expected but not thrown");
   1905         } catch (NullPointerException ex) {
   1906             thrown = true;
   1907         } catch (Exception ex) {
   1908             fail("NullPointerException expected but not thrown");
   1909         }
   1910         assertTrue("NullPointerException expected but not thrown", thrown);
   1911 
   1912         // Test setting a static field;
   1913         f = x.getClass().getDeclaredField("longSField");
   1914         f.setLong(null, Long.MIN_VALUE);
   1915         val = f.getLong(x);
   1916         assertEquals("Returned incorrect long field value",
   1917                 Long.MIN_VALUE, val);
   1918     }
   1919 
   1920     /**
   1921      * @tests java.lang.reflect.Field#setShort(java.lang.Object, short)
   1922      */
   1923     @TestTargetNew(
   1924         level = TestLevel.COMPLETE,
   1925         notes = "",
   1926         method = "setShort",
   1927         args = {java.lang.Object.class, short.class}
   1928     )
   1929     public void test_setShortLjava_lang_ObjectS() throws Exception{
   1930         // Test for method void
   1931         // java.lang.reflect.Field.setShort(java.lang.Object, short)
   1932         TestField x = new TestField();
   1933         Field f = null;
   1934         short val = 0;
   1935         try {
   1936             f = x.getClass().getDeclaredField("shortField");
   1937             f.setShort(x, Short.MIN_VALUE);
   1938             val = f.getShort(x);
   1939         } catch (Exception e) {
   1940             fail("Exception during setShort test : " + e.getMessage());
   1941         }
   1942         assertEquals("Returned incorrect short field value", Short.MIN_VALUE,
   1943                 val);
   1944 
   1945         // test wrong type
   1946         boolean thrown = false;
   1947         try {
   1948             f = x.getClass().getDeclaredField("booleanField");
   1949             f.setShort(x, Short.MIN_VALUE);
   1950             fail("Accessed field of invalid type");
   1951         } catch (IllegalArgumentException ex) {
   1952             thrown = true;
   1953         }
   1954         assertTrue("IllegalArgumentException expected but not thrown", thrown);
   1955 
   1956         // test not accessible
   1957         thrown = false;
   1958         try {
   1959             f = x.getClass().getDeclaredField("shortPFField");
   1960             assertFalse(f.isAccessible());
   1961             f.setShort(x, Short.MIN_VALUE);
   1962             fail("Accessed inaccessible field");
   1963         } catch (IllegalAccessException ex) {
   1964             thrown = true;
   1965         }
   1966         assertTrue("IllegalAccessException expected but not thrown", thrown);
   1967 
   1968         // Test NPE
   1969         thrown = false;
   1970         try {
   1971             f = x.getClass().getDeclaredField("shortField");
   1972             f.setShort(null, Short.MIN_VALUE);
   1973             fail("NullPointerException expected but not thrown");
   1974         } catch (NullPointerException ex) {
   1975             thrown = true;
   1976         } catch (Exception ex) {
   1977             fail("NullPointerException expected but not thrown");
   1978         }
   1979         assertTrue("NullPointerException expected but not thrown", thrown);
   1980 
   1981         // Test setting a static field;
   1982         f = x.getClass().getDeclaredField("shortSField");
   1983         f.setShort(null, Short.MIN_VALUE);
   1984         val = f.getShort(x);
   1985         assertEquals("Returned incorrect short field value",
   1986                 Short.MIN_VALUE, val);
   1987     }
   1988 
   1989     /**
   1990      * @tests java.lang.reflect.Field#toString()
   1991      */
   1992     @TestTargetNew(
   1993         level = TestLevel.COMPLETE,
   1994         notes = "",
   1995         method = "toString",
   1996         args = {}
   1997     )
   1998     public void test_toString() {
   1999         // Test for method java.lang.String java.lang.reflect.Field.toString()
   2000         Field f = null;
   2001 
   2002         try {
   2003             f = TestField.class.getDeclaredField("x");
   2004         } catch (Exception e) {
   2005             fail("Exception getting field : " + e.getMessage());
   2006         }
   2007         assertEquals("Field returned incorrect string",
   2008                 "private static final int tests.api.java.lang.reflect.FieldTest$TestField.x",
   2009                         f.toString());
   2010     }
   2011 
   2012     @TestTargetNew(
   2013         level = TestLevel.COMPLETE,
   2014         notes = "",
   2015         method = "getDeclaredAnnotations",
   2016         args = {}
   2017     )
   2018     public void test_getDeclaredAnnotations() throws Exception {
   2019         Field field = TestClass.class.getField("annotatedField");
   2020         Annotation[] annotations = field.getDeclaredAnnotations();
   2021         assertEquals(2, annotations.length);
   2022 
   2023         Set<Class<?>> ignoreOrder = new HashSet<Class<?>>();
   2024         ignoreOrder.add(annotations[0].annotationType());
   2025         ignoreOrder.add(annotations[1].annotationType());
   2026 
   2027         assertTrue("Missing @AnnotationRuntime0", ignoreOrder
   2028                 .contains(AnnotationRuntime0.class));
   2029         assertTrue("Missing @AnnotationRuntime1", ignoreOrder
   2030                 .contains(AnnotationRuntime1.class));
   2031     }
   2032 
   2033     @TestTargetNew(
   2034         level = TestLevel.COMPLETE,
   2035         notes = "",
   2036         method = "isEnumConstant",
   2037         args = {}
   2038     )
   2039     public void test_isEnumConstant() throws Exception {
   2040         Field field = TestEnum.class.getDeclaredField("A");
   2041         assertTrue("Enum constant not recognized", field.isEnumConstant());
   2042 
   2043         field = TestEnum.class.getDeclaredField("field");
   2044         assertFalse("Non enum constant wrongly stated as enum constant", field
   2045                 .isEnumConstant());
   2046 
   2047         field = TestClass.class.getDeclaredField("annotatedField");
   2048         assertFalse("Non enum constant wrongly stated as enum constant", field
   2049                 .isEnumConstant());
   2050     }
   2051 
   2052     @TestTargetNew(
   2053         level = TestLevel.COMPLETE,
   2054         notes = "",
   2055         method = "isSynthetic",
   2056         args = {}
   2057     )
   2058     public void test_isSynthetic() throws Exception {
   2059         Field[] fields = TestClass.Inner.class.getDeclaredFields();
   2060         assertEquals("Not exactly one field returned", 1, fields.length);
   2061 
   2062         assertTrue("Enum constant not recognized", fields[0].isSynthetic());
   2063 
   2064         Field field = TestEnum.class.getDeclaredField("field");
   2065         assertFalse("Non synthetic field wrongly stated as synthetic", field
   2066                 .isSynthetic());
   2067 
   2068         field = TestClass.class.getDeclaredField("annotatedField");
   2069         assertFalse("Non synthetic field wrongly stated as synthetic", field
   2070                 .isSynthetic());
   2071     }
   2072 
   2073 
   2074     @TestTargetNew(
   2075         level = TestLevel.COMPLETE,
   2076         notes = "",
   2077         method = "getGenericType",
   2078         args = {}
   2079     )
   2080     public void test_getGenericType() throws Exception {
   2081         Field field = GenericField.class.getDeclaredField("field");
   2082         Type type = field.getGenericType();
   2083         @SuppressWarnings("unchecked")
   2084         TypeVariable typeVar = (TypeVariable) type;
   2085         assertEquals("Wrong type name returned", "S", typeVar.getName());
   2086 
   2087         Field boundedField = GenericField.class.getDeclaredField("boundedField");
   2088         Type boundedType = boundedField.getGenericType();
   2089         @SuppressWarnings("unchecked")
   2090         TypeVariable boundedTypeVar = (TypeVariable) boundedType;
   2091         assertEquals("Wrong type name returned", "T", boundedTypeVar.getName());
   2092         assertEquals("More than one bound found", 1,
   2093                 boundedTypeVar.getBounds().length);
   2094         assertEquals("Wrong bound returned", Number.class,
   2095                 boundedTypeVar.getBounds()[0]);
   2096     }
   2097 
   2098 
   2099     @TestTargetNew(
   2100         level = TestLevel.COMPLETE,
   2101         notes = "",
   2102         method = "toGenericString",
   2103         args = {}
   2104     )
   2105     public void test_toGenericString() throws Exception {
   2106         Field field = GenericField.class.getDeclaredField("field");
   2107         assertEquals("Wrong generic string returned",
   2108                 "S tests.api.java.lang.reflect.FieldTest$GenericField.field",
   2109                 field.toGenericString());
   2110 
   2111         Field boundedField = GenericField.class
   2112                 .getDeclaredField("boundedField");
   2113         assertEquals(
   2114                 "Wrong generic string returned",
   2115                 "T tests.api.java.lang.reflect.FieldTest$GenericField.boundedField",
   2116                 boundedField.toGenericString());
   2117 
   2118         Field ordinary = GenericField.class.getDeclaredField("intField");
   2119         assertEquals(
   2120                 "Wrong generic string returned",
   2121                 "int tests.api.java.lang.reflect.FieldTest$GenericField.intField",
   2122                 ordinary.toGenericString());
   2123     }
   2124 
   2125 
   2126     @TestTargetNew(
   2127         level = TestLevel.COMPLETE,
   2128         notes = "",
   2129         method = "hashCode",
   2130         args = {}
   2131     )
   2132     public void test_hashCode() throws Exception {
   2133         Field field = TestClass.class.getDeclaredField("annotatedField");
   2134         assertEquals("Wrong hashCode returned", field.getName().hashCode()
   2135                 ^ field.getDeclaringClass().getName().hashCode(), field
   2136                 .hashCode());
   2137     }
   2138 
   2139 
   2140     /**
   2141      * Sets up the fixture, for example, open a network connection. This method
   2142      * is called before a test is executed.
   2143      */
   2144     protected void setUp() {
   2145     }
   2146 
   2147     /**
   2148      * Tears down the fixture, for example, close a network connection. This
   2149      * method is called after a test is executed.
   2150      */
   2151     protected void tearDown() {
   2152     }
   2153 }
   2154 
   2155 class TestAccess {
   2156     private static int xxx;
   2157 }
   2158