@Test
	public void testAddClassAndFunctionNoConflict() throws Exception {
		mtf.initialize("NotepadMergeListingTest", new ProgramModifierListener() {

			@Override
			public void modifyLatest(ProgramDB program) {
				try {
					SymbolTable symtab = program.getSymbolTable();
					GhidraClass gc;
					Function f;
					gc = symtab.createClass(program.getGlobalNamespace(), "NewLatestClass",
						SourceType.USER_DEFINED);
					f = getFunction(program, "0x1002a91");
					f.setParentNamespace(gc);
					f.setName("popcorn", SourceType.USER_DEFINED);
					gc = symtab.createClass(program.getGlobalNamespace(), "NewSameClass",
						SourceType.USER_DEFINED);
					f = getFunction(program, "0x1006420");
					f.setParentNamespace(gc);
				}
				catch (Exception e) {
					Assert.fail(e.getMessage());
				}
			}

			@Override
			public void modifyPrivate(ProgramDB program) {
				try {
					SymbolTable symtab = program.getSymbolTable();
					GhidraClass gc;
					Function f;
					gc = symtab.createClass(program.getGlobalNamespace(), "NewMyClass",
						SourceType.USER_DEFINED);
					f = getFunction(program, "0x1002c93");
					f.setParentNamespace(gc);
					f.setName("peanuts", SourceType.USER_DEFINED);
					gc = symtab.createClass(program.getGlobalNamespace(), "NewSameClass",
						SourceType.USER_DEFINED);
					f = getFunction(program, "0x1003bed");
					f.setParentNamespace(gc);
					f.setName("CrackerJacks", SourceType.USER_DEFINED);
				}
				catch (Exception e) {
					Assert.fail(e.getMessage());
				}
			}
		});

		resultProgram = mtf.getResultProgram();
		resultAddressFactory = resultProgram.getAddressFactory();

		executeMerge(ASK_USER);
		waitForMergeCompletion();

		SymbolTable symtab = resultProgram.getSymbolTable();
		Symbol latest = getUniqueSymbol(resultProgram, "NewLatestClass");
		Symbol my = getUniqueSymbol(resultProgram, "NewMyClass");
		Symbol same = getUniqueSymbol(resultProgram, "NewSameClass");
		assertEquals(SymbolType.CLASS, latest.getSymbolType());
		assertEquals(SymbolType.CLASS, my.getSymbolType());
		assertEquals(SymbolType.CLASS, same.getSymbolType());
		GhidraClass latestGc = (GhidraClass) latest.getObject();
		GhidraClass myGc = (GhidraClass) my.getObject();
		GhidraClass sameGc = (GhidraClass) same.getObject();
		Symbol popcorn = symtab.getSymbol("popcorn", addr("0x1002a91"), latestGc);
		Symbol peanuts = symtab.getSymbol("peanuts", addr("0x1002c93"), myGc);
		Symbol crackerjacks = symtab.getSymbol("CrackerJacks", addr("0x1003bed"), sameGc);
		Symbol entry = symtab.getSymbol("entry", addr("0x1006420"), sameGc);
		assertNotNull(popcorn);
		assertNotNull(peanuts);
		assertNotNull(crackerjacks);
		assertNotNull(entry);
		assertEquals(SymbolType.FUNCTION, popcorn.getSymbolType());
		assertEquals(SymbolType.FUNCTION, peanuts.getSymbolType());
		assertEquals(SymbolType.FUNCTION, crackerjacks.getSymbolType());
		assertEquals(SymbolType.FUNCTION, entry.getSymbolType());
		assertEquals(latestGc, popcorn.getParentNamespace());
		assertEquals(myGc, peanuts.getParentNamespace());
		assertEquals(sameGc, crackerjacks.getParentNamespace());
		assertEquals(sameGc, entry.getParentNamespace());
	}
Test the merge of the versioned program's symbols in the listing.
Ghidra/Features/Base/src/test.slow/java/ghidra/app/merge/listing/SymbolMergeManagerNamespace1Test.java