@Test
	public void testReorderMoveFolder2Folder() throws Exception {
		// expand Strings
		ProgramNode stringsNode = root.getChild("Strings");
		expandNode(stringsNode);
		// expand DLLs
		ProgramNode dllsNode = root.getChild("DLLs");
		expandNode(dllsNode);
		setSelectionPath(dllsNode);
		ProgramNode lnode = stringsNode.getChild("L");
		collapseNode(lnode);

		// drag DLLs below L in Strings

		runSwingWithException(() -> {
			// place DLLs below L
			dndManager.add(lnode, new ProgramNode[] { dllsNode }, DnDConstants.ACTION_MOVE, 1);
		});
		waitForProgram(program);

		// verify that DLLs is the last child in Strings
		// verify that DLLs is still expanded
		// verify that DLLs remains selected
		// verify that DLLs is removed from the root folder
		assertEquals("DLLs", stringsNode.getLastChild().toString());
		ProgramNode node = stringsNode.getChild("DLLs");
		assertTrue(tree.isExpanded(node.getTreePath()));
		assertTrue(tree.isPathSelected(node.getTreePath()));
		assertNull(root.getChild("DLLs"));

		undo();
		stringsNode = root.getChild("Strings");
		assertEquals("L", stringsNode.getLastChild().toString());
		assertNull(stringsNode.getChild("DLLs"));
		assertNotNull(root.getChild("DLLs"));

		redo();
		stringsNode = root.getChild("Strings");
		assertEquals("DLLs", stringsNode.getLastChild().toString());
		node = stringsNode.getChild("DLLs");
		assertNull(root.getChild("DLLs"));
	}
Tests for drag/drop/reorder for copy and move in the program tree.
Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin3Test.java