blob: 12079569aa0aa9585f9ab1421ae04c87812311c4 [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.assertEquals;
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 java.util.Optional;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
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.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.project.model.TmfViewsElement;
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.stubs.analysis.TestAnalysisUi;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Test suite for the {@link TmfAnalysisElement} class.
*
* @author Geneviève Bastien
*/
public class ProjectModelAnalysisTest {
/** ID of analysis module in UI */
public static final String MODULE_UI = "org.eclipse.linuxtools.tmf.ui.tests.test";
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;
}
/**
* Test the getAvailableAnalysis() method
*/
@Test
public void testListAnalysis() {
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(MODULE_UI)) {
analysis = analysisElement;
}
}
assertNotNull(analysis);
assertEquals("Test analysis in UI", analysis.getName());
}
/**
* Test if the list of available analysis is correctly populated by the
* content provider
*/
@Test
public void testPopulate() {
TmfTraceElement trace = getTraceElement();
/* Make sure the list of views is there and not empty */
Optional<TmfViewsElement> possibleViewsElem = trace.getChildren()
.stream()
.filter(child -> child instanceof TmfViewsElement)
.map(elem -> (TmfViewsElement) elem)
.findFirst();
assertTrue(possibleViewsElem.isPresent());
TmfViewsElement viewsElem = possibleViewsElem.get();
/* Make sure TestAnalysisUi is there */
Optional<TmfAnalysisElement> possibleAnalysisElem = viewsElem.getChildren().stream()
.filter(child -> child instanceof TmfAnalysisElement)
.map(elem -> (TmfAnalysisElement) elem)
.filter(analysisElem -> analysisElem.getAnalysisId().equals(MODULE_UI))
.findFirst();
assertTrue(possibleAnalysisElem.isPresent());
assertEquals("Test analysis in UI", possibleAnalysisElem.get().getName());
}
/**
* Test the instantiateAnalysis method
*/
@Test
public void testInstantiate() {
TmfTraceElement traceElement = getTraceElement();
TmfAnalysisElement analysis = traceElement.getAvailableAnalysis().stream()
.filter(availableAnalysis -> availableAnalysis.getAnalysisId().equals(MODULE_UI))
.findFirst().get();
/* Instantiate an analysis on a trace that is closed */
traceElement.closeEditors();
analysis.activateParentTrace();
try {
ProjectModelTestData.delayUntilTraceOpened(traceElement);
} catch (WaitTimeoutException e) {
fail("The analysis parent did not open in a reasonable time");
}
ITmfTrace trace = traceElement.getTrace();
assertNotNull(trace);
TestAnalysisUi module = (TestAnalysisUi) trace.getAnalysisModule(analysis.getAnalysisId());
assertNotNull(module);
traceElement.closeEditors();
}
}