/******************************************************************************* * Copyright (c) 2010 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.debug.tests.variables; import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.jdt.debug.core.IJavaDebugTarget; import org.eclipse.jdt.debug.core.IJavaLineBreakpoint; import org.eclipse.jdt.debug.core.IJavaObject; import org.eclipse.jdt.debug.core.IJavaReferenceType; import org.eclipse.jdt.debug.core.IJavaStackFrame; import org.eclipse.jdt.debug.core.IJavaThread; import org.eclipse.jdt.debug.core.IJavaVariable; import org.eclipse.jdt.debug.tests.AbstractDebugTest; /** * Tests for instance retrieval */ public class TestInstanceRetrieval extends AbstractDebugTest { /** * Constructs test. * * @param name test name */ public TestInstanceRetrieval(String name) { super(name); } /** * Test the logical structure for a list. * * @throws Exception */ public void testGetInstances() throws Exception { String typeName = "java6.AllInstancesTests"; createLineBreakpoint(61, typeName); IJavaLineBreakpoint bp2 = createLineBreakpoint(63, typeName); IJavaThread thread= null; try { thread= launchToBreakpoint(typeName); IJavaDebugTarget target = (IJavaDebugTarget) thread.getDebugTarget(); if (target.supportsInstanceRetrieval()) { assertNotNull("Breakpoint not hit within timeout period", thread); IBreakpoint hit = getBreakpoint(thread); assertNotNull("suspended, but not by breakpoint", hit); IJavaStackFrame frame = (IJavaStackFrame) thread.getTopStackFrame(); assertNotNull("missing top frame", frame); IJavaVariable variable = frame.findVariable("ro"); assertNotNull("Missing variable 'ro'", variable); IJavaObject object = (IJavaObject) variable.getValue(); IJavaReferenceType refType = (IJavaReferenceType) object.getJavaType(); long instanceCount = refType.getInstanceCount(); IJavaObject[] instances = refType.getInstances(100); assertEquals("Wrong instance count", 13, instanceCount); assertEquals("Wrong number of instances", 13, instances.length); for (int i = 0; i < instances.length; i++) { assertEquals("Instance is of unexpected type", refType, instances[i].getJavaType()); } thread = resumeToLineBreakpoint(thread, bp2); frame = (IJavaStackFrame) thread.getTopStackFrame(); assertNotNull("missing top frame", frame); variable = frame.findVariable("rc"); assertNotNull("Missing variable 'rc'", variable); object = (IJavaObject) variable.getValue(); refType = (IJavaReferenceType) object.getJavaType(); instanceCount = refType.getInstanceCount(); instances = refType.getInstances(100); assertEquals("Wrong instance count", 1002, instanceCount); assertEquals("Wrong number of instances", 100, instances.length); for (int i = 0; i < instances.length; i++) { assertEquals("Instance is of unexpected type", refType, instances[i].getJavaType()); } } } finally { terminateAndRemove(thread); removeAllBreakpoints(); } } }