protected void testActionSetBreakpointProgram(DockingAction action,
			Set<TraceBreakpointKind> expectedKinds) throws Throwable {
		addMappedBreakpointOpenAndWait(); // Adds an unneeded breakpoint. Aw well.

		ProgramLocationActionContext ctx = staticCtx(addr(program, 0x0400321));
		assertTrue(action.isAddToPopup(ctx));
		performAction(action, ctx, false);
		DebuggerPlaceBreakpointDialog dialog =
			waitForDialogComponent(DebuggerPlaceBreakpointDialog.class);
		runSwing(() -> {
			dialog.setName("Test name");
			dialog.okCallback();
		});

		handleSetBreakpointInvocation(expectedKinds, 0x55550321);

		waitForPass(() -> {
			LogicalBreakpoint lb = Unique.assertOne(
				breakpointService.getBreakpointsAt(program, addr(program, 0x00400321)));
			assertEquals(expectedKinds, lb.getKinds());
			assertEquals(State.ENABLED, lb.computeState());
			assertEquals("Test name", lb.getName());
		});
	}
HACK: since service doesn't let me get markers for an address, change each that I care about
to have a distinct background color
Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/gui/breakpoint/AbstractDebuggerBreakpointMarkerPluginTest.java