Home | History | Annotate | Download | only in ObjectReference
      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  *
     15  *  See the License for the specific language governing permissions and
     16  *  limitations under the License.
     17  */
     18 
     19 /**
     20  * @author Anatoly F. Bondarenko
     21  */
     22 
     23 /**
     24  * Created on 11.03.2005
     25  */
     26 package org.apache.harmony.jpda.tests.jdwp.ObjectReference;
     27 
     28 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
     29 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
     30 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
     31 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
     32 import org.apache.harmony.jpda.tests.framework.jdwp.Value;
     33 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
     34 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
     35 
     36 
     37 /**
     38  * JDWP Unit test for ObjectReference.GetValues command for static fields.
     39  */
     40 public class GetValues002Test extends JDWPSyncTestCase {
     41 
     42     static final String thisCommandName = "ObjectReference::GetValues command";
     43     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Debuggee;";
     44 
     45     @Override
     46     protected String getDebuggeeClassName() {
     47         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.GetValues002Debuggee";
     48     }
     49 
     50     /**
     51      * This test exercises ObjectReference.GetValues command for static fields.
     52      * <BR>The test starts GetValues002Debuggee class, gets objectID
     53      * as value of static field of this class which (field) represents checked object.
     54      * Then for this objectID test executes ObjectReference.GetValues command for special
     55      * set of fieldIDs and checks that command returns expected jdwpTags for all checked
     56      * fields and expected values for primitive fields.
     57      */
     58     public void testGetValues002() {
     59         String thisTestName = "testGetValues002";
     60         logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": START...");
     61         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
     62 
     63         long refTypeID = getClassIDBySignature(debuggeeSignature);
     64 
     65         logWriter.println("=> Debuggee class = " + getDebuggeeClassName());
     66         logWriter.println("=> referenceTypeID for Debuggee class = " + refTypeID);
     67 
     68         String checkedFieldNames[] = {
     69                 "getValues002DebuggeeField",
     70 
     71                 "staticLongField",
     72                 "staticIntField",
     73                 "staticStringField",
     74                 "staticObjectField",
     75                 "staticBooleanField",
     76                 "staticByteField",
     77                 "staticCharField",
     78                 "staticShortField",
     79                 "staticFloatField",
     80                 "staticDoubleField",
     81                 "staticArrayField",
     82                 };
     83         long checkedFieldIDs[] = checkFields(refTypeID, checkedFieldNames);
     84         int checkedFieldsNumber = checkedFieldNames.length;
     85 
     86         logWriter.println
     87         ("=> Send ReferenceType::GetValues command and and get ObjectID to check...");
     88 
     89         CommandPacket getValuesCommand = new CommandPacket(
     90                 JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
     91                 JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand);
     92         getValuesCommand.setNextValueAsReferenceTypeID(refTypeID);
     93         getValuesCommand.setNextValueAsInt(1);
     94         getValuesCommand.setNextValueAsFieldID(checkedFieldIDs[0]);
     95 
     96         ReplyPacket getValuesReply = debuggeeWrapper.vmMirror.performCommand(getValuesCommand);
     97         getValuesCommand = null;
     98         checkReplyPacket(getValuesReply, "ReferenceType::GetValues command");
     99 
    100         int returnedValuesNumber = getValuesReply.getNextValueAsInt();
    101         logWriter.println("=> Returned values number = " + returnedValuesNumber);
    102         assertEquals("Invalid number of values,", 1, returnedValuesNumber);
    103 
    104         Value checkedObjectFieldValue = getValuesReply.getNextValueAsValue();
    105         byte checkedObjectFieldTag = checkedObjectFieldValue.getTag();
    106         logWriter.println("=> Returned field value tag for checked object= " + checkedObjectFieldTag
    107             + "(" + JDWPConstants.Tag.getName(checkedObjectFieldTag) + ")");
    108         assertEquals("Invalid value tag for checked object,", JDWPConstants.Tag.OBJECT_TAG, checkedObjectFieldTag
    109                 , JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG)
    110                 , JDWPConstants.Tag.getName(checkedObjectFieldTag));
    111 
    112         long checkedObjectID = checkedObjectFieldValue.getLongValue();
    113         logWriter.println("=> Returned checked ObjectID = " + checkedObjectID);
    114         logWriter.println("=> CHECK: send " + thisCommandName + " for this ObjectID and check reply...");
    115 
    116         CommandPacket checkedCommand = new CommandPacket(
    117                 JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
    118                 JDWPCommands.ObjectReferenceCommandSet.GetValuesCommand);
    119         checkedCommand.setNextValueAsObjectID(checkedObjectID);
    120         checkedCommand.setNextValueAsInt(checkedFieldsNumber-1);
    121         int fieldIndex = 1; // !!!
    122         for (; fieldIndex < checkedFieldsNumber; fieldIndex++) {
    123             checkedCommand.setNextValueAsFieldID(checkedFieldIDs[fieldIndex]);
    124         }
    125 
    126         ReplyPacket checkedReply = debuggeeWrapper.vmMirror.performCommand(checkedCommand);
    127         checkedCommand = null;
    128         checkReplyPacket(checkedReply, thisCommandName);
    129 
    130         returnedValuesNumber = checkedReply.getNextValueAsInt();
    131         logWriter.println("=> Returned values number = " + returnedValuesNumber);
    132         assertEquals("Invalid number of values,", checkedFieldsNumber - 1, returnedValuesNumber);
    133 
    134         byte expectedFieldTags[] = {
    135                 0, // dummy
    136                 JDWPConstants.Tag.LONG_TAG,
    137                 JDWPConstants.Tag.INT_TAG,
    138                 JDWPConstants.Tag.STRING_TAG,
    139                 JDWPConstants.Tag.OBJECT_TAG,
    140                 JDWPConstants.Tag.BOOLEAN_TAG,
    141                 JDWPConstants.Tag.BYTE_TAG,
    142                 JDWPConstants.Tag.CHAR_TAG,
    143                 JDWPConstants.Tag.SHORT_TAG,
    144                 JDWPConstants.Tag.FLOAT_TAG,
    145                 JDWPConstants.Tag.DOUBLE_TAG,
    146                 JDWPConstants.Tag.ARRAY_TAG,
    147         };
    148 
    149         logWriter.println("=> CHECK for returned values...");
    150         fieldIndex = 1; // !!!
    151         for (; fieldIndex < checkedFieldsNumber; fieldIndex++) {
    152             Value fieldValue = checkedReply.getNextValueAsValue();
    153             byte fieldTag = fieldValue.getTag();
    154             logWriter.println
    155             ("\n=> Check for returned value for field: " + checkedFieldNames[fieldIndex] + " ...");
    156             logWriter.println("=> Returned value tag = " + fieldTag
    157                 + "(" + JDWPConstants.Tag.getName(fieldTag) + ")");
    158 
    159             assertEquals("Invalid value tag is returned,", expectedFieldTags[fieldIndex], fieldTag
    160                     , JDWPConstants.Tag.getName(expectedFieldTags[fieldIndex])
    161                     , JDWPConstants.Tag.getName(fieldTag));
    162 
    163             switch ( fieldTag ) {
    164             case JDWPConstants.Tag.INT_TAG:
    165                 int intValue = fieldValue.getIntValue();
    166                 logWriter.println("=> Int value = " + intValue);
    167                 int expectedIntValue = 99;
    168                 assertEquals("Invalid int value,", expectedIntValue, intValue);
    169                 break;
    170             case JDWPConstants.Tag.LONG_TAG:
    171                 long longValue = fieldValue.getLongValue();
    172                 logWriter.println("=> Long value = " + longValue);
    173                 long expectedLongValue = 2147483647;
    174                 assertEquals("Invalid long value,", expectedLongValue, longValue);
    175                 break;
    176             case JDWPConstants.Tag.STRING_TAG:
    177                 long stringIDValue = fieldValue.getLongValue();
    178                 logWriter.println("=> StringID value = " + stringIDValue);
    179                 break;
    180             case JDWPConstants.Tag.OBJECT_TAG:
    181                 long objectIDValue = fieldValue.getLongValue();
    182                 logWriter.println("=> ObjectID value = " + objectIDValue);
    183                 break;
    184             case JDWPConstants.Tag.BOOLEAN_TAG:
    185                 boolean booleanValue = fieldValue.getBooleanValue();
    186                 logWriter.println("=> Boolean value = " + booleanValue);
    187                 boolean expectedBooleanValue = true;
    188                 assertEquals("Invalid boolean value,", expectedBooleanValue, booleanValue);
    189                 break;
    190             case JDWPConstants.Tag.BYTE_TAG:
    191                 byte byteValue = fieldValue.getByteValue();
    192                 logWriter.println("=> Byte value = " + byteValue);
    193                 byte expectedByteValue = 1;
    194                 assertEquals("Invalid byte value,", expectedByteValue, byteValue);
    195                 break;
    196             case JDWPConstants.Tag.CHAR_TAG:
    197                 char charValue = fieldValue.getCharValue();
    198                 logWriter.println("=> Char value = " + (int)charValue);
    199                 char expectedCharValue = 97;
    200                 assertEquals("Invalid char value,", expectedCharValue, charValue);
    201                 break;
    202             case JDWPConstants.Tag.SHORT_TAG:
    203                 short shortValue = fieldValue.getShortValue();
    204                 logWriter.println("=> Short value = " + shortValue);
    205                 short expectedShortValue = 2;
    206                 assertEquals("Invalid short value,", expectedShortValue, shortValue);
    207                 break;
    208             case JDWPConstants.Tag.FLOAT_TAG:
    209                 float floatValue = fieldValue.getFloatValue();
    210                 logWriter.println("=> Float value = " + floatValue);
    211                 float expectedFloatValue = 2;
    212                 assertEquals("Invalid float value,", expectedFloatValue, floatValue, 0);
    213                 break;
    214             case JDWPConstants.Tag.DOUBLE_TAG:
    215                 double doubleValue = fieldValue.getDoubleValue();
    216                 logWriter.println("=> Double value = " + doubleValue);
    217                 double expectedDoubleValue = 3.1;
    218                 assertEquals("Invalid double value,", expectedDoubleValue, doubleValue, 0);
    219                 break;
    220             case JDWPConstants.Tag.ARRAY_TAG:
    221                 long arrayIDValue = fieldValue.getLongValue();
    222                 logWriter.println("=> ArrayID value = " + arrayIDValue);
    223                 break;
    224             }
    225         }
    226 
    227         assertAllDataRead(checkedReply);
    228 
    229         logWriter.println
    230         ("=> CHECK PASSED: All expected field values are got and have expected attributes");
    231 
    232         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
    233         logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": FINISH");
    234     }
    235 }
    236