1 /*******************************************************************************
2  * Copyright (c) 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.tests.TestUtil;
22 
23 /**
24  * Tests the Java debugger's 'toggle breakpoints target'.
25  */
26 public class TestToggleBreakpointsTarget8 extends AbstractToggleBreakpointsTarget {
27 
28 
29 
30 
TestToggleBreakpointsTarget8(String name)31 	public TestToggleBreakpointsTarget8(String name) {
32 		super(name);
33 		// TODO Auto-generated constructor stub
34 	}
35 
36 	/**
37 	 * Tests that qualified names get created for method breakpoints in default method of Java 8 interface
38 	 * files.
39 	 *
40 	 * @throws Exception
41 	 */
testInterfaceDefaultMethodBreakpoint()42 	public void testInterfaceDefaultMethodBreakpoint() throws Exception {
43 		Listener listener = new Listener();
44 		IBreakpointManager manager = getBreakpointManager();
45 		manager.addBreakpointListener(listener);
46 		try {
47 			Path path = new Path("java8/EvalTestIntf18.java");
48 			toggleBreakpoint(path, 23); // 0 based offset in document line numbers
49 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
50 			IBreakpoint added = listener.getAdded();
51 			assertTrue("Should be a method breakpoint", added instanceof IJavaMethodBreakpoint);
52 			IJavaMethodBreakpoint breakpoint = (IJavaMethodBreakpoint) added;
53 			assertEquals("Wrong type name", "Intf18", breakpoint.getTypeName());
54 			assertEquals("Wrong method name", "test2", breakpoint.getMethodName());
55 			assertEquals("Wrong signature", "()I", breakpoint.getMethodSignature());
56 		} finally {
57 			manager.removeBreakpointListener(listener);
58 			removeAllBreakpoints();
59 		}
60 	}
61 
62 	/**
63 	 * Tests that qualified names get created for method breakpoints in Static method of Java 8 interface
64 	 * files.
65 	 *
66 	 * @throws Exception
67 	 */
testInterfaceStaticMethodBreakpoint()68 	public void testInterfaceStaticMethodBreakpoint() throws Exception {
69 		Listener listener = new Listener();
70 		IBreakpointManager manager = getBreakpointManager();
71 		manager.addBreakpointListener(listener);
72 		try {
73 			Path path = new Path("java8/EvalTestIntf18.java");
74 			toggleBreakpoint(path, 28); // 0 based offset in document line numbers
75 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
76 			IBreakpoint added = listener.getAdded();
77 			assertTrue("Should be a method breakpoint", added instanceof IJavaMethodBreakpoint);
78 			IJavaMethodBreakpoint breakpoint = (IJavaMethodBreakpoint) added;
79 			assertEquals("Wrong type name", "Intf18", breakpoint.getTypeName());
80 			assertEquals("Wrong method name", "test3", breakpoint.getMethodName());
81 			assertEquals("Wrong signature", "()V", breakpoint.getMethodSignature());
82 		} finally {
83 			manager.removeBreakpointListener(listener);
84 			removeAllBreakpoints();
85 		}
86 	}
87 
88 
89 	/**
90 	 * Tests that qualified names does get created for method breakpoints in unimplemented method of Java 8 interface
91 	 * files.
92 	 *
93 	 * @throws Exception
94 	 */
testInterfaceUnimplementedMethodBreakpoint()95 	public void testInterfaceUnimplementedMethodBreakpoint() throws Exception {
96 		Listener listener = new Listener();
97 		IBreakpointManager manager = getBreakpointManager();
98 		manager.addBreakpointListener(listener);
99 		try {
100 			Path path = new Path("java8/EvalTestIntf18.java");
101 			toggleBreakpoint(path, 22); // 0 based offset in document line numbers
102 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
103 			assertTrue(listener.isEmpty());
104 		} finally {
105 			manager.removeBreakpointListener(listener);
106 			removeAllBreakpoints();
107 		}
108 	}
109 
110 	/**
111 	 * Tests that qualified names get created for line breakpoints in Interface implemented method
112 	 * files.
113 	 *
114 	 * @throws Exception
115 	 */
testInterfaceLineBreakpoint()116 	public void testInterfaceLineBreakpoint() throws Exception {
117 		Listener listener = new Listener();
118 		IBreakpointManager manager = getBreakpointManager();
119 		manager.addBreakpointListener(listener);
120 		try {
121 			Path path = new Path("java8/EvalTestIntf18.java");
122 			toggleBreakpoint(path, 24); // 0 based offset in document line numbers
123 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
124 			IBreakpoint added = listener.getAdded();
125 			assertTrue("Should be a line breakpoint", added instanceof IJavaLineBreakpoint);
126 			IJavaLineBreakpoint breakpoint = (IJavaLineBreakpoint) added;
127 			assertEquals("Wrong line number", 25, breakpoint.getLineNumber());
128 			assertEquals("Wrong type name", "Intf18", breakpoint.getTypeName());
129 		} finally {
130 			manager.removeBreakpointListener(listener);
131 			removeAllBreakpoints();
132 		}
133 	}
134 
135 }
136