@Test
	public void testUndoCheckOutModified() throws Exception {
		GTreeNode node = getNode(PROGRAM_A);
		addToVersionControl(node, false);

		selectNode(node);
		DockingActionIf action = getAction("CheckOut");
		performAction(action, getDomainFileActionContext(node), false);

		waitForTasks();

		// make a change to the program
		DomainFile df = ((DomainFileNode) node).getDomainFile();
		Program program = (Program) df.getDomainObject(this, true, false, TaskMonitor.DUMMY);
		int transactionID = program.startTransaction("test");
		try {
			program.getSymbolTable().createNameSpace(null, "myNamespace", SourceType.USER_DEFINED);
		}
		finally {
			program.endTransaction(transactionID, true);
			program.save(null, TaskMonitor.DUMMY);
		}
		program.release(this);
		program.flushEvents();

		DockingActionIf undoAction = getAction("UndoCheckOut");
		performAction(undoAction, getDomainFileActionContext(node), false);
		UndoActionDialog dialog = waitForDialogComponent(UndoActionDialog.class);
		assertNotNull(dialog);

		JCheckBox cb = (JCheckBox) findAbstractButtonByText(dialog.getComponent(),
			"Save copy of the file with a .keep extension");
		assertNotNull(cb);
		assertTrue(cb.isSelected());

		pressButtonByText(dialog, "OK");
		waitForTasks();

		df = ((DomainFileNode) node).getDomainFile();
		assertTrue(!df.isCheckedOut());
		Icon icon = df.getIcon(false);
		Icon[] icons = ((MultiIcon) icon).getIcons();
		Icon checkOutIcon = ResourceManager.loadImage("images/checkex.png");
		for (Icon element : icons) {
			if (checkOutIcon.equals(element)) {
				Assert.fail("Found unexpected check out icon!");
			}
		}

		DomainFileNode keepNode = getNode(PROGRAM_A + ".keep");
		assertNotNull(keepNode);
	}
Tests for version control (not multi user).
Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/framework/main/datatree/VersionControlAction1Test.java