/*******************************************************************************
* Copyright (c) 2015 É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
*******************************************************************************/
package org.eclipse.tracecompass.analysis.graph.core.tests.graph;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.List;
import org.eclipse.tracecompass.analysis.graph.core.base.TmfGraph;
import org.eclipse.tracecompass.analysis.graph.core.base.TmfVertex;
import org.eclipse.tracecompass.analysis.graph.core.base.TmfVertex.EdgeDirection;
import org.eclipse.tracecompass.analysis.graph.core.building.TmfGraphBuilderModule;
import org.eclipse.tracecompass.analysis.graph.core.tests.Activator;
import org.eclipse.tracecompass.analysis.graph.core.tests.stubs.TestGraphWorker;
import org.eclipse.tracecompass.analysis.graph.core.tests.stubs.module.GraphBuilderModuleStub;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.xml.TmfXmlTraceStub;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.xml.TmfXmlTraceStubNs;
import org.junit.Test;
/**
* Test suite for the {@link TmfGraphBuilderModule} class
*
* @author Geneviève Bastien
* @author Francis Giraldeau
*/
public class TmfGraphBuilderModuleTest {
private static final String STUB_TRACE_FILE = "testfiles/stubtrace.xml";
/**
* With this trace, the resulting graph should look like this:
*
* <pre>
* 0 1 2 3 4 5 6 7 8 9 10 11 12 13
* Player 1 *--* *-----* *
* | | |
* Player 2 *--------* *------*
* </pre>
*
* @return
*/
private TmfGraphBuilderModule getModule(TmfTrace trace) {
trace.traceOpened(new TmfTraceOpenedSignal(this, trace, null));
GraphBuilderModuleStub module = null;
for (GraphBuilderModuleStub mod : TmfTraceUtils.getAnalysisModulesOfClass(trace, GraphBuilderModuleStub.class)) {
module = mod;
}
assertNotNull(module);
return module;
}
/**
* Test the graph builder execution
*/
@Test
public void testBuildGraph() {
TmfXmlTraceStub trace = TmfXmlTraceStubNs.setupTrace(Activator.getAbsoluteFilePath(STUB_TRACE_FILE));
TmfGraphBuilderModule module = getModule(trace);
module.schedule();
module.waitForCompletion();
TmfGraph graph = module.getGraph();
assertNotNull(graph);
assertEquals(2, graph.getWorkers().size());
assertEquals(9, graph.size());
List<TmfVertex> vertices = graph.getNodesOf(new TestGraphWorker(1));
assertEquals(5, vertices.size());
long timestamps1[] = { 1, 2, 5, 7, 12 };
boolean hasEdges1[][] = {
{ false, true, false, false },
{ true, false, false, true },
{ false, true, true, false },
{ true, false, false, false},
{ false, false, true, false} };
for (int i = 0; i < vertices.size(); i++) {
TmfVertex v = vertices.get(i);
assertEquals(timestamps1[i], v.getTs());
assertEquals(hasEdges1[i][0], v.getEdge(EdgeDirection.INCOMING_HORIZONTAL_EDGE) != null);
assertEquals(hasEdges1[i][1], v.getEdge(EdgeDirection.OUTGOING_HORIZONTAL_EDGE) != null);
assertEquals(hasEdges1[i][2], v.getEdge(EdgeDirection.INCOMING_VERTICAL_EDGE) != null);
assertEquals(hasEdges1[i][3], v.getEdge(EdgeDirection.OUTGOING_VERTICAL_EDGE) != null);
}
vertices = graph.getNodesOf(new TestGraphWorker(2));
assertEquals(4, vertices.size());
long timestamps2[] = { 2, 5, 10, 12 };
boolean hasEdges2[][] = {
{ false, true, true, false },
{ true, false, false, true },
{ false, true, false, false },
{ true, false, false, true} };
for (int i = 0; i < vertices.size(); i++) {
TmfVertex v = vertices.get(i);
assertEquals(timestamps2[i], v.getTs());
assertEquals(hasEdges2[i][0], v.getEdge(EdgeDirection.INCOMING_HORIZONTAL_EDGE) != null);
assertEquals(hasEdges2[i][1], v.getEdge(EdgeDirection.OUTGOING_HORIZONTAL_EDGE) != null);
assertEquals(hasEdges2[i][2], v.getEdge(EdgeDirection.INCOMING_VERTICAL_EDGE) != null);
assertEquals(hasEdges2[i][3], v.getEdge(EdgeDirection.OUTGOING_VERTICAL_EDGE) != null);
}
trace.dispose();
}
}