diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/disassembler/ClearTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/disassembler/ClearTest.java index 86ab2bb8c1..1144c69403 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/disassembler/ClearTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/disassembler/ClearTest.java @@ -177,7 +177,9 @@ public class ClearTest extends AbstractGhidraHeadedIntegrationTest { public void testClearActionEnablement() throws Exception { closeProgram(); - assertTrue(!clearAction.isEnabledForContext(new ActionContext())); + + assertFalse(isEnabled(clearAction, cb.getProvider())); + assertFalse(clearAction.isEnabledForContext(new ActionContext())); showTool(tool); loadProgram("notepad"); @@ -185,10 +187,10 @@ public class ClearTest extends AbstractGhidraHeadedIntegrationTest { waitForSwing(); assertTrue(cb.goToField(addr("0x10026f0"), "Address", 0, 0)); - assertTrue(clearAction.isEnabled()); + assertTrue(isEnabled(clearAction, cb.getProvider())); closeProgram(); - assertTrue(!clearAction.isEnabledForContext(new ActionContext())); + assertFalse(isEnabled(clearAction, cb.getProvider())); } @Test @@ -201,7 +203,6 @@ public class ClearTest extends AbstractGhidraHeadedIntegrationTest { doClearAction(true); assertEquals(numInstructions, program.getListing().getNumInstructions()); - } @Test @@ -284,7 +285,7 @@ public class ClearTest extends AbstractGhidraHeadedIntegrationTest { } /* - * This tests that a selection that includes the outermost header of does not change the + * This tests that a selection that includes the outermost header of does not change the * selection, but instead removes the structure from the listing at that address. */ @Test @@ -453,7 +454,7 @@ public class ClearTest extends AbstractGhidraHeadedIntegrationTest { Symbol[] symbols = program.getSymbolTable().getSymbols(addr("0x01001010")); assertEquals(1, symbols.length); - assertTrue(!symbols[0].isDynamic()); + assertFalse(symbols[0].isDynamic()); int id = program.startTransaction("Anchor"); symbols[0].setPinned(true); program.endTransaction(id, true); @@ -467,7 +468,7 @@ public class ClearTest extends AbstractGhidraHeadedIntegrationTest { symbols = program.getSymbolTable().getSymbols(addr("0x01001010")); assertEquals(1, symbols.length); - assertTrue(!symbols[0].isDynamic()); + assertFalse(symbols[0].isDynamic()); } @Test @@ -639,7 +640,7 @@ public class ClearTest extends AbstractGhidraHeadedIntegrationTest { assertTrue(l.getNumInstructions() > 0); assertTrue(l.getNumDefinedData() > 0); - assertTrue(!program.getListing().getFunctions(true).hasNext()); + assertFalse(program.getListing().getFunctions(true).hasNext()); assertTrue(program.getSymbolTable().getNumSymbols() > 0); undo(program); @@ -674,7 +675,7 @@ public class ClearTest extends AbstractGhidraHeadedIntegrationTest { okOnClearDialog(); - assertTrue(!context.hasValueOverRange(ax, BigInteger.valueOf(5), + assertFalse(context.hasValueOverRange(ax, BigInteger.valueOf(5), new AddressSet(addr("0x10022cc")))); undo(program); assertTrue(context.hasValueOverRange(ax, BigInteger.valueOf(5), diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/select/qualified/QualifiedSelectionPluginTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/select/qualified/QualifiedSelectionPluginTest.java index 7e85b64e0c..394a4ee603 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/select/qualified/QualifiedSelectionPluginTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/select/qualified/QualifiedSelectionPluginTest.java @@ -94,8 +94,6 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio } private void showProgramTree() { - - ProgramTreePlugin ptree = env.getPlugin(ProgramTreePlugin.class); programTreeProvider = (ComponentProvider) getInstanceField("viewProvider", pt); tool.showComponentProvider(programTreeProvider, true); } @@ -219,7 +217,7 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio @Test public void testSelectWithView() throws Exception { AddressSet rsrcSet = new AddressSet(addr("0100a000"), addr("0100f3ff")); - JTree tree = findComponent(tool.getToolFrame(), JTree.class); + JTree tree = waitFor(() -> findComponent(tool.getToolFrame(), JTree.class)); // Replace view with .rsrc selectTreeNodeByText(tree, ".rsrc", true); @@ -396,9 +394,6 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio }, wait); } - /** - * @param instructionSet - */ private void checkForInstructions(ProgramSelection instructionSet) { Listing listing = program.getListing(); AddressIterator iter = instructionSet.getAddresses(true); @@ -409,9 +404,6 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio } } - /** - * @param dataSet - */ private void checkForDefinedData(ProgramSelection dataSet) { Listing listing = program.getListing(); AddressIterator iter = dataSet.getAddresses(true); @@ -422,9 +414,6 @@ public class QualifiedSelectionPluginTest extends AbstractGhidraHeadedIntegratio } } - /** - * @param undefinedSet - */ private void checkForUndefined(ProgramSelection undefinedSet) { Listing listing = program.getListing(); AddressIterator iter = undefinedSet.getAddresses(true); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/tablechooser/TableChooserDialogTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/tablechooser/TableChooserDialogTest.java index 8378c84438..f3bf469090 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/tablechooser/TableChooserDialogTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/tablechooser/TableChooserDialogTest.java @@ -97,7 +97,8 @@ public class TableChooserDialogTest extends AbstractGhidraHeadedIntegrationTest Program program = builder.getProgram(); Navigatable navigatable = null; - dialog = new TableChooserDialog(tool, executor, program, "Dialog Title", navigatable); + runSwing(() -> dialog = + new TableChooserDialog(tool, executor, program, "Dialog Title", navigatable)); testAction = new TestAction(); dialog.addAction(testAction); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/project/tool/CloseToolTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/project/tool/CloseToolTest.java index 884818e2ba..02450e8462 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/project/tool/CloseToolTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/project/tool/CloseToolTest.java @@ -43,7 +43,6 @@ public class CloseToolTest extends AbstractGhidraHeadedIntegrationTest { @Before public void setUp() throws Exception { - env = new TestEnv(); } @@ -62,7 +61,6 @@ public class CloseToolTest extends AbstractGhidraHeadedIntegrationTest { assertNotNull(tool.getToolFrame()); closeTool(tool); assertNull("Tool did not close after task", tool.getToolFrame()); - } @Test @@ -87,7 +85,7 @@ public class CloseToolTest extends AbstractGhidraHeadedIntegrationTest { assertNotNull(closeOthersAction); ProgramActionContext context = new ProgramActionContext(null, program1); assertEquals(true, closeOthersAction.isEnabledForContext(context)); - performAction(closeOthersAction, true); + performAction(closeOthersAction, context, true); allOpenPrograms = pm.getAllOpenPrograms(); assertEquals(1, allOpenPrograms.length); @@ -185,8 +183,8 @@ public class CloseToolTest extends AbstractGhidraHeadedIntegrationTest { } //================================================================================================== -// Inner Classes -//================================================================================================== +// Inner Classes +//================================================================================================== private class ControllableBackgroundCommand extends BackgroundCommand { diff --git a/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplayProvider.java b/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplayProvider.java index d90216e5a4..f8ed48e9e0 100644 --- a/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplayProvider.java +++ b/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplayProvider.java @@ -60,10 +60,11 @@ public class DefaultGraphDisplayProvider implements GraphDisplayProvider { return visibleGraph; } - DefaultGraphDisplay display = - Swing.runNow(() -> new DefaultGraphDisplay(this, displayCounter++)); - displays.add(display); - return display; + return Swing.runNow(() -> { + DefaultGraphDisplay display = new DefaultGraphDisplay(this, displayCounter++); + displays.add(display); + return display; + }); } @Override @@ -76,10 +77,11 @@ public class DefaultGraphDisplayProvider implements GraphDisplayProvider { @Override public List getAllGraphDisplays() { - return displays.stream() - .filter(d -> d.getComponent().isShowing()) - .sorted((d1, d2) -> -(d1.getId() - d2.getId())) // largest/newest IDs come first - .collect(Collectors.toList()); + return Swing.runNow(() -> { + return displays.stream() + .sorted((d1, d2) -> -(d1.getId() - d2.getId())) // largest/newest IDs come first + .collect(Collectors.toList()); + }); } @Override diff --git a/Ghidra/Framework/Docking/src/main/java/docking/test/AbstractDockingTest.java b/Ghidra/Framework/Docking/src/main/java/docking/test/AbstractDockingTest.java index 8d302f73a7..8a07ce8d7f 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/test/AbstractDockingTest.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/test/AbstractDockingTest.java @@ -38,8 +38,7 @@ import org.apache.commons.lang3.StringUtils; import org.junit.*; import docking.*; -import docking.action.DockingActionIf; -import docking.action.ToggleDockingActionIf; +import docking.action.*; import docking.actions.DockingToolActions; import docking.dnd.GClipboard; import docking.framework.DockingApplicationConfiguration; @@ -105,7 +104,7 @@ public abstract class AbstractDockingTest extends AbstractGenericTest { // timing issues. // Note: this doesn't quite work as intended. This should be run before each other - // tearDown() method, but junit offers no way to do that. If you can figure + // tearDown() method, but junit offers no way to do that. If you can figure // out how to make that work, then update this code. ConcurrentTestExceptionHandler.disable(); } @@ -322,7 +321,7 @@ public abstract class AbstractDockingTest extends AbstractGenericTest { } /** - * Check for and display message component text associated with OptionDialog windows + * Check for and display message component text associated with OptionDialog windows * @param w any window * @return the message string if one can be found; null otherwise */ @@ -756,7 +755,7 @@ public abstract class AbstractDockingTest extends AbstractGenericTest { /** * Allows you to find a component provider with the given title. Most plugins will - * only ever have a single provider. In those cases, use + * only ever have a single provider. In those cases, use * {@link #waitForComponentProvider(Class)}. This version of that method is to allow you to * differentiate between multiple instances of a given provider that have different titles. * @@ -1121,7 +1120,7 @@ public abstract class AbstractDockingTest extends AbstractGenericTest { } /** - * A helper method to find all actions by name, with the given owner's name (this will not + * A helper method to find all actions by name, with the given owner's name (this will not * include reserved system actions) * * @param tool the tool containing all system actions @@ -1164,12 +1163,12 @@ public abstract class AbstractDockingTest extends AbstractGenericTest { } /** - * Finds the action by the given owner name and action name. - * If you do not know the owner name, then use + * Finds the action by the given owner name and action name. + * If you do not know the owner name, then use * the call {@link #getActionsByName(Tool, String)} instead (this will not include * reserved system actions). * - *

Note: more specific test case subclasses provide other methods for finding actions + *

Note: more specific test case subclasses provide other methods for finding actions * when you have an owner name (which is usually the plugin name). * * @param tool the tool containing all system actions @@ -1522,8 +1521,8 @@ public abstract class AbstractDockingTest extends AbstractGenericTest { triggerText(c, "\010"); } - /** - * Simulates the user pressing the 'Enter' key on the given text field + /** + * Simulates the user pressing the 'Enter' key on the given text field * @param c the component */ public static void triggerEnter(Component c) { @@ -1715,7 +1714,7 @@ public abstract class AbstractDockingTest extends AbstractGenericTest { } /** - * Fires a {@link KeyListener#keyPressed(KeyEvent)}, + * Fires a {@link KeyListener#keyPressed(KeyEvent)}, * {@link KeyListener#keyTyped(KeyEvent)} * and {@link KeyListener#keyReleased(KeyEvent)} for the given key stroke * @@ -2020,7 +2019,7 @@ public abstract class AbstractDockingTest extends AbstractGenericTest { private static void doWaitForTableModel(ThreadedTableModel model) { - // Always wait for Swing at least once. There seems to be a race condition for + // Always wait for Swing at least once. There seems to be a race condition for // incremental threaded models where the table is not busy at the time this method // is called, but there is an update pending via an invokeLater(). waitForSwing(); @@ -2142,6 +2141,11 @@ public abstract class AbstractDockingTest extends AbstractGenericTest { return runSwing(() -> action.isEnabledForContext(new ActionContext())); } + public static boolean isEnabled(DockingActionIf action, + ActionContextProvider contextProvider) { + return runSwing(() -> action.isEnabledForContext(contextProvider.getActionContext(null))); + } + public static boolean isEnabled(AbstractButton button) { return runSwing(() -> button.isEnabled()); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/imagepanel/ImagePanel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/imagepanel/ImagePanel.java index 6b19fd35b0..5abe81ff44 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/imagepanel/ImagePanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/imagepanel/ImagePanel.java @@ -27,7 +27,7 @@ import resources.icons.EmptyIcon; /** * Creates a panel that displays an {@link Image}. Users may pan the image as desired and zoom the - * image according to specific zoom levels. + * image according to specific zoom levels. */ public class ImagePanel extends JPanel { @@ -40,7 +40,7 @@ public class ImagePanel extends JPanel { // neutral 1.0f, // expanding scales - 1.5f, 2f, 2.5f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f + 1.5f, 2f, 2.5f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f // @formatter:on }; @@ -127,6 +127,7 @@ public class ImagePanel extends JPanel { /** * Create an NavigableImagePanel with the specified image + * @param image the image */ public ImagePanel(Image image) { initUI(); @@ -174,7 +175,7 @@ public class ImagePanel extends JPanel { firePropertyChange(IMAGE_PROPERTY, oldImage, this.image); } - /** + /** * Get the currently-displayed image * @return the current image */ @@ -183,7 +184,7 @@ public class ImagePanel extends JPanel { } /** - * Set the background color of the panel. If the specified color is null, the + * Set the background color of the panel. If the specified color is null, the * default color for panel backgrounds is used. * @param color the new background color */ @@ -202,12 +203,24 @@ public class ImagePanel extends JPanel { return imagePanel.getBackground(); } + /** + * Unused + * @param text unused + * @deprecated unused + */ + @Deprecated(since = "10.2", forRemoval = true) // unused public void setText(String text) { - label.setText(text); + // unused } + /** + * Unused + * @return unused + * @deprecated unused + */ + @Deprecated(since = "10.2", forRemoval = true) // unused public String getText() { - return label.getText(); + return null; } /** @@ -219,11 +232,11 @@ public class ImagePanel extends JPanel { } /** - * Set the magnification factor of the image. The zoom parameter is aligned to the - * nearest pre-configured magnification factor, rounding down for zoom factors less than + * Set the magnification factor of the image. The zoom parameter is aligned to the + * nearest pre-configured magnification factor, rounding down for zoom factors less than * 1.0, and up for factors greater than 1.0. Zoom factors outside the pre-configured range - * are limited to the nearest range extent. - * @param zoom + * are limited to the nearest range extent. + * @param zoom the zoom */ public void setZoomFactor(float zoom) { @@ -250,7 +263,7 @@ public class ImagePanel extends JPanel { // idx is now the index for where zoom should be inserted into levels... if (idx == 0) { - // Smaller zoom factor than our minimum-supported; just provide + // Smaller zoom factor than our minimum-supported; just provide // our minimum-supported return 0; } @@ -269,17 +282,17 @@ public class ImagePanel extends JPanel { return idx; } - /** - * Get the default zoom level - * @return + /** + * Get the default zoom factory + * @return the zoom factor */ public float getDefaultZoomFactor() { return defaultZoomFactor; } /** - * Set the default zoom level, adhering to the same set of constrains as {@link #setZoomFactor(float)} - * @param zoom + * Set the default zoom level, adhering to the same set of constrains as {@link #setZoomFactor(float)} + * @param zoom the zoom * @see #setZoomFactor(float) * @see #resetZoom() */ @@ -309,14 +322,14 @@ public class ImagePanel extends JPanel { } /** - * Determine if the image can zoom in further based on current magnification levels + * Determine if the image can zoom in further based on current magnification levels * @return True if magnification steps are available, false otherwise */ public boolean canZoomIn() { return image != null && zoomLevelIndex < ZOOM_LEVELS.length - 1; } - /** + /** * Enlarge the image about the image center */ public void zoomIn() { @@ -354,7 +367,7 @@ public class ImagePanel extends JPanel { } /** - * Determine if the image can zoom out further based on current magnification levels + * Determine if the image can zoom out further based on current magnification levels * @return True if (de-)magnification steps are available, false otherwise */ @@ -452,7 +465,7 @@ public class ImagePanel extends JPanel { } /** - * Move the image back to the center. Zoom factor is unmodified. + * Move the image back to the center. Zoom factor is unmodified. */ public void resetImageTranslation() { label.resetTranslation(); diff --git a/Ghidra/Framework/Docking/src/test.slow/java/docking/widgets/imagepanel/ImagePanelTest.java b/Ghidra/Framework/Docking/src/test.slow/java/docking/widgets/imagepanel/ImagePanelTest.java index 3ad663baa5..3e19c1e8f3 100644 --- a/Ghidra/Framework/Docking/src/test.slow/java/docking/widgets/imagepanel/ImagePanelTest.java +++ b/Ghidra/Framework/Docking/src/test.slow/java/docking/widgets/imagepanel/ImagePanelTest.java @@ -15,7 +15,7 @@ */ package docking.widgets.imagepanel; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import java.awt.Image; @@ -39,84 +39,92 @@ public class ImagePanelTest extends AbstractDockingTest { Image emptyImage = ResourceManager.getImageIcon(emptyIcon).getImage(); imagePanel = new ImagePanel(emptyImage); - frame = new JFrame("ImagePanel Test"); - frame.getContentPane().add(imagePanel); - frame.setSize(400, 400); + runSwing(() -> { + frame = new JFrame("ImagePanel Test"); + frame.getContentPane().add(imagePanel); + frame.setSize(400, 400); - frame.setVisible(true); + frame.setVisible(true); + }); } @After public void tearDown() throws Exception { - frame.dispose(); + runSwing(() -> frame.dispose()); } private void reset() { - imagePanel.setZoomFactor(1.0f); + setZoom(1.0f); assertTrue("Unable to reset zoom factor", - Float.compare(imagePanel.getZoomFactor(), 1.0f) == 0); - + Float.compare(getZoom(), 1.0f) == 0); } @Test public void testZoom_Neutral() { reset(); - imagePanel.setZoomFactor(1.0f); + setZoom(1.0f); assertTrue("Zoom factor not set to 1.0x", - Float.compare(imagePanel.getZoomFactor(), 1.0f) == 0); + Float.compare(getZoom(), 1.0f) == 0); } @Test public void testZoom_10Point0f() { reset(); - imagePanel.setZoomFactor(10.0f); + setZoom(10.0f); assertTrue("Zoom factor not set to 10.0x", - Float.compare(imagePanel.getZoomFactor(), 10.0f) == 0); + Float.compare(getZoom(), 10.0f) == 0); } @Test public void testZoom_0Point05() { reset(); - imagePanel.setZoomFactor(0.05f); + setZoom(0.05f); assertTrue("Zoom factor not set to 0.05x", - Float.compare(imagePanel.getZoomFactor(), 0.05f) == 0); + Float.compare(getZoom(), 0.05f) == 0); } @Test public void testZoom_20Point0() { reset(); - imagePanel.setZoomFactor(20.0f); + setZoom(20.0f); assertTrue("Zoom factor not set to 20.0x; should be 10.0x", - Float.compare(imagePanel.getZoomFactor(), 10.0f) == 0); + Float.compare(getZoom(), 10.0f) == 0); } @Test public void testZoom_0Point001() { reset(); - imagePanel.setZoomFactor(0.001f); + setZoom(0.001f); assertTrue("Zoom factor not set to 0.001x; should be 0.05x", - Float.compare(imagePanel.getZoomFactor(), 0.05f) == 0); + Float.compare(getZoom(), 0.05f) == 0); } @Test public void testZoom_3Point75() { reset(); - imagePanel.setZoomFactor(3.75f); + setZoom(3.75f); assertTrue("Zoom factor not set to 3.75x; should be 4.0x", - Float.compare(imagePanel.getZoomFactor(), 4.0f) == 0); + Float.compare(getZoom(), 4.0f) == 0); } + private void setZoom(float zoom) { + runSwing(() -> imagePanel.setZoomFactor(zoom)); + } + + private float getZoom() { + return runSwing(() -> imagePanel.getZoomFactor()); + } } diff --git a/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/graph/GraphActionsTest.java b/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/graph/GraphActionsTest.java index bbee85c55b..0f11c57825 100644 --- a/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/graph/GraphActionsTest.java +++ b/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/graph/GraphActionsTest.java @@ -416,30 +416,30 @@ public class GraphActionsTest extends AbstractGhidraHeadedIntegrationTest { @Test public void testGetActiveGraph() throws Exception { - + GraphDisplayBroker broker = tool.getService(GraphDisplayBroker.class); GraphDisplayProvider service = broker.getGraphDisplayProvider("Default Graph Display"); GraphDisplay firstDisplay = service.getActiveGraphDisplay(); assertNotNull(firstDisplay); - + showGraph(); GraphDisplay secondDisplay = service.getActiveGraphDisplay(); assertNotNull(secondDisplay); assertNotSame(firstDisplay, secondDisplay); - + showGraph(); GraphDisplay thirdDisplay = service.getActiveGraphDisplay(); assertNotNull(thirdDisplay); assertNotSame(firstDisplay, thirdDisplay); assertNotSame(secondDisplay, thirdDisplay); - + close(thirdDisplay); close(firstDisplay); - + GraphDisplay activeDisplay = service.getActiveGraphDisplay(); assertNotNull(activeDisplay); assertSame(secondDisplay, activeDisplay); - + close(secondDisplay); activeDisplay = service.getActiveGraphDisplay(); assertNull(activeDisplay);