@Test
	public void testAddObjectProperty() throws Exception {
		// ********************
		// *** DiffTestPgm1 ***
		// ********************
		// ** SPACE property
		// 0x10018ae: space=1.
		// 0x10018ba: space=1.
		// 0x10018ff: space=1.
		// 0x100248c: space=1.
		// ** testColor property
		// 0x100248c: testColor=CYAN.
		// 0x10039dd: testColor=BLACK.
		// 0x10039f8: testColor=BLACK.
		// 0x10039fe: testColor=RED.
		mtf.initialize("DiffTestPgm1", new ProgramModifierListener() {

			@Override
			public void modifyLatest(ProgramDB program) {
				PropertyMapManager pmm = program.getUsrPropertyManager();
				ObjectPropertyMap<?> opm = pmm.getObjectPropertyMap("testColor");
				assertNotNull(opm);
				opm.add(addr(program, "0x1002400"), new SaveableColor(Color.GRAY));
				opm.add(addr(program, "0x1002466"), new SaveableColor(Color.CYAN));
				opm.add(addr(program, "0x1002472"), new SaveableColor(Color.BLACK));
				opm.add(addr(program, "0x1002488"), new SaveableColor(Color.PINK));
				opm.add(addr(program, "0x100248a"), new SaveableColor(Color.GREEN));
				opm.add(addr(program, "0x100248c"), new SaveableColor(Color.WHITE));
			}

			@Override
			public void modifyPrivate(ProgramDB program) {
				PropertyMapManager pmm = program.getUsrPropertyManager();
				ObjectPropertyMap<?> opm = pmm.getObjectPropertyMap("testColor");
				assertNotNull(opm);
				opm.add(addr(program, "0x1002466"), new SaveableColor(Color.MAGENTA));
				opm.add(addr(program, "0x1002481"), new SaveableColor(Color.RED));
				opm.add(addr(program, "0x1002488"), new SaveableColor(Color.PINK));
				opm.add(addr(program, "0x100248a"), new SaveableColor(Color.CYAN));
				opm.add(addr(program, "0x100248c"), new SaveableColor(Color.YELLOW));
				opm.add(addr(program, "0x1002490"), new SaveableColor(Color.ORANGE));
			}
		});

		executeMerge(ASK_USER);
		chooseUserDefined(addr("0x1002466"), "testColor", KEEP_ORIGINAL);
		chooseUserDefined(addr("0x100248a"), "testColor", KEEP_LATEST);
		chooseUserDefined(addr("0x100248c"), "testColor", KEEP_MY);
		waitForMergeCompletion();

		PropertyMapManager pmm;
		ObjectPropertyMap<?> opm;
		pmm = resultProgram.getUsrPropertyManager();
		opm = pmm.getObjectPropertyMap("testColor");
		Address address = resultProgram.getMinAddress();

		address = opm.getNextPropertyAddress(address);
		assertEquals(addr("0x1002400"), address);
		assertEquals(new SaveableColor(Color.GRAY), opm.get(address));

		address = opm.getNextPropertyAddress(address);
		assertEquals(addr("0x1002472"), address);
		assertEquals(new SaveableColor(Color.BLACK), opm.get(address));

		address = opm.getNextPropertyAddress(address);
		assertEquals(addr("0x1002481"), address);
		assertEquals(new SaveableColor(Color.RED), opm.get(address));

		address = opm.getNextPropertyAddress(address);
		assertEquals(addr("0x1002488"), address);
		assertEquals(new SaveableColor(Color.PINK), opm.get(address));

		address = opm.getNextPropertyAddress(address);
		assertEquals(addr("0x100248a"), address);
		assertEquals(new SaveableColor(Color.GREEN), opm.get(address));

		address = opm.getNextPropertyAddress(address);
		assertEquals(addr("0x100248c"), address);
		assertEquals(new SaveableColor(Color.YELLOW), opm.get(address));

		address = opm.getNextPropertyAddress(address);
		assertEquals(addr("0x1002490"), address);
		assertEquals(new SaveableColor(Color.ORANGE), opm.get(address));

		address = opm.getNextPropertyAddress(address);
		assertEquals(addr("0x10039dd"), address);
		assertEquals(new SaveableColor(Color.BLACK), opm.get(address));

		address = opm.getNextPropertyAddress(address);
		assertEquals(addr("0x10039f8"), address);
		assertEquals(new SaveableColor(Color.BLACK), opm.get(address));

		address = opm.getNextPropertyAddress(address);
		assertEquals(addr("0x10039fe"), address);
		assertEquals(new SaveableColor(Color.RED), opm.get(address));

		address = opm.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