blob: 29543ae6b9eb7df5b2dcc1ff9df10a63e1e1cc9f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 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 org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfExperimentStub;
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.TmfOpenTraceHelper;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
import org.eclipse.tracecompass.tmf.ui.tests.experiment.type.TmfEventsEditorStub;
import org.eclipse.tracecompass.tmf.ui.tests.shared.ProjectModelTestData;
import org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventsTable;
import org.eclipse.ui.IEditorPart;
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;
/**
* Some unit tests for trace types and experiment types
*
* @author Geneviève Bastien
*/
public class TraceAndExperimentTypeTest {
/** Test experiment type id */
public final static String TEST_EXPERIMENT_TYPE = "org.eclipse.linuxtools.tmf.core.tests.experimenttype";
private TmfProjectElement fixture;
private TmfExperimentElement fExperiment;
private final String EXPERIMENT_NAME = "exp_test";
/**
* Perform pre-test initialization.
*/
@Before
public void setUp() {
try {
fixture = ProjectModelTestData.getFilledProject();
fExperiment = ProjectModelTestData.addExperiment(fixture, EXPERIMENT_NAME);
assertNotNull(fExperiment);
} catch (CoreException e) {
fail(e.getMessage());
}
}
/**
* Cleans up the project after tests have been executed
*/
@After
public void cleanUp() {
ProjectModelTestData.deleteProject(fixture);
}
/**
* Test whether a newly created experiment has the default experiment type,
* even though none was specified
*/
@Test
public void testDefaultExperimentType() {
TmfExperimentElement experimentElement = ProjectModelTestData.addExperiment(fixture, "testDefaultExpType");
assertNotNull(experimentElement);
TmfExperiment experiment = experimentElement.instantiateTrace();
assertNotNull(experiment);
assertEquals(TmfTraceType.DEFAULT_EXPERIMENT_TYPE, experimentElement.getTraceType());
experiment.dispose();
}
/**
* Test that the experiment opened is of the right class
*/
@Test
public void testExperimentType() {
IResource resource = fExperiment.getResource();
try {
resource.setPersistentProperty(TmfCommonConstants.TRACETYPE, TEST_EXPERIMENT_TYPE);
fExperiment.refreshTraceType();
} catch (CoreException e) {
fail(e.getMessage());
}
TmfOpenTraceHelper.openFromElement(fExperiment);
ProjectModelTestData.delayUntilTraceOpened(fExperiment);
ITmfTrace trace = fExperiment.getTrace();
assertTrue(trace instanceof TmfExperimentStub);
fExperiment.closeEditors();
}
/**
* Test that event editor, event table and statistics viewer are the default
* ones for a generic experiment
*/
@Test
public void testNoExperimentTypeChildren() {
TmfOpenTraceHelper.openFromElement(fExperiment);
ProjectModelTestData.delayUntilTraceOpened(fExperiment);
final IWorkbench wb = PlatformUI.getWorkbench();
final IWorkbenchPage activePage = wb.getActiveWorkbenchWindow().getActivePage();
IEditorPart editor = activePage.getActiveEditor();
/* Test the editor class. Cannot test table class since it is unexposed */
assertNotNull(editor);
assertTrue(editor.getClass().equals(TmfEventsEditor.class));
fExperiment.closeEditors();
}
/**
* Test that event editor, event table and statistics viewer are built
* correctly when specified
*/
@Test
public void testExperimentTypeChildren() {
/* Set the trace type of the experiment */
IResource resource = fExperiment.getResource();
try {
resource.setPersistentProperty(TmfCommonConstants.TRACETYPE, TEST_EXPERIMENT_TYPE);
fExperiment.refreshTraceType();
} catch (CoreException e) {
fail(e.getMessage());
}
TmfOpenTraceHelper.openFromElement(fExperiment);
ProjectModelTestData.delayThread(500);
/* Test the editor class */
final IWorkbench wb = PlatformUI.getWorkbench();
final IWorkbenchPage activePage = wb.getActiveWorkbenchWindow().getActivePage();
IEditorPart editor = activePage.getActiveEditor();
assertNotNull(editor);
assertTrue(editor.getClass().equals(TmfEventsEditorStub.class));
/* Test the event table class */
TmfEventsEditorStub editorStub = (TmfEventsEditorStub) editor;
TmfEventsTable table = editorStub.getNewEventsTable();
assertNotNull(table);
assertTrue(table.getClass().equals(TmfEventsTable.class));
fExperiment.closeEditors();
}
/**
* Test that the analysis get populated under an experiment of the proper type
*/
@Test
public void testExperimentTypeAnalysis() {
/* Set the trace type of the experiment */
IResource resource = fExperiment.getResource();
try {
resource.setPersistentProperty(TmfCommonConstants.TRACETYPE, TEST_EXPERIMENT_TYPE);
fExperiment.refreshTraceType();
} catch (CoreException e) {
fail(e.getMessage());
}
/* Force the refresh of the experiment */
fExperiment.getParent().refresh();
assertFalse(fExperiment.getAvailableAnalysis().isEmpty());
}
}