mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-28 17:11:11 -09:00
GP-0: Fixed DebuggerInterpreterPluginTest
This commit is contained in:
@@ -84,12 +84,26 @@ public abstract class AbstractDebuggerWrappedConsoleConnection<T extends TargetO
|
|||||||
@AttributeCallback(TargetObject.DISPLAY_ATTRIBUTE_NAME)
|
@AttributeCallback(TargetObject.DISPLAY_ATTRIBUTE_NAME)
|
||||||
public void displayChanged(TargetObject object, String display) {
|
public void displayChanged(TargetObject object, String display) {
|
||||||
// TODO: Add setSubTitle(String) to InterpreterConsole
|
// TODO: Add setSubTitle(String) to InterpreterConsole
|
||||||
|
if (guiConsole == null) {
|
||||||
|
/**
|
||||||
|
* Can happen during init. setSubTitle will get called immediately after guiConsole
|
||||||
|
* is initialized.
|
||||||
|
*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
InterpreterComponentProvider provider = (InterpreterComponentProvider) guiConsole;
|
InterpreterComponentProvider provider = (InterpreterComponentProvider) guiConsole;
|
||||||
Swing.runLater(() -> provider.setSubTitle(display));
|
Swing.runLater(() -> provider.setSubTitle(display));
|
||||||
}
|
}
|
||||||
|
|
||||||
@AttributeCallback(TargetInterpreter.PROMPT_ATTRIBUTE_NAME)
|
@AttributeCallback(TargetInterpreter.PROMPT_ATTRIBUTE_NAME)
|
||||||
public void promptChanged(TargetObject interpreter, String prompt) {
|
public void promptChanged(TargetObject interpreter, String prompt) {
|
||||||
|
if (guiConsole == null) {
|
||||||
|
/**
|
||||||
|
* Can happen during init. setPrompt will get called immediately after guiConsole is
|
||||||
|
* initialized. NB. It happens in DebuggerWrappedInterpreterConnection
|
||||||
|
*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
Swing.runLater(() -> guiConsole.setPrompt(prompt));
|
Swing.runLater(() -> guiConsole.setPrompt(prompt));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,13 +111,7 @@ public abstract class AbstractDebuggerWrappedConsoleConnection<T extends TargetO
|
|||||||
public void invalidated(TargetObject object, TargetObject branch, String reason) {
|
public void invalidated(TargetObject object, TargetObject branch, String reason) {
|
||||||
Swing.runLater(() -> {
|
Swing.runLater(() -> {
|
||||||
if (object == targetConsole) { // Redundant
|
if (object == targetConsole) { // Redundant
|
||||||
if (pinned) {
|
consoleInvalidated();
|
||||||
running.set(false);
|
|
||||||
plugin.disableConsole(targetConsole, guiConsole);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
plugin.destroyConsole(targetConsole, guiConsole);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -161,6 +169,20 @@ public abstract class AbstractDebuggerWrappedConsoleConnection<T extends TargetO
|
|||||||
setStdIn(guiConsole.getStdin());
|
setStdIn(guiConsole.getStdin());
|
||||||
|
|
||||||
createActions();
|
createActions();
|
||||||
|
|
||||||
|
if (!targetConsole.isValid()) {
|
||||||
|
consoleInvalidated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void consoleInvalidated() {
|
||||||
|
if (pinned) {
|
||||||
|
running.set(false);
|
||||||
|
plugin.disableConsole(targetConsole, guiConsole);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
plugin.destroyConsole(targetConsole, guiConsole);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void createActions() {
|
protected void createActions() {
|
||||||
|
|||||||
@@ -63,13 +63,14 @@ public class DebuggerInterpreterPluginTest extends AbstractGhidraHeadedDebuggerG
|
|||||||
|
|
||||||
// Can't get at the component, so send keystrokes?
|
// Can't get at the component, so send keystrokes?
|
||||||
Robot robot = new Robot();
|
Robot robot = new Robot();
|
||||||
robot.keyPress(KeyEvent.VK_A);
|
ExecuteCall<Void> exe = waitForValue(() -> {
|
||||||
robot.keyRelease(KeyEvent.VK_A);
|
robot.keyPress(KeyEvent.VK_A);
|
||||||
robot.keyPress(KeyEvent.VK_ENTER);
|
robot.keyRelease(KeyEvent.VK_A);
|
||||||
robot.keyRelease(KeyEvent.VK_ENTER);
|
robot.keyPress(KeyEvent.VK_ENTER);
|
||||||
waitForSwing();
|
robot.keyRelease(KeyEvent.VK_ENTER);
|
||||||
|
waitForSwing();
|
||||||
ExecuteCall<Void> exe = mb.testModel.session.interpreter.pollExecute();
|
return mb.testModel.session.interpreter.pollExecute();
|
||||||
|
});
|
||||||
assertEquals("a", exe.cmd);
|
assertEquals("a", exe.cmd);
|
||||||
exe.complete(null); // Not necessary, but cleaner
|
exe.complete(null); // Not necessary, but cleaner
|
||||||
}
|
}
|
||||||
@@ -128,7 +129,7 @@ public class DebuggerInterpreterPluginTest extends AbstractGhidraHeadedDebuggerG
|
|||||||
), Map.of(), "Invalidate interpreter");
|
), Map.of(), "Invalidate interpreter");
|
||||||
waitForSwing();
|
waitForSwing();
|
||||||
|
|
||||||
assertFalse(interpreter.isVisible());
|
waitForPass(() -> assertFalse(interpreter.isVisible()));
|
||||||
assertFalse(interpreter.isInTool());
|
assertFalse(interpreter.isInTool());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,6 +147,6 @@ public class DebuggerInterpreterPluginTest extends AbstractGhidraHeadedDebuggerG
|
|||||||
), Map.of(), "Invalidate interpreter");
|
), Map.of(), "Invalidate interpreter");
|
||||||
waitForSwing();
|
waitForSwing();
|
||||||
|
|
||||||
assertFalse(interpreter.isInputPermitted());
|
waitForPass(() -> assertFalse(interpreter.isInputPermitted()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user