@Test
	public void testAddDiffExternalLabelChooseMy() throws Exception {

		final String libname = "user32.dll";
		final String parentNamespace = "MyNamespace";
		final String label = "apples";
		final String address1 = "0x100";
		final String address2 = "0x120";

		mtf.initialize("NotepadMergeListingTest", new MergeProgramModifier() {

			@Override
			public void initializeProgram(MergeProgram program) throws Exception {
				program.addMemory("memory", "0x0", 0x200);
			}

			@Override
			public void modifyLatest(MergeProgram mergeProgram) throws Exception {
				Library library =
					mergeProgram.createExternalLibrary(libname, SourceType.USER_DEFINED);
				Namespace namespace =
					mergeProgram.createNamespace(library, parentNamespace, SourceType.USER_DEFINED);
				mergeProgram.addExternalLocation(namespace, label, address1,
					SourceType.USER_DEFINED);

			}

			@Override
			public void modifyPrivate(MergeProgram mergeProgram) throws Exception {
				Library library =
					mergeProgram.createExternalLibrary(libname, SourceType.USER_DEFINED);
				Namespace namespace =
					mergeProgram.createNamespace(library, parentNamespace, SourceType.USER_DEFINED);
				mergeProgram.addExternalLocation(namespace, label, address2,
					SourceType.USER_DEFINED);
			}
		});

		executeMerge(ASK_USER);
		chooseButtonAndApply("Resolve External Add Conflict", MY_BUTTON);
		waitForMergeCompletion();

		Namespace externalLibrary =
			(Namespace) resultProgram.getSymbolTable().getLibrarySymbol(libname).getObject();
		assertNotNull(externalLibrary);
		Namespace myNamespace =
			(Namespace) getUniqueSymbol(resultProgram, parentNamespace, externalLibrary)
					.getObject();
		assertNotNull(myNamespace);
		Symbol apples = getUniqueSymbol(resultProgram, label, myNamespace);
		Symbol applesConflict = getUniqueSymbol(resultProgram, label + "_conflict1", myNamespace);
		assertEquals(SymbolType.LABEL, apples.getSymbolType());
		assertNull(applesConflict);
		ExternalLocation externalLocation = (ExternalLocation) apples.getObject();
		assertEquals(label, externalLocation.getLabel());
		assertEquals(libname, externalLocation.getLibraryName());
		assertEquals(parentNamespace, externalLocation.getParentName());
		assertEquals(libname + "::" + parentNamespace,
			externalLocation.getParentNameSpace().getName(true));
		assertEquals(null, externalLocation.getFunction());
		assertEquals(libname + "::" + parentNamespace + "::" + label,
			externalLocation.getSymbol().getName(true));
		assertEquals(SourceType.USER_DEFINED, externalLocation.getSource());
		assertEquals(addr(resultProgram, address2), externalLocation.getAddress());
	}
The external function merger only detects and merges source differences when a name
difference is being merged.
Ghidra/Features/Base/src/test.slow/java/ghidra/app/merge/listing/ExternalMergerAddTest.java