blob: 262529b1ca22993b9263ffb73fcef16e126f0412 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, 2018 École Polytechnique de Montréal
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Geneviève Bastien - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.ui.tests.project.model;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.tracecompass.tmf.ui.project.model.ITmfProjectModelElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfAnalysisElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfAnalysisOutputElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfCommonProjectElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
import org.eclipse.tracecompass.tmf.ui.tests.shared.IWaitCondition;
import org.eclipse.tracecompass.tmf.ui.tests.shared.ProjectModelTestData;
import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitTimeoutException;
import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitUtils;
import org.eclipse.tracecompass.tmf.ui.tests.stubs.analysis.TestAnalysisUi;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Test suite for the {@link TmfAnalysisOutputElement} class.
*
* @author Geneviève Bastien
*/
public class ProjectModelOutputTest {
private TmfProjectElement fixture;
/**
* Perform pre-test initialization.
*/
@Before
public void setUp() {
try {
fixture = ProjectModelTestData.getFilledProject();
} catch (CoreException e) {
fail(e.getMessage());
}
}
/**
* Cleans up the project after tests have been executed
*/
@After
public void cleanUp() {
ProjectModelTestData.deleteProject(fixture);
}
private TmfTraceElement getTraceElement() {
TmfTraceElement trace = null;
final TmfTraceFolder tracesFolder = fixture.getTracesFolder();
assertNotNull(tracesFolder);
for (ITmfProjectModelElement element : tracesFolder.getChildren()) {
if (element instanceof TmfTraceElement) {
TmfTraceElement traceElement = (TmfTraceElement) element;
if (traceElement.getName().equals(ProjectModelTestData.getTraceName())) {
trace = traceElement;
}
}
}
assertNotNull(trace);
return trace;
}
private TmfAnalysisElement getTestAnalysisUi() {
TmfTraceElement trace = getTraceElement();
/* Make sure the analysis list is not empty */
List<TmfAnalysisElement> analysisList = trace.getAvailableAnalysis();
assertFalse(analysisList.isEmpty());
/* Make sure TestAnalysisUi is there */
TmfAnalysisElement analysis = null;
for (TmfAnalysisElement analysisElement : analysisList) {
if (analysisElement.getAnalysisId().equals(ProjectModelAnalysisTest.MODULE_UI)) {
analysis = analysisElement;
}
}
assertNotNull(analysis);
return analysis;
}
/**
* Test the getAvailableOutputs() method
*/
@Test
public void testListOutputs() {
TmfAnalysisElement analysis = getTestAnalysisUi();
TmfCommonProjectElement traceElement = analysis.getParent().getParent();
/* To get the list of outputs the trace needs to be opened */
analysis.activateParentTrace();
try {
ProjectModelTestData.delayUntilTraceOpened(traceElement);
} catch (WaitTimeoutException e) {
fail("The analysis parent did not open in a reasonable time");
}
/* Make sure the output list is not empty */
WaitUtils.waitUntil(new ConditionTraceChildrenElements(analysis, 1));
List<TmfAnalysisOutputElement> outputList = analysis.getAvailableOutputs();
assertFalse(outputList.isEmpty());
boolean found = false;
for (ITmfProjectModelElement element : outputList) {
if (element instanceof TmfAnalysisOutputElement) {
TmfAnalysisOutputElement outputElement = (TmfAnalysisOutputElement) element;
if (outputElement.getName().equals("Test Analysis View")) {
found = true;
}
}
}
assertTrue(found);
traceElement.closeEditors();
}
/**
* Test the outputAnalysis method for a view
*/
@Test
public void testOpenView() {
TmfAnalysisElement analysis = getTestAnalysisUi();
TmfCommonProjectElement traceElement = analysis.getParent().getParent();
analysis.activateParentTrace();
try {
ProjectModelTestData.delayUntilTraceOpened(traceElement);
} catch (WaitTimeoutException e) {
fail("The analysis parent did not open in a reasonable time");
}
WaitUtils.waitUntil(new ConditionTraceChildrenElements(analysis, 1));
List<TmfAnalysisOutputElement> outputList = analysis.getAvailableOutputs();
assertFalse(outputList.isEmpty());
final IWorkbench wb = PlatformUI.getWorkbench();
final IWorkbenchPage activePage = wb.getActiveWorkbenchWindow().getActivePage();
IViewPart view = activePage.findView(TestAnalysisUi.VIEW_ID);
if (view != null) {
activePage.hideView(view);
}
TmfAnalysisOutputElement outputElement = null;
for (ITmfProjectModelElement element : outputList) {
if (element instanceof TmfAnalysisOutputElement) {
TmfAnalysisOutputElement el = (TmfAnalysisOutputElement) element;
if (el.getName().equals("Test Analysis View")) {
outputElement = el;
}
}
}
assertNotNull(outputElement);
outputElement.outputAnalysis();
WaitUtils.waitUntil(workbenchPage -> workbenchPage.findView(TestAnalysisUi.VIEW_ID) != null,
activePage, "Test Analysis View did not open");
traceElement.closeEditors();
}
private static final class ConditionTraceChildrenElements implements IWaitCondition {
private final ITmfProjectModelElement fProjectElement;
private int fCurNumChildren;
private int fExpectedChildNum;
private ConditionTraceChildrenElements(ITmfProjectModelElement projectElement, int childNum) {
fProjectElement = projectElement;
fExpectedChildNum = childNum;
}
@Override
public boolean test() throws Exception {
fCurNumChildren = fProjectElement.getChildren().size();
return fCurNumChildren == fExpectedChildNum;
}
@Override
public String getFailureMessage() {
return "Timeout while waiting for " + fProjectElement + " to have number of children. Expected: " + fExpectedChildNum + " Actual: " + fCurNumChildren;
}
}
}