@Test
	public void testAddStringProperty3() throws Exception {
		mtf.initialize("DiffTestPgm1", new OriginalProgramModifierListener() {

			@Override
			public void modifyOriginal(ProgramDB program) throws Exception {
				PropertyMapManager pmm = program.getUsrPropertyManager();
				try {
					StringPropertyMap pm = pmm.createStringPropertyMap("testMap");
					pm.add(addr(program, "0x1002100"), "A");
					pm.add(addr(program, "0x1002166"), "B");
				}
				catch (DuplicateNameException e) {
					e.printStackTrace();
				}
			}

			@Override
			public void modifyPrivate(ProgramDB program) {
				PropertyMapManager pmm = program.getUsrPropertyManager();
				try {
					pmm.removePropertyMap("testMap");

					IntPropertyMap pm = pmm.createIntPropertyMap("testMap");
					pm.add(addr(program, "0x1002100"), 1);
					pm.add(addr(program, "0x1002166"), 2);
				}
				catch (DuplicateNameException e) {
					e.printStackTrace();
				}
			}

			@Override
			public void modifyLatest(ProgramDB program) {
				PropertyMapManager pmm = program.getUsrPropertyManager();
				try {
					pmm.removePropertyMap("testMap");

					LongPropertyMap pm = pmm.createLongPropertyMap("testMap");
					pm.add(addr(program, "0x1002100"), 1);
					pm.add(addr(program, "0x1002166"), 2);
				}
				catch (DuplicateNameException e) {
					e.printStackTrace();
				}
			}

		});

		executeMerge(ASK_USER);

		AbstractErrDialog errDlg = waitForErrorDialog();
		String message = errDlg.getMessage();
		assertEquals("Latest and Checked Out program versions do not have the same type for " +
			"'testMap' property.", message);
		pressButtonByText(errDlg, "OK");

		chooseUserDefined(addr("0x1002100"), "testMap", KEEP_ORIGINAL);
		chooseUserDefined(addr("0x1002166"), "testMap", KEEP_LATEST);

		waitForMergeCompletion();

		PropertyMapManager pmm = resultProgram.getUsrPropertyManager();

		PropertyMap<?> pm = pmm.getPropertyMap("testMap");
		Address address = resultProgram.getMinAddress();

		address = pm.getNextPropertyAddress(address);
		assertEquals(addr("0x1002166"), address);
		assertEquals(2L, pm.get(address));

		// TODO: Incompatible maps result in silently discarded property values selected during
		// merge.  This should be handled at map-level and not as a address-level conflict.
		// (See GP-2585)

		address = pm.getNextPropertyAddress(address);
		assertNull(address);
	}
Test the merge of the versioned program's listing.
Ghidra/Features/Base/src/test.slow/java/ghidra/app/merge/listing/UserDefinedPropertyMergeManagerTest.java