/*
* Copyright ( c ) 2001 , 2015 , Oracle and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*/
/**
* @ test
* @ bug 4409582
* @ summary Test all info returned by modification watchpoints
* @ author Daniel Prusa ( or someone in the FFJ group )
* @ author Robert Field
*
* @ run build TestScaffold VMConnection
* @ run compile - g ModificationWatchpoints . java
* @ run driver ModificationWatchpoints
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
import com.sun.jdi.request.*;
import java.util.*;
/********** target program **********/
class ModificationWatchpointsTarg {
public static final int RepeatCount = 3 ;
public static final byte ByteVal = -17 ;
public static final char CharVal = 'Y' ;
public static final short ShortVal = -412 ;
public static final int IntVal = -711618 ;
public static final long LongVal = 0 x1234567890123456L;
public static final float FloatVal = 7 .986 f;
public static final double DoubleVal = 3 .14159265358979 d;
public static final String StringVal = "OnceMore" ;
public static final Object ObjectVal = new Object();
static byte sByte;
static char sChar;
static short sShort;
static int sInt;
static long sLong;
static float sFloat;
static double sDouble;
static String sString;
static Object sObject;
byte iByte;
char iChar;
short iShort;
int iInt;
long iLong;
float iFloat;
double iDouble;
String iString;
Object iObject;
void iByteSet() {
iByte = ByteVal;
}
void iCharSet() {
iChar = CharVal;
}
void iShortSet() {
iShort = ShortVal;
}
void iIntSet() {
iInt = IntVal;
}
void iLongSet() {
iLong = LongVal;
}
void iFloatSet() {
iFloat = FloatVal;
}
void iDoubleSet() {
iDouble = DoubleVal;
}
void iStringSet() {
iString = StringVal;
}
void iObjectSet() {
iObject = ObjectVal;
}
static void sByteSet() {
sByte = ByteVal;
}
static void sCharSet() {
sChar = CharVal;
}
static void sShortSet() {
sShort = ShortVal;
}
static void sIntSet() {
sInt = IntVal;
}
static void sLongSet() {
sLong = LongVal;
}
static void sFloatSet() {
sFloat = FloatVal;
}
static void sDoubleSet() {
sDouble = DoubleVal;
}
static void sStringSet() {
sString = StringVal;
}
static void sObjectSet() {
sObject = ObjectVal;
}
void iUpdate(){
iByteSet();
iCharSet();
iShortSet();
iIntSet();
iLongSet();
iFloatSet();
iDoubleSet();
iStringSet();
iObjectSet();
}
static void sUpdate(){
sByteSet();
sCharSet();
sShortSet();
sIntSet();
sLongSet();
sFloatSet();
sDoubleSet();
sStringSet();
sObjectSet();
}
public static void main(String[] args){
ModificationWatchpointsTarg targ = new ModificationWatchpointsTarg();
for (int i = RepeatCount; i > 0 ; i--) {
sUpdate();
targ.iUpdate();
}
}
}
public class ModificationWatchpoints extends TestScaffold {
ReferenceType targ;
List allMWP = new ArrayList();
ModificationWatchpoints (String args[]) {
super (args);
}
public static void main(String[] args) throws Exception {
new ModificationWatchpoints(args).startTests();
}
/********** event handlers **********/
public void fieldModified(ModificationWatchpointEvent event) {
MWP mwp = (MWP)event.request().getProperty("executor" );
mwp.fieldModified(event);
}
/********** test core **********/
void set(String fieldName, String valString) {
Value val = targ.getValue(targ.fieldByName(valString));
MWP mwp = new MWP("ModificationWatchpointsTarg" , fieldName, val);
allMWP.add(mwp);
mwp.set();
}
protected void runTests() throws Exception {
/*
* Get to the top of main ( ) :
*/
BreakpointEvent bpe = startToMain("ModificationWatchpointsTarg" );
targ = bpe.location().declaringType();
/*
* Set watchpoints
*/
set("iByte" , "ByteVal" );
set("iChar" , "CharVal" );
set("iShort" , "ShortVal" );
set("iInt" , "IntVal" );
set("iLong" , "LongVal" );
set("iFloat" , "FloatVal" );
set("iDouble" , "DoubleVal" );
set("iString" , "StringVal" );
set("iObject" , "ObjectVal" );
set("sByte" , "ByteVal" );
set("sChar" , "CharVal" );
set("sShort" , "ShortVal" );
set("sInt" , "IntVal" );
set("sLong" , "LongVal" );
set("sFloat" , "FloatVal" );
set("sDouble" , "DoubleVal" );
set("sString" , "StringVal" );
set("sObject" , "ObjectVal" );
listenUntilVMDisconnect();
if (!testFailed) {
for (Iterator it = allMWP.iterator(); it.hasNext();) {
MWP mwp = (MWP)it.next();
mwp.checkEventCounts(ModificationWatchpointsTarg.RepeatCount);
}
}
if (!testFailed) {
println("ModificationWatchpoints: passed" );
} else {
throw new Exception("ModificationWatchpoints: failed" );
}
}
/********** request wrapper **********/
class MWP {
private final String className;
private final String fieldName;
private final Value expectedValue;
public int eventCount = 0 ;
public boolean failed = false ;
public MWP(String className, String fieldName, Value value) {
this .className = className;
this .fieldName = fieldName;
this .expectedValue = value;
}
/*
* Sets watchpoint with specified properties .
*/
public void set() {
List classes = vm().classesByName(className);
if (classes.size() != 1 ) {
failure("Expected one class named " + className + " got " + classes.size());
}
set ((ReferenceType)classes.get(0 ));
}
/**
* Sets watchpoint for given class .
*/
public void set(ReferenceType clazz) {
Field f = clazz.fieldByName(fieldName);
ModificationWatchpointRequest mwr =
eventRequestManager().createModificationWatchpointRequest(f);
mwr.putProperty("executor" , this );
mwr.enable();
println("set watchpoint: " + className +"." + f);
}
public void fieldModified(ModificationWatchpointEvent event) {
Value val = event.valueToBe();
println("Watchpoint reached: " + className + "." + fieldName +
", new value: " + val);
if (!val.equals(expectedValue)) {
failure("FAILURE: value should be: " +
expectedValue.getClass() + ":" + expectedValue +
" has - " + val.getClass() + ":" + val);
}
if (!event.location().method().name().equals(fieldName + "Set" )) {
failure("FAILURE: occurred in wrong place: " + event.location());
}
eventCount++;
}
public void checkEventCounts(int expectedCount) {
if (eventCount != expectedCount) {
failure(className + "." + fieldName +
" - only got " + eventCount + " events" );
}
}
} // MWP inner class .................
}
Messung V0.5 in Prozent C=88 H=92 G=89
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland