mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-05-27 23:17:03 +08:00
Merge remote-tracking branch 'origin/GP-0_Dan_testFixes-20220630-1'
This commit is contained in:
+5
@@ -84,6 +84,11 @@ public class DebuggerModelPlugin extends Plugin {
|
|||||||
@Override
|
@Override
|
||||||
protected void dispose() {
|
protected void dispose() {
|
||||||
tool.removeComponentProvider(connectedProvider);
|
tool.removeComponentProvider(connectedProvider);
|
||||||
|
synchronized (disconnectedProviders) {
|
||||||
|
for (DebuggerModelProvider p : disconnectedProviders) {
|
||||||
|
tool.removeComponentProvider(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+12
-1
@@ -34,6 +34,7 @@ import docking.widgets.tree.support.GTreeSelectionListener;
|
|||||||
import ghidra.app.plugin.core.debug.DebuggerCoordinates;
|
import ghidra.app.plugin.core.debug.DebuggerCoordinates;
|
||||||
import ghidra.app.plugin.core.debug.gui.DebuggerResources;
|
import ghidra.app.plugin.core.debug.gui.DebuggerResources;
|
||||||
import ghidra.app.plugin.core.debug.gui.model.ObjectTreeModel.AbstractNode;
|
import ghidra.app.plugin.core.debug.gui.model.ObjectTreeModel.AbstractNode;
|
||||||
|
import ghidra.trace.model.Trace;
|
||||||
import ghidra.trace.model.target.TraceObjectKeyPath;
|
import ghidra.trace.model.target.TraceObjectKeyPath;
|
||||||
|
|
||||||
public class ObjectsTreePanel extends JPanel {
|
public class ObjectsTreePanel extends JPanel {
|
||||||
@@ -97,6 +98,16 @@ public class ObjectsTreePanel extends JPanel {
|
|||||||
return new KeepTreeState(tree);
|
return new KeepTreeState(tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Trace computeDiffTrace(Trace current, Trace previous) {
|
||||||
|
if (current == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (previous == null) {
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
return previous;
|
||||||
|
}
|
||||||
|
|
||||||
public void goToCoordinates(DebuggerCoordinates coords) {
|
public void goToCoordinates(DebuggerCoordinates coords) {
|
||||||
// TODO: thread should probably become a TraceObject once we transition
|
// TODO: thread should probably become a TraceObject once we transition
|
||||||
if (DebuggerCoordinates.equalsIgnoreRecorderAndView(current, coords)) {
|
if (DebuggerCoordinates.equalsIgnoreRecorderAndView(current, coords)) {
|
||||||
@@ -105,7 +116,7 @@ public class ObjectsTreePanel extends JPanel {
|
|||||||
DebuggerCoordinates previous = current;
|
DebuggerCoordinates previous = current;
|
||||||
this.current = coords;
|
this.current = coords;
|
||||||
try (KeepTreeState keep = keepTreeState()) {
|
try (KeepTreeState keep = keepTreeState()) {
|
||||||
treeModel.setDiffTrace(previous.getTrace());
|
treeModel.setDiffTrace(computeDiffTrace(current.getTrace(), previous.getTrace()));
|
||||||
treeModel.setTrace(current.getTrace());
|
treeModel.setTrace(current.getTrace());
|
||||||
treeModel.setDiffSnap(previous.getSnap());
|
treeModel.setDiffSnap(previous.getSnap());
|
||||||
treeModel.setSnap(current.getSnap());
|
treeModel.setSnap(current.getSnap());
|
||||||
|
|||||||
+4
-4
@@ -346,10 +346,10 @@ public class DebuggerDisassemblyTest extends AbstractGhidraHeadedDebuggerGUITest
|
|||||||
listingProvider, view, new ProgramLocation(view, start),
|
listingProvider, view, new ProgramLocation(view, start),
|
||||||
new ProgramSelection(start, start.addWrap(3)), null);
|
new ProgramSelection(start, start.addWrap(3)), null);
|
||||||
DockingActionIf action =
|
DockingActionIf action =
|
||||||
Unique.assertOne(disassemblerPlugin.getPopupActions(tool, actionContext)
|
runSwing(() -> Unique.assertOne(disassemblerPlugin.getPopupActions(tool, actionContext)
|
||||||
.stream()
|
.stream()
|
||||||
.filter(a -> a.isAddToPopup(actionContext))
|
.filter(a -> a.isAddToPopup(actionContext))
|
||||||
.filter(actionPred));
|
.filter(actionPred)));
|
||||||
performAction(action, actionContext, true);
|
performAction(action, actionContext, true);
|
||||||
waitForTasks();
|
waitForTasks();
|
||||||
}
|
}
|
||||||
@@ -555,11 +555,11 @@ public class DebuggerDisassemblyTest extends AbstractGhidraHeadedDebuggerGUITest
|
|||||||
listingProvider, view, new ProgramLocation(view, start),
|
listingProvider, view, new ProgramLocation(view, start),
|
||||||
new ProgramSelection(start, start.addWrap(1)), null);
|
new ProgramSelection(start, start.addWrap(1)), null);
|
||||||
FixedPlatformTracePatchInstructionAction action =
|
FixedPlatformTracePatchInstructionAction action =
|
||||||
Unique.assertOne(disassemblerPlugin.getPopupActions(tool, actionContext)
|
runSwing(() -> Unique.assertOne(disassemblerPlugin.getPopupActions(tool, actionContext)
|
||||||
.stream()
|
.stream()
|
||||||
.filter(a -> a instanceof FixedPlatformTracePatchInstructionAction)
|
.filter(a -> a instanceof FixedPlatformTracePatchInstructionAction)
|
||||||
.map(a -> (FixedPlatformTracePatchInstructionAction) a)
|
.map(a -> (FixedPlatformTracePatchInstructionAction) a)
|
||||||
.filter(actionPred));
|
.filter(actionPred)));
|
||||||
|
|
||||||
AssemblerPluginTestHelper helper =
|
AssemblerPluginTestHelper helper =
|
||||||
new AssemblerPluginTestHelper(action, null, listingProvider, tb.trace.getProgramView());
|
new AssemblerPluginTestHelper(action, null, listingProvider, tb.trace.getProgramView());
|
||||||
|
|||||||
+5
-3
@@ -636,9 +636,11 @@ public class DebuggerWatchesProviderTest extends AbstractGhidraHeadedDebuggerGUI
|
|||||||
traceManager.activateThread(thread);
|
traceManager.activateThread(thread);
|
||||||
waitForSwing();
|
waitForSwing();
|
||||||
|
|
||||||
RegisterRow rowR0 = registersProvider.getRegisterRow(r0);
|
runSwing(() -> {
|
||||||
rowR0.setDataType(PointerDataType.dataType);
|
RegisterRow rowR0 = registersProvider.getRegisterRow(r0);
|
||||||
registersProvider.setSelectedRow(rowR0);
|
rowR0.setDataType(PointerDataType.dataType);
|
||||||
|
registersProvider.setSelectedRow(rowR0);
|
||||||
|
});
|
||||||
waitForSwing();
|
waitForSwing();
|
||||||
|
|
||||||
performEnabledAction(registersProvider, watchesProvider.actionAddFromRegister, true);
|
performEnabledAction(registersProvider, watchesProvider.actionAddFromRegister, true);
|
||||||
|
|||||||
+2
-6
@@ -211,8 +211,8 @@ public abstract class AbstractPatchAction extends DockingAction {
|
|||||||
fieldPanel = listingPanel.getFieldPanel();
|
fieldPanel = listingPanel.getFieldPanel();
|
||||||
|
|
||||||
fieldLayoutManager = new FieldPanelOverLayoutManager(fieldPanel);
|
fieldLayoutManager = new FieldPanelOverLayoutManager(fieldPanel);
|
||||||
fieldPanel.setLayout(fieldLayoutManager);
|
|
||||||
addLayoutListeners(fieldLayoutManager);
|
addLayoutListeners(fieldLayoutManager);
|
||||||
|
fieldPanel.setLayout(fieldLayoutManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -349,8 +349,7 @@ public abstract class AbstractPatchAction extends DockingAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ListingActionContext lac = (ListingActionContext) context;
|
ListingActionContext lac = (ListingActionContext) context;
|
||||||
prepareLayout(lac);
|
if (((CodeViewerProvider) lac.getComponentProvider()).isReadOnly()) {
|
||||||
if (codeViewerProvider.isReadOnly()) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return lac.getCodeUnit();
|
return lac.getCodeUnit();
|
||||||
@@ -365,9 +364,6 @@ public abstract class AbstractPatchAction extends DockingAction {
|
|||||||
|
|
||||||
ListingActionContext lac = (ListingActionContext) context;
|
ListingActionContext lac = (ListingActionContext) context;
|
||||||
prepareLayout(lac);
|
prepareLayout(lac);
|
||||||
if (codeViewerProvider.isReadOnly()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProgramLocation cur = lac.getLocation();
|
ProgramLocation cur = lac.getLocation();
|
||||||
program = cur.getProgram();
|
program = cur.getProgram();
|
||||||
|
|||||||
+4
@@ -253,6 +253,10 @@ public class AssemblyDualTextField {
|
|||||||
super(model);
|
super(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fakeFocusGained(JTextField field) {
|
||||||
|
listener.fakeFocusGained(field);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getPrefix(JTextField field) {
|
protected String getPrefix(JTextField field) {
|
||||||
if (field == assembly) {
|
if (field == assembly) {
|
||||||
|
|||||||
+5
-4
@@ -18,7 +18,6 @@ package ghidra.app.plugin.core.assembler;
|
|||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
|
|
||||||
@@ -81,7 +80,9 @@ public class AssemblerPluginTestHelper {
|
|||||||
public List<AssemblyCompletion> inputAndGetCompletions(String text) {
|
public List<AssemblyCompletion> inputAndGetCompletions(String text) {
|
||||||
AbstractGenericTest.runSwing(() -> {
|
AbstractGenericTest.runSwing(() -> {
|
||||||
instructionInput.setText(text);
|
instructionInput.setText(text);
|
||||||
instructionInput.auto.startCompletion(instructionInput.getOperandsField());
|
JTextField field = instructionInput.getOperandsField();
|
||||||
|
instructionInput.auto.fakeFocusGained(field);
|
||||||
|
instructionInput.auto.startCompletion(field);
|
||||||
instructionInput.auto.updateNow();
|
instructionInput.auto.updateNow();
|
||||||
});
|
});
|
||||||
return AbstractGenericTest.waitForValue(() -> AbstractGenericTest.runSwing(() -> {
|
return AbstractGenericTest.waitForValue(() -> AbstractGenericTest.runSwing(() -> {
|
||||||
@@ -128,7 +129,7 @@ public class AssemblerPluginTestHelper {
|
|||||||
AbstractGenericTest.runSwing(() -> patchInstructionAction.accept(ai));
|
AbstractGenericTest.runSwing(() -> patchInstructionAction.accept(ai));
|
||||||
AbstractGhidraHeadedIntegrationTest.waitForProgram(program);
|
AbstractGhidraHeadedIntegrationTest.waitForProgram(program);
|
||||||
|
|
||||||
return Objects.requireNonNull(listing.getInstructionAt(address));
|
return AbstractGTest.waitForValue(() -> listing.getInstructionAt(address));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Data patchDataAt(Address address, String expText, String newText) {
|
public Data patchDataAt(Address address, String expText, String newText) {
|
||||||
@@ -145,6 +146,6 @@ public class AssemblerPluginTestHelper {
|
|||||||
});
|
});
|
||||||
AbstractGhidraHeadedIntegrationTest.waitForProgram(program);
|
AbstractGhidraHeadedIntegrationTest.waitForProgram(program);
|
||||||
|
|
||||||
return Objects.requireNonNull(listing.getDataAt(address));
|
return AbstractGTest.waitForValue(() -> listing.getDataAt(address));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -116,7 +116,7 @@ public class TextFieldAutocompleter<T> {
|
|||||||
private DefaultListModel<T> listModel = new DefaultListModel<>();
|
private DefaultListModel<T> listModel = new DefaultListModel<>();
|
||||||
private DefaultListModel<T> blankModel = new DefaultListModel<>();
|
private DefaultListModel<T> blankModel = new DefaultListModel<>();
|
||||||
private JList<T> list = new JList<>(listModel);
|
private JList<T> list = new JList<>(listModel);
|
||||||
private MyListener listener = new MyListener();
|
/*test*/ protected MyListener listener = new MyListener();
|
||||||
|
|
||||||
private boolean pendingTextUpdate;
|
private boolean pendingTextUpdate;
|
||||||
private SwingUpdateManager updateManager = new SwingUpdateManager(DEFAULT_UPDATE_DELAY,
|
private SwingUpdateManager updateManager = new SwingUpdateManager(DEFAULT_UPDATE_DELAY,
|
||||||
@@ -943,6 +943,10 @@ public class TextFieldAutocompleter<T> {
|
|||||||
updateDisplayContents();
|
updateDisplayContents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*test*/ public void fakeFocusGained(JTextField field) {
|
||||||
|
focus = field;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void focusLost(FocusEvent e) {
|
public void focusLost(FocusEvent e) {
|
||||||
Component opp = e.getOppositeComponent();
|
Component opp = e.getOppositeComponent();
|
||||||
|
|||||||
Reference in New Issue
Block a user