1 /******************************************************************************* 2 * Copyright (c) 2010, 2014 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.jdt.debug.tests.breakpoints; 15 16 import org.eclipse.core.runtime.Path; 17 import org.eclipse.debug.core.IBreakpointManager; 18 import org.eclipse.debug.core.model.IBreakpoint; 19 import org.eclipse.jdt.debug.core.IJavaLineBreakpoint; 20 import org.eclipse.jdt.debug.core.IJavaMethodBreakpoint; 21 import org.eclipse.jdt.debug.core.IJavaWatchpoint; 22 import org.eclipse.jdt.debug.tests.TestUtil; 23 24 /** 25 * Tests the Java debugger's 'toggle breakpoints target'. 26 */ 27 public class TestToggleBreakpointsTarget extends AbstractToggleBreakpointsTarget { 28 TestToggleBreakpointsTarget(String name)29 public TestToggleBreakpointsTarget(String name) { 30 super(name); 31 } 32 33 /** 34 * Tests that qualified names get created for line breakpoints in external 35 * files. 36 * 37 * @throws Exception 38 */ testExternalLineBreakpoint()39 public void testExternalLineBreakpoint() throws Exception { 40 Listener listener = new Listener(); 41 IBreakpointManager manager = getBreakpointManager(); 42 manager.addBreakpointListener(listener); 43 try { 44 Path path = new Path("testfiles/source/SomeClass.java"); 45 toggleBreakpoint(path, 25); // 0 based offset in document line numbers 46 TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT); 47 IBreakpoint added = listener.getAdded(); 48 assertTrue("Should be a line breakpoint", added instanceof IJavaLineBreakpoint); 49 IJavaLineBreakpoint breakpoint = (IJavaLineBreakpoint) added; 50 assertEquals("Wrong line number", 26, breakpoint.getLineNumber()); 51 assertEquals("Wrong type name", "a.b.c.SomeClass", breakpoint.getTypeName()); 52 } finally { 53 manager.removeBreakpointListener(listener); 54 removeAllBreakpoints(); 55 } 56 } 57 58 /** 59 * Tests that qualified names get created for watchpoints in external 60 * files. 61 * 62 * @throws Exception 63 */ testExternalWatchpoint()64 public void testExternalWatchpoint() throws Exception { 65 Listener listener = new Listener(); 66 IBreakpointManager manager = getBreakpointManager(); 67 manager.addBreakpointListener(listener); 68 try { 69 Path path = new Path("testfiles/source/SomeClass.java"); 70 toggleBreakpoint(path, 22); // 0 based offset in document line numbers 71 TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT); 72 IBreakpoint added = listener.getAdded(); 73 assertTrue("Should be a watchpoint", added instanceof IJavaWatchpoint); 74 IJavaWatchpoint breakpoint = (IJavaWatchpoint) added; 75 assertEquals("Wrong type name", "a.b.c.SomeClass", breakpoint.getTypeName()); 76 assertEquals("Wrong field name", "someField", breakpoint.getFieldName()); 77 } finally { 78 manager.removeBreakpointListener(listener); 79 removeAllBreakpoints(); 80 } 81 } 82 83 /** 84 * Tests that qualified names get created for method breakpoints in external 85 * files. 86 * 87 * @throws Exception 88 */ testExternalMethodBreakpoint()89 public void testExternalMethodBreakpoint() throws Exception { 90 Listener listener = new Listener(); 91 IBreakpointManager manager = getBreakpointManager(); 92 manager.addBreakpointListener(listener); 93 try { 94 Path path = new Path("testfiles/source/SomeClass.java"); 95 toggleBreakpoint(path, 24); // 0 based offset in document line numbers 96 TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT); 97 IBreakpoint added = listener.getAdded(); 98 assertTrue("Should be a method breakpoint", added instanceof IJavaMethodBreakpoint); 99 IJavaMethodBreakpoint breakpoint = (IJavaMethodBreakpoint) added; 100 assertEquals("Wrong type name", "a.b.c.SomeClass", breakpoint.getTypeName()); 101 assertEquals("Wrong method name", "someMethod", breakpoint.getMethodName()); 102 // this will actually fail to suspend since 'SomeClass' is not qualified, but we can't resolve the type 103 // without a build path, etc. (not a regression) 104 assertEquals("Wrong signature", "(Ljava/lang/String;LSomeClass;)V", breakpoint.getMethodSignature()); 105 } finally { 106 manager.removeBreakpointListener(listener); 107 removeAllBreakpoints(); 108 } 109 } 110 111 } 112