mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-10-19 18:12:14 -09:00
Merge remote-tracking branch 'origin/GP-0-dragonmacher-test-fixes-5-22-24'
This commit is contained in:
@@ -100,7 +100,7 @@ public class SymbolGTreeDragNDropHandler implements GTreeDragNDropHandler {
|
||||
}
|
||||
|
||||
private void dropProgramSelection(Namespace namespace, SelectionTransferData selectionData) {
|
||||
List<Symbol> symbolsToMove = new ArrayList<Symbol>();
|
||||
List<Symbol> 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<GTreeNode> nodeList = (List<GTreeNode>) transferData;
|
||||
List<Symbol> symbolsToMoveList = new ArrayList<Symbol>();
|
||||
List<Symbol> 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<GTreeNode> transferNodes) {
|
||||
Set<DataFlavor> flavorSet = new HashSet<DataFlavor>();
|
||||
Set<DataFlavor> 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<GTreeNode> 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<GTreeNode> 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<GTreeNode> transferNodes) {
|
||||
|
||||
@@ -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<GTreeNode> 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<GTreeNode> 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<Symbol> 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<String> expectedOrder =
|
||||
Arrays.asList( "AaNamespace", "aNamespace", "Bnamespace", "Cnamespace", "MYnamespace" );
|
||||
List<String> 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<Symbol> 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<String> expectedOrder =
|
||||
List<String> 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()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user