From 21c71c719be21641e712ce0ff0ddc4a5b9acb2b4 Mon Sep 17 00:00:00 2001 From: dragonmacher <48328597+dragonmacher@users.noreply.github.com> Date: Wed, 22 May 2024 11:48:30 -0400 Subject: [PATCH] Test fixes --- .../SymbolGTreeDragNDropHandler.java | 22 ++--- .../symboltree/SymbolTreePlugin3Test.java | 82 ++++++------------- 2 files changed, 36 insertions(+), 68 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolGTreeDragNDropHandler.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolGTreeDragNDropHandler.java index d12c57507c..b4d66c4d80 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolGTreeDragNDropHandler.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolGTreeDragNDropHandler.java @@ -100,7 +100,7 @@ public class SymbolGTreeDragNDropHandler implements GTreeDragNDropHandler { } private void dropProgramSelection(Namespace namespace, SelectionTransferData selectionData) { - List symbolsToMove = new ArrayList(); + List symbolsToMove = new ArrayList<>(); Program program = plugin.getProgram(); FunctionManager functionManager = program.getFunctionManager(); AddressSetView addressSet = selectionData.getAddressSet(); @@ -118,7 +118,7 @@ public class SymbolGTreeDragNDropHandler implements GTreeDragNDropHandler { private void dropNodeList(Namespace namespace, Object transferData) { @SuppressWarnings("unchecked") List nodeList = (List) transferData; - List symbolsToMoveList = new ArrayList(); + List symbolsToMoveList = new ArrayList<>(); for (GTreeNode node : nodeList) { // we only allow dragging of SymbolNodes SymbolNode symbolNode = (SymbolNode) node; @@ -167,7 +167,7 @@ public class SymbolGTreeDragNDropHandler implements GTreeDragNDropHandler { @Override public DataFlavor[] getSupportedDataFlavors(List transferNodes) { - Set flavorSet = new HashSet(); + Set flavorSet = new HashSet<>(); for (GTreeNode node : transferNodes) { SymbolTreeNode symbolNode = (SymbolTreeNode) node; DataFlavor flavor = symbolNode.getNodeDataFlavor(); @@ -189,16 +189,16 @@ public class SymbolGTreeDragNDropHandler implements GTreeDragNDropHandler { if (SymbolDataFlavor.DATA_FLAVOR.equals(flavor)) { return getSymbols(transferNodes); } - - List flavorNodes = new ArrayList<>(); - for (GTreeNode node : transferNodes) { - SymbolTreeNode symbolNode = (SymbolTreeNode) node; - DataFlavor nodeFlavor = symbolNode.getNodeDataFlavor(); - if (Objects.equals(flavor, nodeFlavor)) { - flavorNodes.add(symbolNode); + else if (SymbolTreeDataFlavor.DATA_FLAVOR.equals(flavor)) { + List nodes = new ArrayList<>(); + for (GTreeNode node : transferNodes) { + SymbolTreeNode symbolNode = (SymbolTreeNode) node; + nodes.add(symbolNode); } + return nodes; } - return flavorNodes; + + throw new UnsupportedFlavorException(flavor); } private SymbolTransferData getSymbols(List transferNodes) { diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/symboltree/SymbolTreePlugin3Test.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/symboltree/SymbolTreePlugin3Test.java index c1b22bfa17..9403a1b606 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/symboltree/SymbolTreePlugin3Test.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/symboltree/SymbolTreePlugin3Test.java @@ -23,7 +23,6 @@ import java.awt.dnd.DnDConstants; import java.util.*; import java.util.stream.Collectors; -import javax.swing.SwingUtilities; import javax.swing.tree.TreePath; import org.junit.*; @@ -40,7 +39,6 @@ import ghidra.app.plugin.core.programtree.ProgramTreePlugin; import ghidra.app.plugin.core.symboltree.nodes.*; import ghidra.app.util.viewer.field.LabelFieldFactory; import ghidra.framework.options.SaveState; -import ghidra.framework.plugintool.Plugin; import ghidra.framework.plugintool.PluginTool; import ghidra.framework.plugintool.util.PluginException; import ghidra.program.model.listing.GhidraClass; @@ -51,9 +49,6 @@ import ghidra.test.TestEnv; /** * More tests for the SymbolTreePlugin. - * - * - * */ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { @@ -114,7 +109,7 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { DataFlavor flavor = ((SymbolTreeNode) gNode).getNodeDataFlavor(); GTreeDragNDropHandler dnd = util.getTree().getDragNDropHandler(); - assertTrue(!dnd.isDropSiteOk(dNode, new DataFlavor[] { flavor }, DnDConstants.ACTION_MOVE)); + assertFalse(dnd.isDropSiteOk(dNode, new DataFlavor[] { flavor }, DnDConstants.ACTION_MOVE)); } @Test @@ -133,29 +128,12 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { DataFlavor flavor = ((SymbolTreeNode) gNode).getNodeDataFlavor(); GTreeDragNDropHandler dnd = util.getTree().getDragNDropHandler(); - assertTrue( - !dnd.isDropSiteOk(extNode, new DataFlavor[] { flavor }, DnDConstants.ACTION_MOVE)); - assertTrue( - !dnd.isDropSiteOk(extNode, new DataFlavor[] { flavor }, DnDConstants.ACTION_COPY)); + DataFlavor[] flavors = new DataFlavor[] { flavor }; + assertFalse(dnd.isDropSiteOk(extNode, flavors, DnDConstants.ACTION_MOVE)); + assertFalse(dnd.isDropSiteOk(extNode, flavors, DnDConstants.ACTION_COPY)); } - @Test - public void testStartDragOK() throws Exception { - GTreeNode fNode = rootNode.getChild(2); - util.expandNode(fNode); - GTreeNode gNode = fNode.getChild(1); - util.expandNode(gNode); - GTreeNode pNode = gNode.getChild(0); - List list = new ArrayList<>(); - list.add(pNode); - GTreeNode p2Node = gNode.getChild(1); - list.add(p2Node); - - GTreeDragNDropHandler dnd = util.getTree().getDragNDropHandler(); - assertTrue(!dnd.isStartDragOk(list, DnDConstants.ACTION_MOVE)); - } - @Test public void testDragDrop() throws Exception { GTreeNode nsParentNode = rootNode.getChild(5); @@ -192,13 +170,13 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { private void doDrag(final GTreeNode destinationNode, final int dragAction, GTreeNode... dragNode) { - final GTreeDragNDropHandler dragNDropHandler = util.getTree().getDragNDropHandler(); + GTreeDragNDropHandler dragNDropHandler = util.getTree().getDragNDropHandler(); List dropList = new ArrayList<>(); for (GTreeNode gTreeNode : dragNode) { dropList.add(gTreeNode); } - final Transferable transferable = new GTreeNodeTransferable(dragNDropHandler, dropList); + Transferable transferable = new GTreeNodeTransferable(dragNDropHandler, dropList); executeOnSwingWithoutBlocking( () -> dragNDropHandler.drop(destinationNode, transferable, dragAction)); @@ -211,7 +189,7 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { final ToggleDockingAction goToToggleAction = (ToggleDockingAction) getAction(plugin, "Navigation"); - SwingUtilities.invokeAndWait(() -> goToToggleAction.setSelected(true)); + runSwing(() -> goToToggleAction.setSelected(true)); GTreeNode cNode = rootNode.getChild(4); GTreeNode nsNode = util.createObject(cNode, "MyClass", createClassAction); assertNotNull(nsNode); @@ -264,18 +242,13 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { String[] names = new String[] { "aNamespace", "MYnamespace", "Bnamespace", "AaNamespace", "Cnamespace" }; List list = new ArrayList<>(); - int transactionID = program.startTransaction("test"); - - try { + tx(program, () -> { for (String element : names) { Namespace ns = symTable.createNameSpace(program.getGlobalNamespace(), element, SourceType.USER_DEFINED); list.add(ns.getSymbol()); } - } - finally { - program.endTransaction(transactionID, true); - } + }); Collections.sort(list, util.getSymbolComparator()); @@ -306,13 +279,13 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { .filter(symbol -> symbol.getSymbolType() == SymbolType.NAMESPACE) .map(symbol -> symbol.getName()) .collect(Collectors.toList()); - //@formatter:off + //@formatter:on // // This is the way we currently sort, documented here for posterity. // - List expectedOrder = - Arrays.asList( "AaNamespace", "aNamespace", "Bnamespace", "Cnamespace", "MYnamespace" ); + List expectedOrder = + Arrays.asList("AaNamespace", "aNamespace", "Bnamespace", "Cnamespace", "MYnamespace"); assertEquals(expectedOrder.size(), symbolNames.size()); assertEquals(expectedOrder, symbolNames); @@ -324,21 +297,16 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { String[] names = new String[] { "BClass", "MYclass", "bBClass", "Aaclass", "Cclass", "_anotherClass" }; List list = new ArrayList<>(); - int transactionID = program.startTransaction("test"); - try { + tx(program, () -> { for (String element : names) { GhidraClass gc = symTable.createClass(program.getGlobalNamespace(), element, SourceType.USER_DEFINED); list.add(gc.getSymbol()); } - } - finally { - program.endTransaction(transactionID, true); - } + }); program.flushEvents(); - waitForSwing(); util.waitForTree(); GTreeNode cnode = rootNode.getChild(4); @@ -351,12 +319,12 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { .filter(symbol -> symbol.getSymbolType() == SymbolType.CLASS) .map(symbol -> symbol.getName()) .collect(Collectors.toList()); - //@formatter:off + //@formatter:on // // This is the way we currently sort, documented here for posterity. // - List expectedOrder = + List expectedOrder = Arrays.asList("_anotherClass", "Aaclass", "bBClass", "BClass", "Cclass", "MYclass"); assertEquals(expectedOrder.size(), symbolNames.size()); @@ -368,15 +336,15 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { final ToggleDockingAction goToToggleAction = (ToggleDockingAction) getAction(plugin, "Navigation"); assertNotNull(goToToggleAction); - SwingUtilities.invokeAndWait(() -> goToToggleAction.setSelected(true)); + runSwing(() -> goToToggleAction.setSelected(true)); SaveState saveState = new SaveState("Test"); plugin.writeConfigState(saveState); assertTrue(saveState.getBoolean("GO_TO_TOGGLE_STATE", false)); - SwingUtilities.invokeAndWait(() -> { - tool.removePlugins(new Plugin[] { plugin }); + runSwing(() -> { + tool.removePlugins(List.of(plugin)); try { tool.addPlugin(SymbolTreePlugin.class.getName()); } @@ -391,7 +359,7 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { ToggleDockingAction goToToggleAction2 = (ToggleDockingAction) getAction(plugin, "Navigation"); assertNotNull(goToToggleAction2); - assertTrue(!goToToggleAction2.isSelected()); + assertFalse(goToToggleAction2.isSelected()); plugin.readConfigState(saveState); assertTrue(goToToggleAction2.isSelected()); @@ -406,7 +374,7 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { program.flushEvents(); util.waitForTree(); - SwingUtilities.invokeAndWait(() -> util.getTree().stopEditing()); + runSwing(() -> util.getTree().stopEditing()); GTreeNode nsParentNode = rootNode.getChild(5); util.expandNode(nsParentNode); @@ -418,11 +386,11 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { GTreeNode classesRoot = rootNode.getChild("Classes"); util.selectNode(classesRoot); assertTrue(createClassAction.isEnabledForContext(util.getSymbolTreeContext())); - performAction(createClassAction,util.getSymbolTreeContext(), true); + performAction(createClassAction, util.getSymbolTreeContext(), true); program.flushEvents(); util.waitForTree(); - SwingUtilities.invokeAndWait(() -> util.getTree().stopEditing()); + runSwing(() -> util.getTree().stopEditing()); GTreeNode cParentNode = rootNode.getChild(4); util.expandNode(cParentNode); assertEquals(1, cParentNode.getChildCount()); @@ -433,14 +401,14 @@ public class SymbolTreePlugin3Test extends AbstractGhidraHeadedIntegrationTest { GTreeNode cNode = rootNode.getChild(4); util.selectNode(cNode); assertTrue(createClassAction.isEnabledForContext(util.getSymbolTreeContext())); - assertTrue(!createNamespaceAction.isEnabledForContext(util.getSymbolTreeContext())); + assertFalse(createNamespaceAction.isEnabledForContext(util.getSymbolTreeContext())); } @Test public void testActionsEnabledOnNamespaceNode() throws Exception { GTreeNode nsParentNode = rootNode.getChild(5); util.selectNode(nsParentNode); - assertTrue(!createClassAction.isEnabledForContext(util.getSymbolTreeContext())); + assertFalse(createClassAction.isEnabledForContext(util.getSymbolTreeContext())); assertTrue(createNamespaceAction.isEnabledForContext(util.getSymbolTreeContext())); } }