ghidra/Ghidra/Test/IntegrationTest/src/screen/java/help/screenshot/SearchScreenShots.java

237 lines
6.8 KiB
Java

/* ###
* IP: GHIDRA
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package help.screenshot;
import java.awt.Window;
import javax.swing.*;
import javax.swing.table.TableModel;
import org.junit.Before;
import org.junit.Test;
import docking.ComponentProvider;
import docking.DialogComponentProvider;
import docking.widgets.combobox.GhidraComboBox;
import docking.widgets.table.threaded.ThreadedTableModel;
import ghidra.app.plugin.core.searchtext.SearchTextPlugin;
import ghidra.app.plugin.core.string.StringTableProvider;
import ghidra.app.plugin.core.table.TableComponentProvider;
import ghidra.app.util.SearchConstants;
/**
* Captures screenshots associated with Memory Search.
*/
public class SearchScreenShots extends AbstractSearchScreenShots {
private SearchTextPlugin searchPlugin;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
searchPlugin = env.getPlugin(SearchTextPlugin.class);
env.showTool();
}
/**
* Captures the Direct References search dialog.
*/
@Test
public void testDirectReferences() {
moveTool(500, 500);
goToListing(0x407b44, "Address", false);
performAction("Search for Direct References", "FindPossibleReferencesPlugin", false);
waitForSwing();
ComponentProvider provider = getProvider(TableComponentProvider.class);
JComponent component = provider.getComponent();
JTable table = findComponent(component, JTable.class);
TableModel model = table.getModel();
waitForTableModel((ThreadedTableModel<?, ?>) model);
captureIsolatedProvider(TableComponentProvider.class, 800, 350);
}
/**
* Captures the Direct References search dialog for a selection.
*/
@Test
public void testDirectRefsOnSelection() {
moveTool(500, 500);
goToListing(0x407b44, "Address", false);
makeSelection(0x40e626, 0x40e748);
performAction("Search for Direct References", "FindPossibleReferencesPlugin", false);
waitForSwing();
ComponentProvider provider = getProvider(TableComponentProvider.class);
JComponent component = provider.getComponent();
JTable table = findComponent(component, JTable.class);
TableModel model = table.getModel();
waitForTableModel((ThreadedTableModel<?, ?>) model);
captureIsolatedProvider(TableComponentProvider.class, 800, 350);
}
@Test
public void testQueryResultsSearch() {
moveTool(500, 500);
performAction("Search Text", "SearchTextPlugin", false);
waitForSwing();
DialogComponentProvider dialog = getDialog();
JRadioButton rbAll = (JRadioButton) getInstanceField("searchAllRB", dialog);
rbAll.setSelected(true);
@SuppressWarnings("unchecked")
GhidraComboBox<String> comboBox =
(GhidraComboBox<String>) getInstanceField("valueComboBox", dialog);
setComboBoxSelection(comboBox, "LAB");
final JButton allButton = (JButton) getInstanceField("allButton", dialog);
pressButton(allButton);
waitForSwing();
ComponentProvider provider = getProvider(TableComponentProvider.class);
JComponent component = provider.getComponent();
JTable table = findComponent(component, JTable.class);
TableModel model = table.getModel();
waitForTableModel((ThreadedTableModel<?, ?>) model);
Window window = getWindowByTitle(null, "Search Limit Exceeded!");
pressButtonByText(window, "OK");
captureIsolatedProvider(TableComponentProvider.class, 500, 450);
}
@Test
public void testSearchForAddressTables() {
moveTool(500, 500);
performAction("Search for Address Tables", "AutoTableDisassemblerPlugin", false);
waitForSwing();
DialogComponentProvider dialog = getDialog();
waitForSwing();
pressButtonByText(dialog, "Search");
JComponent component = dialog.getComponent();
JTable table = findComponent(component, JTable.class);
TableModel model = table.getModel();
waitForTableModel((ThreadedTableModel<?, ?>) model);
captureDialog(DialogComponentProvider.class, 800, 525);
}
/**
* Captures the warning dialog displayed when the search results reach the maximum
* limit.
*/
@Test
public void testSearchLimitExceeded() {
moveTool(500, 500);
// Set the search results max to a low number that we know will be hit with the
// custom program we've loaded. Also, we are NOT changing the option so that dialog
// that is shown will have the default value
searchPlugin = env.getPlugin(SearchTextPlugin.class);
searchPlugin.optionsChanged(null, SearchConstants.SEARCH_LIMIT_NAME, null, 10);
performAction("Search Text", "SearchTextPlugin", false);
waitForSwing();
DialogComponentProvider dialog = getDialog();
JRadioButton rbAll = (JRadioButton) getInstanceField("searchAllRB", dialog);
rbAll.setSelected(true);
@SuppressWarnings("unchecked")
GhidraComboBox<String> comboBox =
(GhidraComboBox<String>) getInstanceField("valueComboBox", dialog);
setComboBoxSelection(comboBox, "0");
final JButton allButton = (JButton) getInstanceField("allButton", dialog);
pressButton(allButton);
ComponentProvider provider = getProvider(TableComponentProvider.class);
JComponent component = provider.getComponent();
JTable table = findComponent(component, JTable.class);
TableModel model = table.getModel();
waitForTableModel((ThreadedTableModel<?, ?>) model);
Window errorDialog = waitForWindow("Search Limit Exceeded!", 2000);
captureWindow(errorDialog);
}
@Test
public void testSearchText() {
moveTool(500, 500);
performAction("Search Text", "SearchTextPlugin", false);
waitForSwing();
DialogComponentProvider dialog = getDialog();
JCheckBox button = (JCheckBox) getInstanceField("commentsCB", dialog);
setSelected(button, true);
captureDialog(DialogComponentProvider.class);
}
@Test
public void testStringSearchDialog() {
moveTool(500, 500);
performAction("Search for Strings", "StringTablePlugin", false);
waitForSwing();
captureDialog(DialogComponentProvider.class, 500, 325);
}
@Test
public void testStringSearchResults() {
moveTool(1000, 1000);
performAction("Search for Strings", "StringTablePlugin", false);
waitForSwing();
DialogComponentProvider dialog = getDialog();
pressButtonByText(dialog, "Search");
waitForSwing();
ComponentProvider provider = getProvider(StringTableProvider.class);
JComponent component = provider.getComponent();
JTable table = findComponent(component, JTable.class);
TableModel model = table.getModel();
waitForTableModel((ThreadedTableModel<?, ?>) model);
captureIsolatedProvider(StringTableProvider.class, 1000, 750);
}
}