Test fixes

This commit is contained in:
dragonmacher 2024-08-13 10:18:37 -04:00
parent 33867f718b
commit 4ee2d81c49
6 changed files with 38 additions and 46 deletions

View file

@ -990,5 +990,4 @@ public class ProgramTreePlugin extends ProgramPlugin
currentProvider.selectPathsForLocation(currentLocation); currentProvider.selectPathsForLocation(currentLocation);
} }
} }
} }

View file

@ -41,6 +41,7 @@ public class ProgramSelection implements AddressSetView {
* @param to the end of the selection * @param to the end of the selection
*/ */
public ProgramSelection(Address from, Address to) { public ProgramSelection(Address from, Address to) {
this();
if (to.compareTo(from) < 0) { if (to.compareTo(from) < 0) {
Address temp = to; Address temp = to;
to = from; to = from;

View file

@ -25,6 +25,7 @@ import javax.swing.tree.TreePath;
import org.junit.*; import org.junit.*;
import docking.ComponentProvider;
import docking.action.DockingActionIf; import docking.action.DockingActionIf;
import ghidra.app.events.ProgramSelectionPluginEvent; import ghidra.app.events.ProgramSelectionPluginEvent;
import ghidra.app.plugin.core.codebrowser.CodeBrowserPlugin; import ghidra.app.plugin.core.codebrowser.CodeBrowserPlugin;
@ -32,7 +33,6 @@ import ghidra.app.plugin.core.codebrowser.CodeViewerProvider;
import ghidra.app.plugin.core.marker.MarkerManagerPlugin; import ghidra.app.plugin.core.marker.MarkerManagerPlugin;
import ghidra.app.plugin.core.navigation.GoToAddressLabelPlugin; import ghidra.app.plugin.core.navigation.GoToAddressLabelPlugin;
import ghidra.app.plugin.core.programtree.ProgramTreePlugin; import ghidra.app.plugin.core.programtree.ProgramTreePlugin;
import ghidra.app.plugin.core.programtree.ViewManagerComponentProvider;
import ghidra.app.plugin.core.select.programtree.ProgramTreeSelectionPlugin; import ghidra.app.plugin.core.select.programtree.ProgramTreeSelectionPlugin;
import ghidra.app.services.ProgramManager; import ghidra.app.services.ProgramManager;
import ghidra.framework.plugintool.PluginTool; import ghidra.framework.plugintool.PluginTool;
@ -57,8 +57,7 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio
private DockingActionIf selectInstructionAction; private DockingActionIf selectInstructionAction;
private DockingActionIf selectUndefinedAction; private DockingActionIf selectUndefinedAction;
private ProgramTreePlugin pt; private ProgramTreePlugin pt;
private ViewManagerComponentProvider programTreeProvider; private DockingActionIf setView;
private DockingActionIf replaceView;
private ToyProgramBuilder builder; private ToyProgramBuilder builder;
@Before @Before
@ -88,17 +87,10 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio
private void setUpProgramTree(PluginTool tool) throws Exception { private void setUpProgramTree(PluginTool tool) throws Exception {
tool.addPlugin(ProgramTreePlugin.class.getName()); tool.addPlugin(ProgramTreePlugin.class.getName());
pt = env.getPlugin(ProgramTreePlugin.class); pt = env.getPlugin(ProgramTreePlugin.class);
replaceView = getAction(pt, "Replace View"); setView = getAction(pt, "Set View");
showProgramTree();
tool.addPlugin(ProgramTreeSelectionPlugin.class.getName()); tool.addPlugin(ProgramTreeSelectionPlugin.class.getName());
} }
private void showProgramTree() {
programTreeProvider = (ViewManagerComponentProvider) getInstanceField("viewProvider", pt);
tool.showComponentProvider(programTreeProvider, true);
waitForComponentProvider(ViewManagerComponentProvider.class);
}
protected void setUpQualifiedSelection(PluginTool tool) throws Exception { protected void setUpQualifiedSelection(PluginTool tool) throws Exception {
tool.addPlugin(QualifiedSelectionPlugin.class.getName()); tool.addPlugin(QualifiedSelectionPlugin.class.getName());
qSelectPlugin = getPlugin(tool, QualifiedSelectionPlugin.class); qSelectPlugin = getPlugin(tool, QualifiedSelectionPlugin.class);
@ -219,11 +211,12 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio
public void testSelectWithView() throws Exception { public void testSelectWithView() throws Exception {
AddressSet rsrcSet = new AddressSet(addr("0100a000"), addr("0100f3ff")); AddressSet rsrcSet = new AddressSet(addr("0100a000"), addr("0100f3ff"));
ComponentProvider programTree = showProvider(tool, "Program Tree");
JTree tree = waitFor(() -> findComponent(tool.getToolFrame(), JTree.class)); JTree tree = waitFor(() -> findComponent(tool.getToolFrame(), JTree.class));
// Replace view with .rsrc // Replace view with .rsrc
selectTreeNodeByText(tree, ".rsrc", true); selectTreeNodeByText(tree, ".rsrc", true);
performAction(replaceView, provider, true); performAction(setView, programTree, true);
ProgramSelection rsrcInstructionSet = getCurrentSelection(); ProgramSelection rsrcInstructionSet = getCurrentSelection();
assertTrue(rsrcInstructionSet.isEmpty()); assertTrue(rsrcInstructionSet.isEmpty());
@ -236,7 +229,7 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio
// Change to program view and make sure the previously selected (but not visible in // Change to program view and make sure the previously selected (but not visible in
// the current view) instructions are selected in the new view. // the current view) instructions are selected in the new view.
selectTreeNodeByText(tree, "Test", true); selectTreeNodeByText(tree, "Test", true);
performAction(replaceView, provider, true); performAction(setView, programTree, true);
ProgramSelection instructionSet = getCurrentSelection(); ProgramSelection instructionSet = getCurrentSelection();
assertFalse("Instructions selection should have been restored when the view changed", assertFalse("Instructions selection should have been restored when the view changed",
instructionSet.isEmpty()); instructionSet.isEmpty());
@ -248,7 +241,7 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio
// Replace view with .rsrc // Replace view with .rsrc
selectTreeNodeByText(tree, ".rsrc", true); selectTreeNodeByText(tree, ".rsrc", true);
performAction(replaceView, provider, true); performAction(setView, programTree, true);
assertTrue(getCurrentSelection().isEmpty()); assertTrue(getCurrentSelection().isEmpty());
// Select All Data. // Select All Data.
performAction(selectDataAction, provider, true); performAction(selectDataAction, provider, true);
@ -257,7 +250,7 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio
assertFalse(rsrcDataSet.isEmpty()); assertFalse(rsrcDataSet.isEmpty());
// Change to program view // Change to program view
selectTreeNodeByText(tree, "Test", true); selectTreeNodeByText(tree, "Test", true);
performAction(replaceView, provider, true); performAction(setView, programTree, true);
ProgramSelection dataSet = getCurrentSelection(); ProgramSelection dataSet = getCurrentSelection();
assertFalse(dataSet.isEmpty()); assertFalse(dataSet.isEmpty());
@ -268,7 +261,7 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio
// Replace view with .rsrc // Replace view with .rsrc
selectTreeNodeByText(tree, ".rsrc", true); selectTreeNodeByText(tree, ".rsrc", true);
performAction(replaceView, provider, true); performAction(setView, programTree, true);
assertTrue(getCurrentSelection().isEmpty()); assertTrue(getCurrentSelection().isEmpty());
// Select All Undefined. // Select All Undefined.
performAction(selectUndefinedAction, provider, true); performAction(selectUndefinedAction, provider, true);
@ -277,7 +270,8 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio
assertFalse(rsrcUndefinedSet.isEmpty()); assertFalse(rsrcUndefinedSet.isEmpty());
// Change to program view // Change to program view
selectTreeNodeByText(tree, "Test", true); selectTreeNodeByText(tree, "Test", true);
performAction(replaceView, provider, true); performAction(setView, programTree, true);
ProgramSelection undefinedSet = getCurrentSelection(); ProgramSelection undefinedSet = getCurrentSelection();
assertFalse(undefinedSet.isEmpty()); assertFalse(undefinedSet.isEmpty());

View file

@ -428,7 +428,7 @@ public class DiffTest extends DiffTestAdapter {
// Replace view with .data // Replace view with .data
selectTreeNodeByText(tree, ".data"); selectTreeNodeByText(tree, ".data");
invokeAndWait(replaceView); setView();
topOfFile(fp1); topOfFile(fp1);
assertEquals(addr("1008000"), cb.getCurrentAddress()); assertEquals(addr("1008000"), cb.getCurrentAddress());
bottomOfFile(fp1); bottomOfFile(fp1);
@ -436,7 +436,7 @@ public class DiffTest extends DiffTestAdapter {
// Replace with program view // Replace with program view
selectTreeNodeByText(tree, "DiffTestPgm1"); selectTreeNodeByText(tree, "DiffTestPgm1");
invokeAndWait(replaceView); setView();
topOfFile(fp1); topOfFile(fp1);
assertEquals(addr("100"), cb.getCurrentAddress()); assertEquals(addr("100"), cb.getCurrentAddress());
bottomOfFile(fp1); bottomOfFile(fp1);
@ -455,8 +455,7 @@ public class DiffTest extends DiffTestAdapter {
openDiff(diffTestP1, diffTestP2); openDiff(diffTestP1, diffTestP2);
JTree tree = getProgramTree(); JTree tree = getProgramTree();
selectTreeNodeByText(tree, ".data"); selectTreeNodeByText(tree, ".data");
setView();
runSwing(() -> replaceView.actionPerformed(new DefaultActionContext()));
topOfFile(fp1); topOfFile(fp1);
assertEquals(addr("1008000"), cb.getCurrentAddress()); assertEquals(addr("1008000"), cb.getCurrentAddress());
@ -482,11 +481,11 @@ public class DiffTest extends DiffTestAdapter {
JTree tree = getProgramTree(); JTree tree = getProgramTree();
selectTreeNodeByText(tree, ".data"); selectTreeNodeByText(tree, ".data");
runSwing(() -> replaceView.actionPerformed(new DefaultActionContext())); runSwing(() -> setView.actionPerformed(programTreeProvider.getActionContext(null)));
selectTreeNodeByText(tree, ".rsrc"); selectTreeNodeByText(tree, ".rsrc");
runSwing(() -> goToView.actionPerformed(new DefaultActionContext())); runSwing(() -> goToView.actionPerformed(programTreeProvider.getActionContext(null)));
topOfFile(fp1); topOfFile(fp1);
assertEquals(addr("1008000"), cb.getCurrentAddress()); assertEquals(addr("1008000"), cb.getCurrentAddress());

View file

@ -111,7 +111,7 @@ public class DiffTestAdapter extends AbstractGhidraHeadedIntegrationTest {
ProgramTreePlugin pt; ProgramTreePlugin pt;
ComponentProvider programTreeProvider; ComponentProvider programTreeProvider;
DockingActionIf replaceView; DockingActionIf setView;
DockingActionIf goToView; DockingActionIf goToView;
DockingActionIf removeView; DockingActionIf removeView;
@ -484,8 +484,8 @@ public class DiffTestAdapter extends AbstractGhidraHeadedIntegrationTest {
tool.addPlugin(ProgramTreePlugin.class.getName()); tool.addPlugin(ProgramTreePlugin.class.getName());
pt = env.getPlugin(ProgramTreePlugin.class); pt = env.getPlugin(ProgramTreePlugin.class);
showProgramTree(); programTreeProvider = showProvider(tool, "Program Tree");
replaceView = getAction(pt, "Replace View"); setView = getAction(pt, "Set View");
goToView = getAction(pt, "Go To start of folder/fragment in View"); goToView = getAction(pt, "Go To start of folder/fragment in View");
removeView = getAction(pt, "Remove folder/fragment from View"); removeView = getAction(pt, "Remove folder/fragment from View");
@ -511,6 +511,11 @@ public class DiffTestAdapter extends AbstractGhidraHeadedIntegrationTest {
env.dispose(); env.dispose();
} }
protected void setView() {
ActionContext context = runSwing(() -> programTreeProvider.getActionContext(null));
performAction(setView, context, true);
}
void closeDiff() throws Exception { void closeDiff() throws Exception {
closeDiffByAction(); closeDiffByAction();
@ -1134,13 +1139,6 @@ public class DiffTestAdapter extends AbstractGhidraHeadedIntegrationTest {
assertEquals(expectedSelection, currentSelection); assertEquals(expectedSelection, currentSelection);
} }
private void showProgramTree() {
ProgramTreePlugin ptree = env.getPlugin(ProgramTreePlugin.class);
programTreeProvider = (ComponentProvider) getInstanceField("viewProvider", ptree);
tool.showComponentProvider(programTreeProvider, true);
}
JTree getProgramTree() { JTree getProgramTree() {
JTree tree = findComponent(programTreeProvider.getComponent(), JTree.class); JTree tree = findComponent(programTreeProvider.getComponent(), JTree.class);
return tree; return tree;

View file

@ -36,6 +36,7 @@ import ghidra.app.services.ProgramManager;
import ghidra.framework.cmd.CompoundCmd; import ghidra.framework.cmd.CompoundCmd;
import ghidra.program.database.ProgramBuilder; import ghidra.program.database.ProgramBuilder;
import ghidra.program.database.ProgramDB; import ghidra.program.database.ProgramDB;
import ghidra.program.model.listing.Program;
import ghidra.program.model.symbol.SourceType; import ghidra.program.model.symbol.SourceType;
public class DualProgramTest extends DiffTestAdapter { public class DualProgramTest extends DiffTestAdapter {
@ -349,7 +350,7 @@ public class DualProgramTest extends DiffTestAdapter {
// Modify the active program. // Modify the active program.
setLocation("100f3ff"); setLocation("100f3ff");
CompoundCmd cmd = new CompoundCmd("test"); CompoundCmd<Program> cmd = new CompoundCmd<>("test");
cmd.add(new AddLabelCmd(addr("100f3ff"), "TestLabel", false, SourceType.USER_DEFINED)); cmd.add(new AddLabelCmd(addr("100f3ff"), "TestLabel", false, SourceType.USER_DEFINED));
cmd.add( cmd.add(
new AddLabelCmd(addr("100f3ff"), "AnotherTestLabel", false, SourceType.USER_DEFINED)); new AddLabelCmd(addr("100f3ff"), "AnotherTestLabel", false, SourceType.USER_DEFINED));
@ -375,7 +376,7 @@ public class DualProgramTest extends DiffTestAdapter {
openSecondProgram(diffTestP1, diffTestP2); openSecondProgram(diffTestP1, diffTestP2);
JTree tree = findComponent(tool.getToolFrame(), JTree.class); JTree tree = findComponent(tool.getToolFrame(), JTree.class);
selectTreeNodeByText(tree, "DiffTestPgm1"); selectTreeNodeByText(tree, "DiffTestPgm1");
performAction(replaceView, true); setView();
topOfFile(fp1); topOfFile(fp1);
assertEquals(addr("00000100"), cb.getCurrentAddress()); assertEquals(addr("00000100"), cb.getCurrentAddress());
bottomOfFile(fp1); bottomOfFile(fp1);
@ -387,7 +388,7 @@ public class DualProgramTest extends DiffTestAdapter {
openSecondProgram(diffTestP1, diffTestP2); openSecondProgram(diffTestP1, diffTestP2);
JTree tree = findComponent(tool.getToolFrame(), JTree.class); JTree tree = findComponent(tool.getToolFrame(), JTree.class);
selectTreeNodeByText(tree, ".data"); selectTreeNodeByText(tree, ".data");
performAction(replaceView, true); setView();
topOfFile(fp1); topOfFile(fp1);
assertEquals(addr("1008000"), cb.getCurrentAddress()); assertEquals(addr("1008000"), cb.getCurrentAddress());
bottomOfFile(fp1); bottomOfFile(fp1);
@ -399,7 +400,7 @@ public class DualProgramTest extends DiffTestAdapter {
openSecondProgram(diffTestP1, diffTestP2); openSecondProgram(diffTestP1, diffTestP2);
JTree tree = findComponent(tool.getToolFrame(), JTree.class); JTree tree = findComponent(tool.getToolFrame(), JTree.class);
selectTreeNodeByText(tree, ".data"); selectTreeNodeByText(tree, ".data");
performAction(replaceView, true); setView();
selectTreeNodeByText(tree, ".rsrc"); selectTreeNodeByText(tree, ".rsrc");
performAction(goToView, true); performAction(goToView, true);