@Test
	public void testAddProgramBreakpointWithSleighThenMapThenEnableOnTraceCopiesSleigh()
			throws Throwable {
		createTrace();
		traceManager.openTrace(tb.trace);
		createProgramFromTrace();
		intoProject(program);
		programManager.openProgram(program);

		addEnabledProgramBreakpointWithSleigh(program);
		waitOn(breakpointService.changesSettled());
		LogicalBreakpoint lb = Unique.assertAtMostOne(
			breakpointService.getBreakpointsAt(program, addr(program, 0x00400123)));

		assertEquals("r0=0xbeef;", lb.getEmuSleigh());

		addTextMappingDead(0, program, tb);
		waitOn(mappingService.changesSettled());
		waitOn(breakpointService.changesSettled());
		lb = Unique.assertOne(
			breakpointService.getBreakpointsAt(program, addr(program, 0x00400123)));
		assertTrue(lb.getMappedTraces().contains(tb.trace));

		waitOn(lb.enable());
		waitForDomainObject(program);
		waitOn(breakpointService.changesSettled());

		TraceBreakpoint bpt = Unique.assertOne(
			tb.trace.getBreakpointManager().getBreakpointsAt(0, tb.addr(0x55550123)));
		assertEquals("r0=0xbeef;", bpt.getEmuSleigh(0));
	}
NB. The target could still be mid transaction. If we open this transaction too soon, then
the breakpoint gets aborted as well.
Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/service/breakpoint/AbstractDebuggerLogicalBreakpointServiceTest.java