@Test
	public void testChangeDifferentSymbolNameSourceAtAddressInBoth() throws Exception {
		// 01003075: primary global "YYY"
		// 01003075: non-primary global "ZZZ"
		// 01003075: non-primary global "QQQ"

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

			@Override
			public void modifyLatest(ProgramDB program) {
				try {
					SymbolTable st = program.getSymbolTable();
					Symbol symbol = st.getGlobalSymbol("ZZZ", addr(program, "0x01003075"));
					assertEquals(SourceType.USER_DEFINED, symbol.getSource());
					symbol.setName("horse", SourceType.IMPORTED);
				}
				catch (Exception e) {
					Assert.fail(e.getMessage());
				}
			}

			@Override
			public void modifyPrivate(ProgramDB program) {
				try {
					SymbolTable st = program.getSymbolTable();
					Symbol symbol = st.getGlobalSymbol("QQQ", addr(program, "0x01003075"));
					assertEquals(SourceType.USER_DEFINED, symbol.getSource());
					symbol.setName("mule", SourceType.ANALYSIS);
				}
				catch (Exception e) {
					Assert.fail(e.getMessage());
				}
			}
		});

		executeMerge(ASK_USER);
		waitForMergeCompletion();

		SymbolTable symtab = resultProgram.getSymbolTable();
		Symbol s;
		Address addr = addr(resultProgram, "0x01003075");
		s = symtab.getGlobalSymbol("ZZZ", addr);
		assertNull(s);
		s = symtab.getGlobalSymbol("QQQ", addr);
		assertNull(s);
		s = getUniqueSymbol(resultProgram, "horse");
		checkSymbol(s, "horse", true);
		assertEquals(SourceType.IMPORTED, s.getSource());
		assertEquals(addr, s.getAddress());
		s = getUniqueSymbol(resultProgram, "mule");
		checkSymbol(s, "mule", true);
		assertEquals(SourceType.ANALYSIS, s.getSource());
		assertEquals(addr, s.getAddress());
	}
Test changing symbol name and source for different named symbols at the same
address in Latest and My.
Ghidra/Features/Base/src/test.slow/java/ghidra/app/merge/listing/SymbolMergeManagerSourceTest.java