/*******************************************************************************
 * Copyright (c) 2000, 2005 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.debug.jdi.tests;

import com.sun.jdi.request.WatchpointRequest;

/**
 * Tests for JDI com.sun.jdi.request.WatchpointRequest.
 */
public class WatchpointRequestTest extends AbstractJDITest {

	private WatchpointRequest fAccessWatchpointRequest,
		fModificationWatchpointRequest;
	/**
	 * Creates a new test .
	 */
	public WatchpointRequestTest() {
		super();
	}
	/**
	 * Init the fields that are used by this test only.
	 */
	public void localSetUp() {
		// Get an acces watchpoint request
		fAccessWatchpointRequest = getAccessWatchpointRequest();

		// Get a modification watchpoint request
		fModificationWatchpointRequest = getModificationWatchpointRequest();
	}
	/**
	 * Make sure the test leaves the VM in the same state it found it.
	 */
	public void localTearDown() {
		// Delete the watchpoint requests we created in this test
		fVM.eventRequestManager().deleteEventRequest(fAccessWatchpointRequest);
		fVM.eventRequestManager().deleteEventRequest(
			fModificationWatchpointRequest);
	}
	/**
	 * Run all tests and output to standard output.
	 * @param args
	 */
	public static void main(java.lang.String[] args) {
		new WatchpointRequestTest().runSuite(args);
	}
	/**
	 * Gets the name of the test case.
	 * @see junit.framework.TestCase#getName()
	 */
	public String getName() {
		return "com.sun.jdi.request.WatchpointRequest";
	}
	/**
	 * Test JDI field().
	 */
	public void testJDIField() {
		assertEquals("1", getField("fBool"), fAccessWatchpointRequest.field());
		assertEquals(
			"2",
			getField("fBool"),
			fModificationWatchpointRequest.field());
	}
}
