/******************************************************************************* * Copyright (c) 2013, 2014 É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 v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * 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.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(); /* To get the list of outputs the trace needs to be opened */ analysis.activateParentTrace(); try { ProjectModelTestData.delayUntilTraceOpened(analysis.getParent()); } 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); } /** * Test the outputAnalysis method for a view */ @Test public void testOpenView() { TmfAnalysisElement analysis = getTestAnalysisUi(); analysis.activateParentTrace(); try { ProjectModelTestData.delayUntilTraceOpened(analysis.getParent()); } 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(); ProjectModelTestData.delayThread(1000); view = activePage.findView(TestAnalysisUi.VIEW_ID); assertNotNull(view); } 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; } } }