import static org.junit.Assert.fail;
import java.util.List;
+import java.util.TimeZone;
+import java.util.concurrent.atomic.AtomicBoolean;
+import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jface.bindings.keys.IKeyLookup;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.bindings.keys.ParseException;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.eclipse.swtbot.swt.finder.widgets.TimeoutException;
+import org.eclipse.tracecompass.internal.tmf.ui.project.operations.NewExperimentOperation;
import org.eclipse.tracecompass.tmf.ui.editors.TmfEventsEditor;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentFolder;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfOpenTraceHelper;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfTracesFolder;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers.ProjectElementHasChild;
*
* @author Matthew Khouzam
*/
+@SuppressWarnings("restriction")
public final class SWTBotUtils {
private static final String WINDOW_MENU = "Window";
deleteProject(projectName, true, bot);
}
+ /**
+ * Creates an experiment
+ *
+ * @param bot
+ * a given workbench bot
+ * @param projectName
+ * the name of the project, creates the project if needed
+ * @param expName
+ * the experiment name
+ */
+ public static void createExperiment(SWTWorkbenchBot bot, String projectName, final @NonNull String expName) {
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+ TmfProjectElement tmfProject = TmfProjectRegistry.getProject(project, true);
+ TmfExperimentFolder expFolder = tmfProject.getExperimentsFolder();
+ assertNotNull(expFolder);
+ NewExperimentOperation operation = new NewExperimentOperation(expFolder, expName);
+ operation.run(new NullProgressMonitor());
+
+ bot.waitUntil(new DefaultCondition() {
+ @Override
+ public boolean test() throws Exception {
+ TmfExperimentElement experiment = expFolder.getExperiment(expName);
+ return experiment != null;
+ }
+
+ @Override
+ public String getFailureMessage() {
+ return "Experiment (" + expName + ") couldn't be created";
+ }
+ });
+ }
+
+
/**
* Focus on the main window
*
}
}
+ System.out.println("Time zone: " + TimeZone.getDefault().getDisplayName());
+
fPrintedEnvironment = true;
}
return tracesFolderItem;
}
+ /**
+ * Clear the traces folder
+ *
+ * @param bot
+ * a given workbench bot
+ * @param projectName
+ * the name of the project (needs to exist)
+ */
+ public static void clearTracesFolder(SWTWorkbenchBot bot, String projectName) {
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+ TmfProjectElement tmfProject = TmfProjectRegistry.getProject(project, false);
+ TmfTraceFolder tracesFolder = tmfProject.getTracesFolder();
+ try {
+ for (TmfTraceElement traceElement : tracesFolder.getTraces()) {
+ traceElement.delete(null);
+ }
+
+ final IFolder resource = tracesFolder.getResource();
+ resource.accept(new IResourceVisitor() {
+ @Override
+ public boolean visit(IResource visitedResource) throws CoreException {
+ if (visitedResource != resource) {
+ visitedResource.delete(true, null);
+ }
+ return true;
+ }
+ }, IResource.DEPTH_ONE, 0);
+ } catch (CoreException e) {
+ fail(e.getMessage());
+ }
+
+ bot.waitUntil(new DefaultCondition() {
+ private int fTraceNb = 0;
+
+ @Override
+ public boolean test() throws Exception {
+ List<TmfTraceElement> traces = tracesFolder.getTraces();
+ fTraceNb = traces.size();
+ return fTraceNb == 0;
+ }
+
+ @Override
+ public String getFailureMessage() {
+ return "Traces Folder not empty (" + fTraceNb + ")";
+ }
+ });
+ }
+
+ /**
+ * Clear the experiment folder
+ *
+ * @param bot
+ * a given workbench bot
+ * @param projectName
+ * the name of the project (needs to exist)
+ */
+ public static void clearExperimentFolder(SWTWorkbenchBot bot, String projectName) {
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+ TmfProjectElement tmfProject = TmfProjectRegistry.getProject(project, false);
+ TmfExperimentFolder expFolder = tmfProject.getExperimentsFolder();
+ expFolder.getExperiments().forEach(experiment -> {
+ IResource resource = experiment.getResource();
+ try {
+ // Close the experiment if open
+ experiment.closeEditors();
+
+ IPath path = resource.getLocation();
+ if (path != null) {
+ // Delete supplementary files
+ experiment.deleteSupplementaryFolder();
+ }
+ // Finally, delete the experiment
+ resource.delete(true, null);
+ } catch (CoreException e) {
+ fail(e.getMessage());
+ }
+ });
+
+ bot.waitUntil(new DefaultCondition() {
+ private int fExperimentNb = 0;
+
+ @Override
+ public boolean test() throws Exception {
+ List<TmfExperimentElement> experiments = expFolder.getExperiments();
+ fExperimentNb = experiments.size();
+ return fExperimentNb == 0;
+ }
+
+ @Override
+ public String getFailureMessage() {
+ return "Experiment Folder not empty (" + fExperimentNb + ")";
+ }
+ });
+ }
+
/**
* Select the project in Project Explorer
*
* the {@link SWTBotTable} table
*/
public static void maximizeTable(SWTBotTable tableBot) {
+ final AtomicBoolean controlResized = new AtomicBoolean();
+ UIThreadRunnable.syncExec(new VoidResult() {
+ @Override
+ public void run() {
+ tableBot.widget.addControlListener(new ControlAdapter() {
+ @Override
+ public void controlResized(ControlEvent e) {
+ tableBot.widget.removeControlListener(this);
+ controlResized.set(true);
+ }
+ });
+ }
+ });
try {
tableBot.pressShortcut(KeyStroke.getInstance(IKeyLookup.CTRL_NAME + "+"), KeyStroke.getInstance("M"));
} catch (ParseException e) {
fail();
}
+ new SWTBot().waitUntil(new DefaultCondition() {
+ @Override
+ public boolean test() throws Exception {
+ return controlResized.get();
+ }
+
+ @Override
+ public String getFailureMessage() {
+ return "Control was not resized";
+ }
+ });
}
/**