mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 10:19:23 +02:00
Test fixes
This commit is contained in:
parent
33867f718b
commit
4ee2d81c49
6 changed files with 38 additions and 46 deletions
|
@ -990,5 +990,4 @@ public class ProgramTreePlugin extends ProgramPlugin
|
||||||
currentProvider.selectPathsForLocation(currentLocation);
|
currentProvider.selectPathsForLocation(currentLocation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue