| /******************************************************************************* |
| * Copyright (c) 2005, 2013 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.breakpoints; |
| |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.debug.internal.ui.DebugUIPlugin; |
| import org.eclipse.debug.internal.ui.breakpoints.provisional.IBreakpointOrganizer; |
| import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointSetOrganizer; |
| import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView; |
| import org.eclipse.debug.ui.IDebugView; |
| import org.eclipse.jdt.debug.core.IJavaLineBreakpoint; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.ui.IWorkingSet; |
| import org.eclipse.ui.progress.WorkbenchJob; |
| |
| /** |
| * Tests adding breakpoints and automatic addition to working sets. |
| * |
| * @since 3.2 |
| */ |
| public class BreakpointWorkingSetTests extends AbstractBreakpointWorkingSetTest { |
| |
| /** |
| * Constructor |
| * @param name |
| */ |
| public BreakpointWorkingSetTests(String name) { |
| super(name); |
| } |
| |
| /** |
| * Tests adding a breakpoint to the default working set |
| * @throws Exception |
| */ |
| public void testAddToDefaultWorkingSet() throws Exception { |
| String name = "TEST DEFAULT"; |
| IWorkingSet set = createSet(name); |
| try { |
| BreakpointSetOrganizer.setDefaultWorkingSet(set); |
| IJavaLineBreakpoint breakpoint = createLineBreakpoint(52, "Breakpoints"); |
| IAdaptable[] elements = set.getElements(); |
| assertEquals("Wrong number of breakpoints", 1, elements.length); |
| assertEquals("Wrong breakpoint", elements[0], breakpoint); |
| } finally { |
| removeAllBreakpoints(); |
| getWorkingSetManager().removeWorkingSet(set); |
| } |
| } |
| |
| /** |
| * Tests adding a breakpoint with no default working set |
| * @throws Exception |
| */ |
| public void testNoDefaultWorkingSet() throws Exception { |
| String name = "TEST DEFAULT"; |
| IWorkingSet set = createSet(name); |
| try { |
| BreakpointSetOrganizer.setDefaultWorkingSet(null); |
| createLineBreakpoint(52, "Breakpoints"); |
| IAdaptable[] elements = set.getElements(); |
| assertEquals("Wrong number of breakpoints", 0, elements.length); |
| } finally { |
| removeAllBreakpoints(); |
| getWorkingSetManager().removeWorkingSet(set); |
| } |
| } |
| |
| /** |
| * Tests that we can have N working set shown in the view and add additional breakpoints |
| * to the default ones without causing exceptions |
| * |
| * In this test we have to open / show the view to cause the insert update to occur |
| * |
| * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=380614 |
| * @throws Exception |
| * @since 3.8.100 |
| */ |
| public void testInsertIntoDefaultSet() throws Exception { |
| IWorkingSet set1 = createSet("One"); |
| try { |
| BreakpointSetOrganizer.setDefaultWorkingSet(set1); |
| IDebugView bpview = openDebugView("org.eclipse.debug.ui.BreakpointView"); |
| assertNotNull("we should have opened the breakpoints view", bpview); |
| final BreakpointsView view = (BreakpointsView) bpview; |
| final IBreakpointOrganizer o = getOrganizer("org.eclipse.debug.ui.breakpointWorkingSetOrganizer"); |
| assertNotNull("we should have found the working set breakpoint organizer", o); |
| //update the view organizers on the UI thread because it spawns viewer updates that require it |
| Display display = DebugUIPlugin.getStandardDisplay(); |
| if (!Thread.currentThread().equals(display.getThread())) { |
| WorkbenchJob job = new WorkbenchJob("updating working sets in the breakpoint view") { |
| @Override |
| public IStatus runInUIThread(IProgressMonitor monitor) { |
| view.setBreakpointOrganizers(new IBreakpointOrganizer[] {o}); |
| return Status.OK_STATUS; |
| } |
| }; |
| job.schedule(); |
| job.join(); |
| } |
| else { |
| view.setBreakpointOrganizers(new IBreakpointOrganizer[] {o}); |
| } |
| //add a bp |
| createLineBreakpoint(52, "Breakpoints"); |
| IAdaptable[] elements = set1.getElements(); |
| assertEquals("Wrong number of breakpoints", 1, elements.length); |
| BreakpointSetOrganizer.setDefaultWorkingSet(null); |
| //add another bp which will wind up in the 'Others' working set |
| createLineBreakpoint(53, "Breakpoints"); |
| createLineBreakpoint(30, "Breakpoints"); |
| } |
| catch(IndexOutOfBoundsException ioobe) { |
| fail("testInsertIntoDefaultSet: bug 380614 has not been fixed"); |
| } |
| finally { |
| removeAllBreakpoints(); |
| getWorkingSetManager().removeWorkingSet(set1); |
| } |
| } |
| } |