@Test
	public void testDeleteLatestAddMy_KeepMy() throws Exception {

		mtf.initialize(notepad, new OriginalProgramModifierListener() {

			@Override
			public void modifyLatest(ProgramDB program) throws Exception {
				deleteTag(program, TAG_NAME_A);
			}

			@Override
			public void modifyPrivate(ProgramDB program) throws Exception {
				addTagToFunction(TAG_NAME_A, program, "100194b");
			}

			@Override
			public void modifyOriginal(ProgramDB program) throws Exception {
				FunctionTagManager tagManager = getTagManager(program);
				tagManager.createFunctionTag(TAG_NAME_A, "");
			}
		});

		executeMerge(ASK_USER);
		chooseListingFunctionTagButton(MY_BUTTON, addr("100194b"), false);
		waitForMergeCompletion();

		// Get the result program and check that:
		// 1. The tag still exists in the db
		// 2. The tag is assigned to the function
		assertTrue(isTagInProgram(TAG_NAME_A, mtf.getResultProgram()));
		assertTrue(isTagInFunction(TAG_NAME_A, mtf.getResultProgram(), "100194b"));
	}
Tests that we handle the conflict case where a tag name has been deleted in Latest
but added to a function in My; keep My.

This is arguably the most complicated type of test case as it involves two 
mergers: {@link FunctionTagMerger} and {@link FunctionTagListingMerger}. First the
delete is handled (and approved) by the former, then the tag is brought back in by 
latter.

@throws Exception
Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/function/tags/FunctionTagMergeTest.java