Пример #1
0
  /**
   * This testcase exercises ArrayReference.SetValues command. <br>
   * Starts <A HREF="ArrayReferenceDebuggee.html">ArrayReferenceDebuggee</A>. <br>
   * Receives fields with ReferenceType.fields command, sets values with ArrayReference.SetValues
   * then checks changes.
   */
  public void testSetValues001() {
    logWriter.println("testLength001 started");
    synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);

    // obtain classID
    long classID =
        getClassIDBySignature(
            "Lorg/apache/harmony/jpda/tests/jdwp/ArrayReference/ArrayReferenceDebuggee;");

    // obtain fields
    CommandPacket packet =
        new CommandPacket(
            JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
            JDWPCommands.ReferenceTypeCommandSet.FieldsCommand);
    packet.setNextValueAsReferenceTypeID(classID);
    ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(packet);
    checkReplyPacket(reply, "ReferenceType::Fields command");

    int declared = reply.getNextValueAsInt();
    for (int i = 0; i < declared; i++) {
      long fieldID = reply.getNextValueAsFieldID();
      String name = reply.getNextValueAsString();
      reply.getNextValueAsString();
      reply.getNextValueAsInt();

      if (name.equals("intArray")) {
        ArrayRegion valuesRegion = new ArrayRegion(JDWPConstants.Tag.INT_TAG, 10);
        for (int j = 0; j < valuesRegion.getLength(); j++) {
          valuesRegion.setValue(j, new Value(-j));
        }
        checkArrayValues(valuesRegion, classID, fieldID);
      } else if (name.equals("longArray")) {
        ArrayRegion valuesRegion = new ArrayRegion(JDWPConstants.Tag.LONG_TAG, 10);
        for (int j = 0; j < valuesRegion.getLength(); j++) {
          valuesRegion.setValue(j, new Value((long) -j));
        }
        checkArrayValues(valuesRegion, classID, fieldID);
      } else if (name.equals("byteArray")) {
        ArrayRegion valuesRegion = new ArrayRegion(JDWPConstants.Tag.BYTE_TAG, 10);
        for (int j = 0; j < valuesRegion.getLength(); j++) {
          valuesRegion.setValue(j, new Value((byte) -j));
        }
        checkArrayValues(valuesRegion, classID, fieldID);
      }
    }

    synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
  }
Пример #2
0
  private void checkArrayValues(ArrayRegion valuesRegion, long classID, long fieldID) {
    CommandPacket packet =
        new CommandPacket(
            JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
            JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand);
    packet.setNextValueAsReferenceTypeID(classID);
    packet.setNextValueAsInt(1);
    packet.setNextValueAsFieldID(fieldID);

    ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(packet);
    checkReplyPacket(reply, "ReferenceType::GetValues command");

    assertEquals(
        "GetValuesCommand returned invalid number of values,", 1, reply.getNextValueAsInt());
    Value value = reply.getNextValueAsValue();
    // System.err.println("value="+value);
    long arrayID = value.getLongValue();
    int length = valuesRegion.getLength();

    checkArrayRegion(valuesRegion, arrayID, 0, length);
  }
Пример #3
0
  private void checkArrayRegion(
      ArrayRegion valuesRegion, long arrayID, int firstIndex, int length) {
    // set values
    CommandPacket packet =
        new CommandPacket(
            JDWPCommands.ArrayReferenceCommandSet.CommandSetID,
            JDWPCommands.ArrayReferenceCommandSet.SetValuesCommand);
    packet.setNextValueAsArrayID(arrayID);
    packet.setNextValueAsInt(firstIndex);
    packet.setNextValueAsInt(length);
    for (int i = 0; i < length; i++) {
      packet.setNextValueAsUntaggedValue(valuesRegion.getValue(i));
    }
    packet.setNextValueAsInt(length);

    ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(packet);
    checkReplyPacket(reply, "ArrayReference::SetValues command");

    // get values
    packet =
        new CommandPacket(
            JDWPCommands.ArrayReferenceCommandSet.CommandSetID,
            JDWPCommands.ArrayReferenceCommandSet.GetValuesCommand);
    packet.setNextValueAsArrayID(arrayID);
    packet.setNextValueAsInt(firstIndex);
    packet.setNextValueAsInt(length);
    reply = debuggeeWrapper.vmMirror.performCommand(packet);
    checkReplyPacket(reply, "ArrayReference::GetValues command");

    // do not check values for non-array fields
    ArrayRegion region = reply.getNextValueAsArrayRegion();
    assertEquals("Invalud returned array length,", length, region.getLength());
    for (int i = 0; i < region.getLength(); i++) {
      Value value = region.getValue(i);
      logWriter.println(value.toString());
      assertEquals(
          "ArrayReference::GetValues returned invalid value on index:<" + i + ">",
          value,
          valuesRegion.getValue(i));
    }
  }