public void testTruncateJ() throws Exception {
    byte[] buf = {1, 2, 3, 4, 5, 6, 7, 8};
    SerialBlob serialBlob1 = new SerialBlob(buf);
    MockSerialBlob mockBlob = new MockSerialBlob();
    mockBlob.buf = new byte[] {1, 2, 3, 4, 5, 6, 7, 8};
    SerialBlob serialBlob2 = new SerialBlob(mockBlob);
    SerialBlob[] serialBlobs = {serialBlob1, serialBlob2};

    for (SerialBlob serialBlob : serialBlobs) {

      serialBlob.truncate(3);
      assertEquals(3L, serialBlob.length());
      byte[] truncatedBytes = serialBlob.getBytes(1, 3);
      assertTrue(Arrays.equals(new byte[] {1, 2, 3}, truncatedBytes));

      try {
        serialBlob.truncate(-1);
        fail("should throw SerialException");
      } catch (SerialException e) {
        // expected
      }

      // Non bug difference from RI, Harmony-2937
      assertEquals(3L, serialBlob.length());

      try {
        serialBlob.truncate(10);
        fail("should throw SerialException");
      } catch (SerialException e) {
        // expected
      }
    }
  }
  public void testSetBytesJ$B() throws Exception {
    byte[] buf = {1, 2, 3, 4, 5, 6, 7, 8};
    byte[] theBytes = {9, 10, 11};
    SerialBlob serialBlob = new SerialBlob(buf);

    int count = serialBlob.setBytes(1, theBytes);
    byte[] res = serialBlob.getBytes(1, buf.length);
    byte[] expected = {9, 10, 11, 4, 5, 6, 7, 8};
    assertTrue(Arrays.equals(expected, res));
    assertEquals(3, count);

    count = serialBlob.setBytes(2, theBytes);
    res = serialBlob.getBytes(1, buf.length);
    expected = new byte[] {9, 9, 10, 11, 5, 6, 7, 8};
    assertTrue(Arrays.equals(expected, res));
    assertEquals(3, count);

    count = serialBlob.setBytes(6, theBytes);
    res = serialBlob.getBytes(1, buf.length);
    expected = new byte[] {9, 9, 10, 11, 5, 9, 10, 11};
    assertTrue(Arrays.equals(expected, res));
    assertEquals(3, count);

    try {
      serialBlob.setBytes(-1, theBytes);
      fail("should throw SerialException");
    } catch (SerialException e) {
      // expected
    }

    try {
      serialBlob.setBytes(10, theBytes);
      fail("should throw SerialException");
    } catch (SerialException e) {
      // expected
    }

    // Non bug difference from RI, Harmony-2836
    try {
      serialBlob.setBytes(7, theBytes);
      fail("should throw SerialException");
    } catch (SerialException e) {
      // expected
    }
  }
  public void testGetBytesJI() throws Exception {
    byte[] buf = {1, 2, 3, 4, 5, 6, 7, 8};
    SerialBlob serialBlob = new SerialBlob(buf);
    byte[] data = serialBlob.getBytes(1, 1);
    assertEquals(1, data.length);
    assertEquals(1, data[0]);

    data = serialBlob.getBytes(2, 3);
    assertEquals(3, data.length);
    assertEquals(2, data[0]);
    assertEquals(3, data[1]);
    assertEquals(4, data[2]);

    // Harmony-2725 RI's bug : RI throws SerialException here.
    data = serialBlob.getBytes(2, 1);
    assertEquals(1, data.length);
    assertEquals(2, data[0]);

    data = serialBlob.getBytes(1, 10);
    assertEquals(8, data.length);
    assertTrue(Arrays.equals(buf, data));

    try {
      data = serialBlob.getBytes(2, -1);
      fail("should throw SerialException");
    } catch (SerialException e) {
      // expected
    }

    try {
      data = serialBlob.getBytes(0, 2);
      fail("should throw SerialException");
    } catch (SerialException e) {
      // expected
    }

    try {
      data = serialBlob.getBytes(-1, 2);
      fail("should throw SerialException");
    } catch (SerialException e) {
      // expected
    }

    try {
      data = serialBlob.getBytes(10, 11);
      fail("should throw SerialException");
    } catch (SerialException e) {
      // expected
    }
  }