1972d2398058b3b2d34b669fb38b7ef7b78dcb18
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui.swtbot.tests / src / org / eclipse / tracecompass / tmf / ui / swtbot / tests / viewers / events / ColumnHeaderMenuTest.java
1 /*******************************************************************************
2 * Copyright (c) 2015 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.tracecompass.tmf.ui.swtbot.tests.viewers.events;
14
15 import static org.junit.Assert.assertArrayEquals;
16 import static org.junit.Assert.fail;
17 import static org.junit.Assume.assumeTrue;
18
19 import java.io.File;
20 import java.io.IOException;
21 import java.net.URI;
22 import java.net.URISyntaxException;
23 import java.net.URL;
24 import java.util.ArrayList;
25 import java.util.List;
26
27 import org.apache.log4j.ConsoleAppender;
28 import org.apache.log4j.Logger;
29 import org.apache.log4j.SimpleLayout;
30 import org.eclipse.core.runtime.FileLocator;
31 import org.eclipse.core.runtime.Path;
32 import org.eclipse.swt.widgets.Table;
33 import org.eclipse.swt.widgets.TableColumn;
34 import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
35 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor;
36 import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
37 import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
38 import org.eclipse.swtbot.swt.finder.results.ArrayResult;
39 import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
40 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable;
41 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTableColumn;
42 import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin;
43 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
44 import org.junit.After;
45 import org.junit.AfterClass;
46 import org.junit.Before;
47 import org.junit.BeforeClass;
48 import org.junit.Test;
49 import org.junit.runner.RunWith;
50
51 /**
52 * SWTBot test for event table column header menu.
53 */
54 @RunWith(SWTBotJunit4ClassRunner.class)
55 public class ColumnHeaderMenuTest {
56
57 private static final String TRACE_PROJECT_NAME = "test";
58 private static final String COLUMN_TRACE = "syslog_collapse";
59 private static final String COLUMN_TRACE_PATH = "testfiles/" + COLUMN_TRACE;
60 private static final String COLUMN_TRACE_TYPE = "org.eclipse.linuxtools.tmf.tests.stubs.trace.text.testsyslog";
61
62 private static File fTestFile = null;
63
64 private static SWTWorkbenchBot fBot;
65 private SWTBotEditor fEditorBot;
66
67 /** The Log4j logger instance. */
68 private static final Logger fLogger = Logger.getRootLogger();
69
70 /**
71 * Test Class setup
72 */
73 @BeforeClass
74 public static void beforeClass() {
75 SWTBotUtils.initialize();
76
77 /* set up test trace */
78 URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(COLUMN_TRACE_PATH), null);
79 URI uri;
80 try {
81 uri = FileLocator.toFileURL(location).toURI();
82 fTestFile = new File(uri);
83 } catch (URISyntaxException | IOException e) {
84 fail(e.getMessage());
85 }
86
87 assumeTrue(fTestFile.exists());
88
89 /* Set up for swtbot */
90 SWTBotPreferences.TIMEOUT = 20000; /* 20 second timeout */
91 fLogger.removeAllAppenders();
92 fLogger.addAppender(new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT));
93 fBot = new SWTWorkbenchBot();
94
95 /* Close welcome view */
96 SWTBotUtils.closeView("Welcome", fBot);
97
98 /* Switch perspectives */
99 SWTBotUtils.switchToTracingPerspective();
100
101 /* Finish waiting for eclipse to load */
102 SWTBotUtils.waitForJobs();
103
104 SWTBotUtils.createProject(TRACE_PROJECT_NAME);
105 }
106
107 /**
108 * Test class tear down method.
109 */
110 @AfterClass
111 public static void afterClass() {
112 SWTBotUtils.deleteProject(TRACE_PROJECT_NAME, fBot);
113 fLogger.removeAllAppenders();
114 }
115
116 /**
117 * Before Test
118 */
119 @Before
120 public void before() {
121 SWTBotUtils.openTrace(TRACE_PROJECT_NAME, fTestFile.getAbsolutePath(), COLUMN_TRACE_TYPE);
122 fEditorBot = SWTBotUtils.activateEditor(fBot, fTestFile.getName());
123 }
124
125 /**
126 * After Test
127 */
128 @After
129 public void after() {
130 fBot.closeAllEditors();
131 SWTBotUtils.closeSecondaryShells(fBot);
132 }
133
134 /**
135 * Test the check menu items to toggle column visibility
136 */
137 @Test
138 public void testToggleColumns() {
139 final SWTBotTable tableBot = fEditorBot.bot().table();
140 SWTBotTableColumn headerBot = tableBot.header("");
141 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "Logger", "File", "Line", "Message" });
142
143 headerBot.contextMenu("Message").click();
144 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "Logger", "File", "Line" });
145
146 headerBot.contextMenu("Line").click();
147 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "Logger", "File" });
148
149 headerBot.contextMenu("File").click();
150 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "Logger" });
151
152 headerBot.contextMenu("Logger").click();
153 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host" });
154
155 headerBot.contextMenu("Host").click();
156 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp" });
157
158 headerBot.contextMenu("Timestamp").click();
159 assertVisibleColumns(tableBot.widget, new String[] {});
160
161 headerBot.contextMenu("Message").click();
162 assertVisibleColumns(tableBot.widget, new String[] { "Message" });
163
164 headerBot.contextMenu("Timestamp").click();
165 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Message" });
166
167 headerBot.contextMenu("Line").click();
168 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Line", "Message" });
169
170 headerBot.contextMenu("Host").click();
171 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "Line", "Message" });
172
173 headerBot.contextMenu("File").click();
174 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "File", "Line", "Message" });
175
176 headerBot.contextMenu("Logger").click();
177 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "Logger", "File", "Line", "Message" });
178 }
179
180 /**
181 * Test the Show All menu item
182 */
183 @Test
184 public void testPersistHiding() {
185 SWTBotTable tableBot = fEditorBot.bot().table();
186 SWTBotTableColumn headerBot = tableBot.header("");
187 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "Logger", "File", "Line", "Message" });
188
189 headerBot.contextMenu("Timestamp").click();
190 headerBot.contextMenu("Host").click();
191 headerBot.contextMenu("Logger").click();
192 headerBot.contextMenu("File").click();
193 headerBot.contextMenu("Message").click();
194 assertVisibleColumns(tableBot.widget, new String[] { "Line" });
195 after();
196
197 before();
198 tableBot = fEditorBot.bot().table();
199 assertVisibleColumns(tableBot.widget, new String[] { "Line" });
200 headerBot = tableBot.header("");
201 headerBot.contextMenu("Show All").click();
202 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "Logger", "File", "Line", "Message" });
203 }
204
205 /**
206 * Test the Show All menu item
207 */
208 @Test
209 public void testShowAll() {
210 final SWTBotTable tableBot = fEditorBot.bot().table();
211 SWTBotTableColumn headerBot = tableBot.header("");
212 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "Logger", "File", "Line", "Message" });
213
214 headerBot.contextMenu("Timestamp").click();
215 headerBot.contextMenu("Host").click();
216 headerBot.contextMenu("Logger").click();
217 headerBot.contextMenu("File").click();
218 headerBot.contextMenu("Line").click();
219 headerBot.contextMenu("Message").click();
220 assertVisibleColumns(tableBot.widget, new String[] {});
221
222 headerBot.contextMenu("Show All").click();
223 assertVisibleColumns(tableBot.widget, new String[] { "Timestamp", "Host", "Logger", "File", "Line", "Message" });
224 }
225
226 private static void assertVisibleColumns(final Table table, String[] expected) {
227 String[] actual = UIThreadRunnable.syncExec(new ArrayResult<String>() {
228 @Override
229 public String[] run() {
230 List<String> visible = new ArrayList<>();
231 for (int i : table.getColumnOrder()) {
232 TableColumn column = table.getColumns()[i];
233 if (column.getResizable() && column.getWidth() > 0) {
234 visible.add(column.getText());
235 }
236 }
237 return visible.toArray(new String[0]);
238 }
239 });
240 assertArrayEquals(expected, actual);
241 }
242 }
This page took 0.038032 seconds and 4 git commands to generate.