From df4dd327aff24936963dc6e1f24bb95de029df31 Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Wed, 20 Dec 2023 10:10:16 -0500 Subject: [PATCH] GP-0 Corrected test failures related to recent changes. --- .../core/progmgr/ProgramManagerPlugin.java | 2 ++ .../CodeBrowserScreenMovementTest.java | 7 ++++-- .../core/codebrowser/CodeBrowserTest.java | 4 ++++ .../core/comments/CommentsPluginTest.java | 6 ++++- .../core/progmgr/MultiTabPluginTest.java | 23 ++++++++++++++++++- .../ByteViewerConnectedToolBehaviorTest.java | 12 ++++++++-- 6 files changed, 48 insertions(+), 6 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/ProgramManagerPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/ProgramManagerPlugin.java index 368a795e3c..ec510d6b57 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/ProgramManagerPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/ProgramManagerPlugin.java @@ -374,9 +374,11 @@ public class ProgramManagerPlugin extends Plugin implements ProgramManager, Opti for (Program p : openPrograms) { if (ignoreChanges) { toRemove.add(p); + continue; } else if (p.isClosed()) { toRemove.add(p); + continue; } if (!tool.canCloseDomainObject(p)) { diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserScreenMovementTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserScreenMovementTest.java index 4781a26186..542b5ad252 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserScreenMovementTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserScreenMovementTest.java @@ -34,6 +34,7 @@ import docking.widgets.fieldpanel.support.FieldLocation; import docking.widgets.fieldpanel.support.FieldSelection; import ghidra.app.cmd.data.CreateDataCmd; import ghidra.app.cmd.data.CreateStructureCmd; +import ghidra.app.events.OpenProgramPluginEvent; import ghidra.app.events.ProgramSelectionPluginEvent; import ghidra.app.services.ProgramManager; import ghidra.app.util.viewer.field.*; @@ -382,6 +383,9 @@ public class CodeBrowserScreenMovementTest extends AbstractProgramBasedTest { env.connectTools(tool, tool2); + // open same program in second tool - cannot rely on tool connection for this + tool2.firePluginEvent(new OpenProgramPluginEvent("Test", program)); + codeBrowser.goToField(addr("0x1006420"), "Address", 0, 0); assertEquals("01006420", cb2.getCurrentFieldText()); @@ -795,8 +799,7 @@ public class CodeBrowserScreenMovementTest extends AbstractProgramBasedTest { private void resetFormatOptions(CodeBrowserPlugin plugin) { Options fieldOptions = plugin.getFormatManager().getFieldOptions(); List names = fieldOptions.getOptionNames(); - for (int i = 0; i < names.size(); i++) { - String name = names.get(i); + for (String name : names) { if (!name.startsWith("Format Code")) { continue; } diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserTest.java index 708e3d5bd6..b26e73de00 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/codebrowser/CodeBrowserTest.java @@ -33,6 +33,7 @@ import docking.widgets.fieldpanel.field.Field; import docking.widgets.fieldpanel.support.*; import docking.widgets.table.GTable; import ghidra.app.cmd.data.CreateDataCmd; +import ghidra.app.events.OpenProgramPluginEvent; import ghidra.app.events.ProgramSelectionPluginEvent; import ghidra.app.plugin.core.codebrowser.SelectEndpointsAction.RangeEndpoint; import ghidra.app.plugin.core.navigation.NextPrevAddressPlugin; @@ -382,6 +383,9 @@ public class CodeBrowserTest extends AbstractGhidraHeadedIntegrationTest { env.connectTools(tool, tool2); + // open same program in second tool - cannot rely on tool connection for this + tool2.firePluginEvent(new OpenProgramPluginEvent("Test", program)); + cb.goToField(addr("0x1003a50"), "Bytes", 0, 4); Point p1 = getCursorPoint(); cb.goToField(addr("0x1003a5e"), "Mnemonic", 0, 0, 2, false); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/comments/CommentsPluginTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/comments/CommentsPluginTest.java index 5bbdaf8dfb..ffff70c4a1 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/comments/CommentsPluginTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/comments/CommentsPluginTest.java @@ -31,6 +31,7 @@ import docking.widgets.table.threaded.GThreadedTablePanel; import generic.test.TestUtils; import ghidra.GhidraOptions; import ghidra.app.cmd.data.CreateDataCmd; +import ghidra.app.events.OpenProgramPluginEvent; import ghidra.app.events.ProgramLocationPluginEvent; import ghidra.app.plugin.core.codebrowser.CodeBrowserPlugin; import ghidra.app.plugin.core.navigation.GoToAddressLabelPlugin; @@ -231,7 +232,10 @@ public class CommentsPluginTest extends AbstractGhidraHeadedIntegrationTest { env.connectTools(tool, tool2); env.connectTools(tool2, tool); - env.open(program); // do this again now that the tools are in-sync + env.open(program); + + // open same program in second tool - cannot rely on tool connection for this + tool2.firePluginEvent(new OpenProgramPluginEvent("Test", program)); Address addr = addr(0x01006420); sendProgramLocation(addr, CodeUnit.EOL_COMMENT); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/progmgr/MultiTabPluginTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/progmgr/MultiTabPluginTest.java index 4686802c1c..2e357bad4d 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/progmgr/MultiTabPluginTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/progmgr/MultiTabPluginTest.java @@ -136,6 +136,13 @@ public class MultiTabPluginTest extends AbstractGhidraHeadedIntegrationTest { assertNotNull(iconLabel); Point p = iconLabel.getLocationOnScreen(); clickMouse(iconLabel, MouseEvent.BUTTON1, p.x + 1, p.y + 1, 1, 0); + + JDialog dlg = waitForJDialog("Program Changed"); + JButton button = findButtonByText(dlg, "Continue"); + pressButton(button); + + waitForSwing(); + assertEquals(2, panel.getTabCount()); } @@ -160,9 +167,23 @@ public class MultiTabPluginTest extends AbstractGhidraHeadedIntegrationTest { JLabel iconLabel = (JLabel) findComponentByName(tab, "Close"); Point p = iconLabel.getLocationOnScreen(); clickMouse(iconLabel, MouseEvent.BUTTON1, p.x + 1, p.y + 1, 1, 0); + + JDialog dlg = waitForJDialog("Program Changed"); + JButton button = findButtonByText(dlg, "Continue"); + pressButton(button); } - runSwing(() -> panel.removeProgram(programs[programs.length - 1])); + // Last program does not have a tab + ProgramManagerPlugin programMgr = env.getPlugin(ProgramManagerPlugin.class); + runSwingLater(() -> programMgr.closeProgram()); + + waitForSwing(); + + JDialog dlg = waitForJDialog("Program Changed"); + JButton button = findButtonByText(dlg, "Continue"); + pressButton(button); + + waitForSwing(); assertEquals(0, panel.getTabCount()); } diff --git a/Ghidra/Features/ByteViewer/src/test.slow/java/ghidra/app/plugin/core/byteviewer/ByteViewerConnectedToolBehaviorTest.java b/Ghidra/Features/ByteViewer/src/test.slow/java/ghidra/app/plugin/core/byteviewer/ByteViewerConnectedToolBehaviorTest.java index 7310db2242..b5b706e5e9 100644 --- a/Ghidra/Features/ByteViewer/src/test.slow/java/ghidra/app/plugin/core/byteviewer/ByteViewerConnectedToolBehaviorTest.java +++ b/Ghidra/Features/ByteViewer/src/test.slow/java/ghidra/app/plugin/core/byteviewer/ByteViewerConnectedToolBehaviorTest.java @@ -27,6 +27,7 @@ import org.junit.*; import docking.DefaultActionContext; import docking.action.ToggleDockingAction; import docking.widgets.fieldpanel.support.FieldLocation; +import ghidra.app.events.OpenProgramPluginEvent; import ghidra.app.plugin.core.format.*; import ghidra.app.plugin.core.navigation.NavigationHistoryPlugin; import ghidra.app.plugin.core.navigation.NextPrevAddressPlugin; @@ -70,6 +71,13 @@ public class ByteViewerConnectedToolBehaviorTest extends AbstractGhidraHeadedInt env.connectTools(toolOne, tool2); program = buildNotepad(); + + // open program in toolOne + env.open(program); + + // open same program in second tool - cannot rely on tool connection for this + tool2.firePluginEvent(new OpenProgramPluginEvent("Test", program)); + final ProgramManager pm = toolOne.getService(ProgramManager.class); runSwing(() -> pm.openProgram(program.getDomainFile())); } @@ -223,8 +231,8 @@ public class ByteViewerConnectedToolBehaviorTest extends AbstractGhidraHeadedInt } private Address convertToAddr(ByteViewerPlugin plugin, ByteBlockInfo info) { - return ((ProgramByteBlockSet) plugin.getProvider().getByteBlockSet()).getAddress( - info.getBlock(), info.getOffset()); + return ((ProgramByteBlockSet) plugin.getProvider().getByteBlockSet()) + .getAddress(info.getBlock(), info.getOffset()); } private boolean byteBlockSelectionEquals(ByteBlockSelection b1, ByteBlockSelection b2) {