package org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests.latency;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Random;
+import java.util.stream.Collectors;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Logger;
import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.latency.SystemCallLatencyView;
import org.eclipse.tracecompass.segmentstore.core.BasicSegment;
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.ui.dialog.TmfFileDialogFactory;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitUtils;
*
* @throws NoSuchMethodException
* Error creating the tsv
+ * @throws IOException
+ * no such file or the file is locked.
*/
@Test
- public void testWriteToTsv() throws NoSuchMethodException {
+ public void testWriteToTsv() throws NoSuchMethodException, IOException {
+
List<@NonNull BasicSegment> fixture = new ArrayList<>();
for (int i = 1; i <= 20; i++) {
int start = i;
bot.waitUntil(ConditionHelpers.isTableCellFilled(tableBot, "1", 0, 2));
SWTWorkbenchBot swtWorkbenchBot = new SWTWorkbenchBot();
SWTBotView viewBot = swtWorkbenchBot.viewById(VIEW_ID);
- testToTsv(viewBot);
+ List<String> actionResult = Arrays.asList(testToTsv(viewBot));
+ String absolutePath = TmfTraceManager.getTemporaryDirPath() + File.separator + "syscallLatencyTest.testWriteToTsv.tsv";
+ TmfFileDialogFactory.setOverrideFiles(absolutePath);
SWTBotMenu menuBot = viewBot.viewMenu().menu("Export to TSV");
- assertTrue(menuBot.isEnabled());
- assertTrue(menuBot.isVisible());
+ try {
+ assertTrue(menuBot.isEnabled());
+ assertTrue(menuBot.isVisible());
+ menuBot.click();
+
+ try (BufferedReader br = new BufferedReader(new FileReader(absolutePath))) {
+ List<String> lines = br.lines().collect(Collectors.toList());
+ assertEquals("Both reads", actionResult, lines);
+ }
+ } finally {
+ new File(absolutePath).delete();
+ }
+
}
- private void testToTsv(SWTBotView view) throws NoSuchMethodException {
+ private String[] testToTsv(SWTBotView view) throws NoSuchMethodException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
assertNotNull(os);
Class<@NonNull AbstractSegmentStoreTableView> clazz = AbstractSegmentStoreTableView.class;
assertNotNull(lines);
assertEquals("number of lines", 21, lines.length);
assertEquals("header", "Start Time\tEnd Time\tDuration", lines[0]);
- // not a straight up string compare due to time zones. Kathmandu and Eucla have 15 minute time zones.
+ // not a straight up string compare due to time zones. Kathmandu and
+ // Eucla have 15 minute time zones.
assertTrue("line 1", lines[1].matches("\\d\\d:\\d\\d:00\\.000\\s000\\s001\\t\\d\\d:\\d\\d:00.000 000 002\\t1"));
+ return lines;
}
/**
});
}
-
/**
* Focus on the main window
*
* Close a view with an id
*
* @param viewId
- * the view id, like "org.eclipse.linuxtools.tmf.ui.views.histogram"
+ * the view id, like
+ * "org.eclipse.linuxtools.tmf.ui.views.histogram"
* @param bot
* the workbench bot
*/
printEnvironment();
// There seems to be problems on some system where the main shell is
- // not in focus initially. This was seen using Xvfb and Xephyr on some occasions.
+ // not in focus initially. This was seen using Xvfb and Xephyr on
+ // some occasions.
focusMainWindow(bot.shells());
Shell shell = bot.activeShell().widget;
return;
}
- // Print some information about the environment that could affect test outcome
+ // Print some information about the environment that could affect test
+ // outcome
Rectangle bounds = Display.getDefault().getBounds();
System.out.println("Display size: " + bounds.width + "x" + bounds.height);
String gtkVersion = System.getProperty("org.eclipse.swt.internal.gtk.version");
if (gtkVersion != null) {
System.out.println("GTK version=" + gtkVersion);
- // Try to print the GTK theme information as behavior can change depending on the theme
+ // Try to print the GTK theme information as behavior can change
+ // depending on the theme
String gtkTheme = System.getProperty("org.eclipse.swt.internal.gtk.theme");
System.out.println("GTK theme=" + (gtkTheme == null ? "unknown" : gtkTheme));
* @param bot
* a given workbench bot
* @param projectName
- * the name of the project (it needs to exist or else it would time out)
+ * the name of the project (it needs to exist or else it would
+ * time out)
* @return a {@link SWTBotTreeItem} of the project
*/
public static SWTBotTreeItem selectProject(SWTWorkbenchBot bot, String projectName) {
try {
bot.waitUntil(ConditionHelpers.IsTreeChildNodeAvailable(nodeName, currentNode));
} catch (TimeoutException e) {
- //FIXME: Sometimes in a JFace TreeViewer, it expands to nothing. Need to find out why.
+ // FIXME: Sometimes in a JFace TreeViewer, it expands to
+ // nothing. Need to find out why.
currentNode.collapse();
currentNode.expand();
bot.waitUntil(ConditionHelpers.IsTreeChildNodeAvailable(nodeName, currentNode));