/******************************************************************************* * 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 v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Mathieu Denis <mathieu.denis@polymtl.ca> - Initial API and Implementation * Bernd Hufmann - Fixed header and 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 java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.tracecompass.internal.tmf.ui.viewers.statistics.model.Messages; import org.eclipse.tracecompass.internal.tmf.ui.viewers.statistics.model.TmfBaseColumnData; import org.eclipse.tracecompass.internal.tmf.ui.viewers.statistics.model.TmfBaseColumnData.ITmfColumnPercentageProvider; import org.eclipse.tracecompass.internal.tmf.ui.viewers.statistics.model.TmfBaseColumnDataProvider; 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; /** * TmfBaseColumnDataProvider test cases. * */ public class TmfBaseColumnDataProviderTest { // ------------------------------------------------------------------------ // Fields // ------------------------------------------------------------------------ private static final double DELTA = 1e-15; private final static String LEVEL_COLUMN = Messages.TmfStatisticsView_LevelColumn; private final static String EVENTS_COUNT_COLUMN = Messages.TmfStatisticsView_NbEventsColumn; private TmfBaseColumnDataProvider provider; private static final String fTestName = "ColumnDataProviderTest"; 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 fStatsData; // ------------------------------------------------------------------------ // Housekeeping // ------------------------------------------------------------------------ /** * Constructor */ public TmfBaseColumnDataProviderTest() { 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); fStatsData = new TmfStatisticsTree(); fStatsData.getOrCreateNode(fTestName, Messages.TmfStatisticsData_EventTypes); fStatsData.setTotal(fTestName, true, 3); fStatsData.setTypeCount(fTestName, fEvent1.getName(), true, 1); fStatsData.setTypeCount(fTestName, fEvent2.getName(), true, 1); fStatsData.setTypeCount(fTestName, fEvent3.getName(), true, 1); provider = new TmfBaseColumnDataProvider(); } // ------------------------------------------------------------------------ // Get Column Data // ------------------------------------------------------------------------ /** * Method with test cases. */ @Test public void testGetColumnData() { List<TmfBaseColumnData> columnsData = provider.getColumnData(); assertNotNull("getColumnData", columnsData); assertEquals("getColumnData", 4, columnsData.size()); TmfStatisticsTreeNode parentNode = fStatsData.getNode(fTestName); TmfStatisticsTreeNode treeNode1 = fStatsData.getNode(fTestName, Messages.TmfStatisticsData_EventTypes, fEvent1.getName()); TmfStatisticsTreeNode treeNode2 = fStatsData.getNode(fTestName, Messages.TmfStatisticsData_EventTypes, fEvent3.getName()); ViewerComparator vComp = null; for (TmfBaseColumnData columnData : columnsData) { assertNotNull("getColumnData", columnData); assertNotNull("getColumnData", columnData.getHeader()); assertNotNull("getColumnData", columnData.getTooltip()); // Testing labelProvider ColumnLabelProvider labelProvider = columnData.getLabelProvider(); if (columnData.getHeader().compareTo(LEVEL_COLUMN) == 0) { assertEquals("getColumnData", 0, labelProvider.getText(treeNode1).compareTo(treeNode1.getName())); } else if (columnData.getHeader().compareTo(EVENTS_COUNT_COLUMN) == 0) { // might not work because of machine local number format assertEquals("getColumnData", "1", labelProvider.getText(treeNode1)); } // Testing comparator vComp = columnData.getComparator(); if (columnData.getHeader().compareTo(LEVEL_COLUMN) == 0) { assertTrue("getColumnData", vComp.compare(null, treeNode1, treeNode2) < 0); assertTrue("getColumnData", vComp.compare(null, treeNode2, treeNode1) > 0); assertTrue("getColumnData", vComp.compare(null, treeNode1, treeNode1) == 0); } else if (columnData.getHeader().compareTo(EVENTS_COUNT_COLUMN) == 0) { assertTrue("getColumnData", vComp.compare(null, treeNode1, treeNode2) == 0); assertTrue("getColumnData", vComp.compare(null, treeNode2, treeNode1) == 0); assertTrue("getColumnData", vComp.compare(null, treeNode1, treeNode1) == 0); } // Testing percentage provider ITmfColumnPercentageProvider percentProvider = columnData.getPercentageProvider(); if (columnData.getHeader().compareTo(LEVEL_COLUMN) == 0) { assertNull("getColumnData", percentProvider); } else if (columnData.getHeader().compareTo(EVENTS_COUNT_COLUMN) == 0) { double percentage = (double) treeNode1.getValues().getTotal() / parentNode.getValues().getTotal(); assertEquals("getColumnData", percentage, percentProvider.getPercentage(treeNode1), DELTA); } } } }