@Test
	public void testSimpleAddSubClassAddSubNamespaceConflict2() throws Exception {

		final String libname = "user32.dll";
		final String parentNamespace = "MyNamespace";
		final String namespace1 = "blue";
		final String namespace2 = "green";
		final String class1 = "red";
		final String class2 = "yellow";

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

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

				Namespace ns =
					mergeProgram.createNamespace(parentNS, namespace1, SourceType.USER_DEFINED);
				assertNotNull(ns);

				ns = mergeProgram.createNamespace(parentNS, namespace2, SourceType.USER_DEFINED);
				assertNotNull(ns);

				ns = mergeProgram.createClass(parentNS, class1, SourceType.USER_DEFINED);
				assertNotNull(ns);

				ns = mergeProgram.createClass(parentNS, class2, SourceType.USER_DEFINED);
				assertNotNull(ns);
			}

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

				Namespace ns =
					mergeProgram.createClass(parentNS, namespace1, SourceType.USER_DEFINED);
				assertNotNull(ns);

				ns = mergeProgram.createClass(parentNS, namespace2, SourceType.USER_DEFINED);
				assertNotNull(ns);

				ns = mergeProgram.createNamespace(parentNS, class1, SourceType.USER_DEFINED);
				assertNotNull(ns);

				ns = mergeProgram.createNamespace(parentNS, class2, SourceType.USER_DEFINED);
				assertNotNull(ns);
			}
		});

		executeMerge(ASK_USER);
		waitForReadTextDialog("Symbol Merge Information", "The following symbols were renamed",
			4000);
		waitForMergeCompletion();

		Namespace externalLibrary =
			(Namespace) resultProgram.getSymbolTable().getLibrarySymbol(libname).getObject();
		Namespace myNamespace =
			(Namespace) getUniqueSymbol(resultProgram, parentNamespace, externalLibrary)
					.getObject();
		Symbol blue = getUniqueSymbol(resultProgram, namespace1, myNamespace);
		Symbol blueConflict =
			getUniqueSymbol(resultProgram, namespace1 + "_conflict1", myNamespace);
		Symbol green = getUniqueSymbol(resultProgram, namespace2, myNamespace);
		Symbol greenConflict =
			getUniqueSymbol(resultProgram, namespace2 + "_conflict1", myNamespace);
		Symbol red = getUniqueSymbol(resultProgram, class1, myNamespace);
		Symbol redConflict = getUniqueSymbol(resultProgram, class1 + "_conflict1", myNamespace);
		Symbol yellow = getUniqueSymbol(resultProgram, class2, myNamespace);
		Symbol yellowConflict = getUniqueSymbol(resultProgram, class2 + "_conflict1", myNamespace);
		assertEquals(SymbolType.NAMESPACE, blue.getSymbolType());
		assertEquals(SymbolType.CLASS, blueConflict.getSymbolType());
		assertEquals(SymbolType.NAMESPACE, green.getSymbolType());
		assertEquals(SymbolType.CLASS, greenConflict.getSymbolType());
		assertEquals(SymbolType.CLASS, red.getSymbolType());
		assertEquals(SymbolType.NAMESPACE, redConflict.getSymbolType());
		assertEquals(SymbolType.CLASS, yellow.getSymbolType());
		assertEquals(SymbolType.NAMESPACE, yellowConflict.getSymbolType());
	}
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