blob: c6d5853fcc0bf065a2b65797e482999952dd7024 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2014 Ericsson
*
* 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:
* Mathieu Denis <mathieu.denis@polymtl.ca> - Initial design and implementation
* Bernd Hufmann - Fixed warnings
* Alexandre Montplaisir - Port to JUnit4
*******************************************************************************/
package org.eclipse.tracecompass.tmf.ui.tests.statistics;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.internal.tmf.ui.viewers.statistics.model.Messages;
import org.eclipse.tracecompass.internal.tmf.ui.viewers.statistics.model.TmfStatisticsTree;
import org.eclipse.tracecompass.internal.tmf.ui.viewers.statistics.model.TmfStatisticsTreeNode;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
import org.eclipse.tracecompass.tmf.core.event.TmfEvent;
import org.eclipse.tracecompass.tmf.core.event.TmfEventField;
import org.eclipse.tracecompass.tmf.core.event.TmfEventType;
import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
import org.junit.Test;
/**
* TmfBaseStatistics Test Cases.
*/
public class TmfBaseStatisticsDataTest {
// ------------------------------------------------------------------------
// Fields
// ------------------------------------------------------------------------
private static final String fTestName = "StatisticsDataTest";
private final @NonNull String fTypeId1 = "Some type1";
private final @NonNull String fTypeId2 = "Some type2";
private final String fLabel0 = "label1";
private final String fLabel1 = "label2";
private final String fLabel2 = "label3";
private final String[] fLabels = new String[] { fLabel0, fLabel1, fLabel2 };
private final ITmfTimestamp fTimestamp1 = TmfTimestamp.create(12345, (byte) 2);
private final ITmfTimestamp fTimestamp2 = TmfTimestamp.create(12350, (byte) 2);
private final ITmfTimestamp fTimestamp3 = TmfTimestamp.create(12355, (byte) 2);
private final TmfEventType fType1 = new TmfEventType(fTypeId1, TmfEventField.makeRoot(fLabels));
private final TmfEventType fType2 = new TmfEventType(fTypeId1, TmfEventField.makeRoot(fLabels));
private final TmfEventType fType3 = new TmfEventType(fTypeId2, TmfEventField.makeRoot(fLabels));
private final ITmfEvent fEvent1;
private final ITmfEvent fEvent2;
private final ITmfEvent fEvent3;
private final TmfEventField fContent1;
private final TmfEventField fContent2;
private final TmfEventField fContent3;
private final TmfStatisticsTree fStatsTree;
// ------------------------------------------------------------------------
// Housekeeping
// ------------------------------------------------------------------------
/**
* Constructor
*/
public TmfBaseStatisticsDataTest() {
fContent1 = new TmfEventField(ITmfEventField.ROOT_FIELD_ID, "Some content", null);
fEvent1 = new TmfEvent(null, ITmfContext.UNKNOWN_RANK, fTimestamp1, fType1, fContent1);
fContent2 = new TmfEventField(ITmfEventField.ROOT_FIELD_ID, "Some other content", null);
fEvent2 = new TmfEvent(null, ITmfContext.UNKNOWN_RANK, fTimestamp2, fType2, fContent2);
fContent3 = new TmfEventField(ITmfEventField.ROOT_FIELD_ID, "Some other different content", null);
fEvent3 = new TmfEvent(null, ITmfContext.UNKNOWN_RANK, fTimestamp3, fType3, fContent3);
fStatsTree = new TmfStatisticsTree();
fStatsTree.setTotal(fTestName, true, 3);
fStatsTree.setTypeCount(fTestName, fEvent1.getType().getName(), true, 1);
fStatsTree.setTypeCount(fTestName, fEvent2.getType().getName(), true, 1);
fStatsTree.setTypeCount(fTestName, fEvent3.getType().getName(), true, 1);
}
// ------------------------------------------------------------------------
// Test methods
// ------------------------------------------------------------------------
/**
* Test getting of children.
*/
@Test
public void testGetChildren() {
// Getting children of the ROOT
Collection<TmfStatisticsTreeNode> childrenTreeNode = fStatsTree.getRootNode().getChildren();
assertEquals("getChildren", 1, childrenTreeNode.size());
TmfStatisticsTreeNode treeNode = childrenTreeNode.iterator().next();
assertEquals("getChildren", fTestName, treeNode.getName());
// Getting children of the trace
childrenTreeNode = fStatsTree.getNode(fTestName).getChildren();
assertEquals("getChildren", 1, childrenTreeNode.size());
treeNode = childrenTreeNode.iterator().next();
assertEquals("getChildren", Messages.TmfStatisticsData_EventTypes, treeNode.getName());
Vector<String> keyExpected = new Vector<>();
keyExpected.add(fEvent1.getName());
keyExpected.add(fEvent3.getName());
// Getting children of a category
childrenTreeNode = treeNode.getChildren();
assertEquals("getChildren", 2, childrenTreeNode.size());
Iterator<TmfStatisticsTreeNode> iterChild = childrenTreeNode.iterator();
TmfStatisticsTreeNode temp;
while (iterChild.hasNext()) {
temp = iterChild.next();
assertEquals(0, temp.getChildren().size());
if (keyExpected.contains(temp.getName())) {
keyExpected.removeElement(temp.getName());
} else {
fail();
}
}
// Get children of a specific event type
childrenTreeNode = childrenTreeNode.iterator().next().getChildren();
assertEquals("getChildren", 0, childrenTreeNode.size());
}
/**
* Test registering of events.
*/
@Test
public void testRegisterEvent() {
TmfStatisticsTreeNode trace = fStatsTree.getNode(fTestName);
assertEquals("registerEvent", 3, trace.getValues().getTotal());
Collection<TmfStatisticsTreeNode> childrenTreeNode = fStatsTree.getNode(fTestName, Messages.TmfStatisticsData_EventTypes).getChildren();
for (TmfStatisticsTreeNode child : childrenTreeNode) {
if (child.getName().compareTo(fEvent1.getType().getName()) == 0) {
assertEquals("registerEvent", 1, child.getValues().getTotal());
} else if (child.getName().compareTo(fEvent3.getType().getName()) == 0) {
assertEquals("registerEvent", 1, child.getValues().getTotal());
}
}
}
/**
* Test getter.
*/
@Test
public void testGet() {
TmfStatisticsTreeNode traceRoot = fStatsTree.getNode(fTestName);
assertNotNull("get", traceRoot);
assertEquals("get", 0, traceRoot.getPath()[0].compareTo(fTestName));
assertEquals("get", 3, traceRoot.getValues().getTotal());
assertEquals("get", 1, traceRoot.getNbChildren());
}
/**
* Test getting or creating of node entries.
*/
@Test
public void testGetOrCreate() {
String[] newEventType = new String[] { fTestName, Messages.TmfStatisticsData_EventTypes, "Fancy Type" };
TmfStatisticsTreeNode newEventTypeNode;
// newEventType is not in the tree
newEventTypeNode = fStatsTree.getNode(newEventType);
assertNull(newEventTypeNode);
newEventTypeNode = fStatsTree.getOrCreateNode(newEventType);
assertNotNull(newEventTypeNode);
assertTrue(Arrays.equals(newEventType, newEventTypeNode.getPath()));
// newEventType is in the tree
newEventTypeNode.reset();
newEventTypeNode = fStatsTree.getNode(newEventType);
assertNotNull(newEventTypeNode);
newEventTypeNode = fStatsTree.getOrCreateNode(newEventType);
assertNotNull(newEventTypeNode);
assertTrue(Arrays.equals(newEventType, newEventTypeNode.getPath()));
}
/**
* Test getting of parent node.
*/
@Test
public void testGetParent() {
TmfStatisticsTreeNode parentNode = fStatsTree.getRootNode().getParent();
assertNull(parentNode);
parentNode = fStatsTree.getNode(fTestName).getParent();
assertNotNull(parentNode);
assertEquals(parentNode.getPath().toString(), fStatsTree.getRootNode().getPath().toString());
parentNode = fStatsTree.getNode(fTestName, Messages.TmfStatisticsData_EventTypes).getParent();
assertNotNull(parentNode);
assertEquals(parentNode.getPath().toString(), fStatsTree.getNode(fTestName).getPath().toString());
}
/**
* Test reset method
*/
@Test
public void testReset() {
fStatsTree.getNode(fTestName, Messages.TmfStatisticsData_EventTypes).reset();
assertEquals(0, fStatsTree.getNode(fTestName, Messages.TmfStatisticsData_EventTypes).getChildren().size());
assertNull(fStatsTree.getNode(fTestName, Messages.TmfStatisticsData_EventTypes, fType1.getName()));
assertNull(fStatsTree.getNode(fTestName, Messages.TmfStatisticsData_EventTypes, fType3.getName()));
fStatsTree.getNode(fTestName).reset();
assertEquals(0, fStatsTree.getNode(fTestName).getChildren().size());
}
}