24 * 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 26 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 27 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 28 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 31 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY 32 * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 */ 34 package org.openjdk.jmc.flightrecorder.uitest; 35 36 import org.junit.Assert; 37 import org.junit.Rule; 38 import org.junit.Test; 39 import org.openjdk.jmc.test.jemmy.MCJemmyTestBase; 40 import org.openjdk.jmc.test.jemmy.MCUITestRule; 41 import org.openjdk.jmc.test.jemmy.misc.wrappers.MCChartCanvas; 42 import org.openjdk.jmc.test.jemmy.misc.wrappers.JfrNavigator; 43 import org.openjdk.jmc.test.jemmy.misc.wrappers.JfrUi; 44 import org.openjdk.jmc.test.jemmy.misc.wrappers.MCMenu; 45 import org.openjdk.jmc.test.jemmy.misc.wrappers.MCTable; 46 47 public class JfrThreadsPageTest extends MCJemmyTestBase { 48 49 private static final String PLAIN_JFR = "plain_recording.jfr"; 50 private static final String TABLE_COLUMN_HEADER = "Thread"; 51 private static final String HIDE_THREAD = org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages.ThreadsPage_HIDE_THREAD_ACTION; 52 private static final String RESET_CHART = org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages.ThreadsPage_RESET_CHART_TO_SELECTION_ACTION; 53 54 private static MCChartCanvas chartCanvas; 55 private static MCTable threadsTable; 56 57 @Rule 58 public MCUITestRule testRule = new MCUITestRule(verboseRuleOutput) { 59 @Override 60 public void before() { 61 JfrUi.openJfr(materialize("jfr", PLAIN_JFR, JfrThreadsPageTest.class)); 62 JfrNavigator.selectTab(JfrUi.Tabs.THREADS); 63 threadsTable = MCTable.getByColumnHeader(TABLE_COLUMN_HEADER); 64 chartCanvas = MCChartCanvas.getChartCanvas(); 65 } 66 67 @Override 68 public void after() { 69 MCMenu.closeActiveEditor(); 70 } 71 }; 72 73 @Test 74 public void testMenuItemEnablement() { 75 final int numThreads = threadsTable.getItemCount(); 76 Assert.assertTrue(numThreads > 0); 77 78 Assert.assertFalse(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 79 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 80 81 chartCanvas.clickContextMenuItem(HIDE_THREAD); 82 83 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 84 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 85 86 chartCanvas.clickContextMenuItem(RESET_CHART); 87 88 Assert.assertFalse(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 89 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 90 } 91 92 @Test 93 public void testHideAllThreads() { 94 final int numSelection = 7; 95 final int numThreads = threadsTable.getItemCount(); 96 Assert.assertTrue(numThreads > 0 && numThreads >= numSelection); 97 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 98 Assert.assertFalse(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 99 100 // Select a limited number of threads in the chart using the table 101 threadsTable.selectItems(0, numSelection - 1); 102 103 // Hide all the threads from the chart 104 for (int i = 0; i < numSelection; i++) { 105 chartCanvas.clickContextMenuItem(HIDE_THREAD); 106 } 107 108 // Once all threads are hidden from the chart, the hide thread menu item will be disabled 109 Assert.assertFalse(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 110 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 111 112 chartCanvas.clickContextMenuItem(RESET_CHART); 113 114 // Verify the menu item isEnabled values are back to their default values 115 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 116 Assert.assertFalse(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 117 } 118 } 119 | 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 26 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 27 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 28 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 31 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY 32 * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 */ 34 package org.openjdk.jmc.flightrecorder.uitest; 35 36 import org.junit.Assert; 37 import org.junit.Rule; 38 import org.junit.Test; 39 import org.openjdk.jmc.test.jemmy.MCJemmyTestBase; 40 import org.openjdk.jmc.test.jemmy.MCUITestRule; 41 import org.openjdk.jmc.test.jemmy.misc.wrappers.MCChartCanvas; 42 import org.openjdk.jmc.test.jemmy.misc.wrappers.JfrNavigator; 43 import org.openjdk.jmc.test.jemmy.misc.wrappers.JfrUi; 44 import org.openjdk.jmc.test.jemmy.misc.wrappers.MCButton; 45 import org.openjdk.jmc.test.jemmy.misc.wrappers.MCMenu; 46 import org.openjdk.jmc.test.jemmy.misc.wrappers.MCTable; 47 import org.openjdk.jmc.test.jemmy.misc.wrappers.MCText; 48 import org.openjdk.jmc.test.jemmy.misc.wrappers.MCToolBar; 49 import org.openjdk.jmc.ui.UIPlugin; 50 51 public class JfrThreadsPageTest extends MCJemmyTestBase { 52 53 private static final String PLAIN_JFR = "plain_recording.jfr"; 54 private static final String TABLE_COLUMN_HEADER = "Thread"; 55 private static final String OK_BUTTON = "OK"; 56 private static final String RESET_BUTTON = "Reset"; 57 private static final String FILTER_BUTTON = "Filter"; 58 private static final String START_TIME = "08:06:19:489"; 59 private static final String NEW_START_TIME = "08:06:19:500"; 60 private static final String DEFAULT_ZOOM = "100.00 %"; 61 private static final String HIDE_THREAD = org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages.ThreadsPage_HIDE_THREAD_ACTION; 62 private static final String RESET_CHART = org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages.ThreadsPage_RESET_CHART_TO_SELECTION_ACTION; 63 private static final String TABLE_TOOLTIP = org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages.ThreadsPage_VIEW_THREAD_DETAILS; 64 private static final String TABLE_SHELL_TEXT = org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages.ThreadsPage_TABLE_POPUP_TITLE; 65 66 private static MCChartCanvas chartCanvas; 67 private static MCTable threadsTable; 68 69 @Rule 70 public MCUITestRule testRule = new MCUITestRule(verboseRuleOutput) { 71 @Override 72 public void before() { 73 JfrUi.openJfr(materialize("jfr", PLAIN_JFR, JfrThreadsPageTest.class)); 74 JfrNavigator.selectTab(JfrUi.Tabs.THREADS); 75 chartCanvas = MCChartCanvas.getChartCanvas(); 76 } 77 78 @Override 79 public void after() { 80 MCMenu.closeActiveEditor(); 81 } 82 }; 83 84 @Test 85 public void testResetButtons() { 86 MCText StartTimeField = MCText.getByText(START_TIME); 87 MCText zoomDisplay = MCText.getByText(DEFAULT_ZOOM); 88 MCButton filterBtn = MCButton.getByLabel(FILTER_BUTTON); 89 MCButton resetBtn = MCButton.getByLabel(RESET_BUTTON); 90 MCButton scaleToFitBtn = MCButton.getByImage( 91 UIPlugin.getDefault().getImage(UIPlugin.ICON_FA_SCALE_TO_FIT)); 92 93 StartTimeField.setText(NEW_START_TIME); 94 filterBtn.click(); 95 Assert.assertNotEquals(START_TIME, StartTimeField.getText()); 96 Assert.assertNotEquals(zoomDisplay.getText(), DEFAULT_ZOOM); 97 98 resetBtn.click(); 99 Assert.assertEquals(START_TIME, StartTimeField.getText()); 100 Assert.assertEquals(zoomDisplay.getText(), DEFAULT_ZOOM); 101 102 StartTimeField.setText(NEW_START_TIME); 103 filterBtn.click(); 104 Assert.assertNotEquals(START_TIME, StartTimeField.getText()); 105 Assert.assertNotEquals(zoomDisplay.getText(), DEFAULT_ZOOM); 106 107 scaleToFitBtn.click(); 108 Assert.assertEquals(zoomDisplay.getText(), DEFAULT_ZOOM); 109 Assert.assertEquals(START_TIME, StartTimeField.getText()); 110 } 111 112 @Test 113 public void testMenuItemEnablement() { 114 openThreadsTable(); 115 final int numThreads = threadsTable.getItemCount(); 116 closeThreadsTable(); 117 118 Assert.assertTrue(numThreads > 0); 119 120 Assert.assertFalse(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 121 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 122 123 chartCanvas.clickContextMenuItem(HIDE_THREAD); 124 125 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 126 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 127 128 chartCanvas.clickContextMenuItem(RESET_CHART); 129 130 Assert.assertFalse(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 131 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 132 } 133 134 @Test 135 public void testHideAllThreads() { 136 final int numSelection = 7; 137 138 openThreadsTable(); 139 final int numThreads = threadsTable.getItemCount(); 140 closeThreadsTable(); 141 142 Assert.assertTrue(numThreads > 0 && numThreads >= numSelection); 143 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 144 Assert.assertFalse(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 145 146 openThreadsTable(); 147 // Select a limited number of threads in the chart using the table 148 threadsTable.selectItems(0, numSelection - 1); 149 closeThreadsTable(); 150 151 // Hide all the threads from the chart 152 for (int i = 0; i < numSelection; i++) { 153 chartCanvas.clickContextMenuItem(HIDE_THREAD); 154 } 155 156 // Once all threads are hidden from the chart, the hide thread menu item will be disabled 157 Assert.assertFalse(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 158 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 159 160 chartCanvas.clickContextMenuItem(RESET_CHART); 161 162 // Verify the menu item isEnabled values are back to their default values 163 Assert.assertTrue(chartCanvas.isContextMenuItemEnabled(HIDE_THREAD)); 164 Assert.assertFalse(chartCanvas.isContextMenuItemEnabled(RESET_CHART)); 165 } 166 167 @Test 168 public void testPopupTableSelection() { 169 openThreadsTable(); 170 final int numSelection = 7; 171 final int numThreads = threadsTable.getItemCount(); 172 Assert.assertTrue(numThreads > 0 && numThreads >= numSelection); 173 174 threadsTable.selectItems(0, numSelection - 1); 175 int originalSelection = threadsTable.getSelectionCount(); 176 Assert.assertEquals(numSelection, originalSelection); 177 closeThreadsTable(); 178 179 openThreadsTable(); 180 int newSelection = threadsTable.getSelectionCount(); 181 Assert.assertEquals(newSelection, originalSelection); 182 closeThreadsTable(); 183 } 184 185 private void openThreadsTable() { 186 if (threadsTable == null) { 187 MCToolBar.focusMc(); 188 MCToolBar tb = MCToolBar.getByToolTip(TABLE_TOOLTIP); 189 tb.clickToolItem(TABLE_TOOLTIP); 190 threadsTable = MCTable.getByColumnHeader(TABLE_SHELL_TEXT, TABLE_COLUMN_HEADER); 191 } 192 } 193 194 private void closeThreadsTable() { 195 if (threadsTable != null) { 196 MCButton okButton = MCButton.getByLabel(TABLE_SHELL_TEXT, OK_BUTTON); 197 okButton.click(); 198 threadsTable = null; 199 MCToolBar.focusMc(); 200 } 201 } 202 203 } |