@Test
	public void testDnDFolder2Fragment() throws Exception {
		// drag a folder that has fragments and subfolders onto a fragment
		// verify that all code units from the dragged folder are moved
		// to the destination fragment
		// verify that the dragged folder and descendants are removed
		// from the program

		AddressSet set = new AddressSet();
		// first create a folder and add fragments and folders to it
		int transactionID = program.startTransaction("test");
		ProgramModule m = root.getModule().createModule("Test");
		m.add(listing.getFragment("Main Tree", ".text"));
		m.add(listing.getFragment("Main Tree", ".debug_data"));
		m.add(listing.getModule("Main Tree", "Subroutines"));
		m.add(listing.getModule("Main Tree", "Functions"));
		program.endTransaction(transactionID, true);
		set.add(m.getAddressSet());
		waitForProgram(program);

		expandNode(root);

		ProgramNode testNode = root.getChild("Test");

		setSelectionPath(testNode);
		ProgramNode stringsNode = root.getChild("Strings");
		visitNode(stringsNode);
		ProgramNode cNode = stringsNode.getChild("L");
		visitNode(cNode);
		ProgramNode fnode = cNode.getChild("testl");
		//
		// drag Test to testl
		ProgramNode n = testNode;
		ProgramNode tgtNode = fnode;
		dragNodes_Move(tgtNode, Arrays.asList(n));

		root = (ProgramNode) tree.getModel().getRoot();
		// reacquire nodes
		expandNode(root);
		stringsNode = root.getChild("Strings");
		visitNode(stringsNode);
		cNode = stringsNode.getChild("L");
		visitNode(cNode);
		fnode = cNode.getChild("testl");

		assertTrue(fnode.getFragment().contains(set));
		assertNull(listing.getModule("Main Tree", "Test"));
		assertNull(listing.getModule("Main Tree", "Subroutines"));
		assertNull(listing.getModule("Main Tree", "Functions"));
		assertNull(listing.getFragment("Main Tree", ".text"));
		assertNull(listing.getFragment("Main Tree", ".debug_data"));
		assertEquals(0, findNodes("Test").length);
		assertEquals(0, findNodes("Subroutines").length);
		assertEquals(0, findNodes("Functions").length);
		assertEquals(0, findNodes(".text").length);
		assertEquals(0, findNodes(".debug_data").length);

		undo();
		stringsNode = root.getChild("Strings");
		visitNode(stringsNode);
		cNode = stringsNode.getChild("L");
		visitNode(cNode);
		fnode = cNode.getChild("testl");

		assertFalse(fnode.getFragment().contains(set));
		expandNode(root);
		testNode = root.getChild("Test");
		assertNotNull(testNode);
		assertNotNull(testNode.getChild("Subroutines"));
		assertNotNull(testNode.getChild("Functions"));
		assertNotNull(testNode.getChild(".text"));
		assertNotNull(testNode.getChild(".debug_data"));

		redo();
		stringsNode = root.getChild("Strings");
		visitNode(stringsNode);
		cNode = stringsNode.getChild("L");
		visitNode(cNode);
		fnode = cNode.getChild("testl");
		assertTrue(fnode.getFragment().contains(set));
		assertNull(listing.getModule("Main Tree", "Test"));
		assertNull(listing.getModule("Main Tree", "Subroutines"));
		assertNull(listing.getModule("Main Tree", "Functions"));
		assertNull(listing.getFragment("Main Tree", ".text"));
		assertNull(listing.getFragment("Main Tree", ".debug_data"));
		assertEquals(0, findNodes("Test").length);
		assertEquals(0, findNodes("Subroutines").length);
		assertEquals(0, findNodes("Functions").length);
		assertEquals(0, findNodes(".text").length);
		assertEquals(0, findNodes(".debug_data").length);

	}
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