@Test
	public void testReorderMoveFrag2Folder() throws Exception {

		// expand Strings
		ProgramNode stringsNode = root.getChild("Strings");
		expandNode(stringsNode);
		// expand Not Real Blocks
		ProgramNode nrbNode = root.getChild("Not Real Blocks");
		expandNode(nrbNode);

		ProgramNode debugNode = root.getChild(".debug_data");
		ProgramNode cnode = stringsNode.getChild("CC");

		setSelectionPath(debugNode);

		// drag .debug_data to Strings and place it above C

		runSwingWithException(() -> {
			dndManager.add(cnode, new ProgramNode[] { debugNode }, DnDConstants.ACTION_MOVE, -1);
		});
		waitForProgram(program);

		// verify that .debug_data is the first child in Strings
		// .debug_data should remain selected
		// .debug_data should be removed from Not Real Blocks
		assertEquals(".debug_data", stringsNode.getFirstChild().toString());
		ProgramNode node = stringsNode.getChild(".debug_data");
		assertTrue(tree.isPathSelected(node.getTreePath()));
		assertNull(root.getChild(".debug_data"));

		undo();
		stringsNode = root.getChild("Strings");
		assertEquals("CC", stringsNode.getFirstChild().toString());
		assertNotNull(root.getChild(".debug_data"));

		redo();
		stringsNode = root.getChild("Strings");
		assertEquals(".debug_data", stringsNode.getFirstChild().toString());
		node = stringsNode.getChild(".debug_data");
		assertNull(root.getChild(".debug_data"));
	}
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