Merge remote-tracking branch 'origin/GP-0_Dan_testFixes-20220630-1'

This commit is contained in:
Ryan Kurtz
2022-06-30 10:35:59 -04:00
8 changed files with 42 additions and 19 deletions
@@ -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();
} }
@@ -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());
@@ -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());
@@ -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);
@@ -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();
@@ -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) {
@@ -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));
} }
} }
@@ -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();