/******************************************************************************* * Copyright (c) 2009 IBM Corporation. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.systemtap.graphing.core.tests.datasets.row; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IDataEntry; import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IDataSet; import org.eclipse.linuxtools.systemtap.graphing.core.datasets.row.FilteredRowDataSet; import org.eclipse.linuxtools.systemtap.graphing.core.datasets.row.RowDataSet; import org.eclipse.linuxtools.systemtap.graphing.core.datasets.row.RowEntry; import org.eclipse.linuxtools.systemtap.graphing.core.filters.IDataSetFilter; import org.eclipse.linuxtools.systemtap.graphing.core.filters.RangeFilter; import org.eclipse.linuxtools.systemtap.graphing.core.filters.SortFilter; import org.junit.Before; import org.junit.Test; public class FilteredRowDataSetTest { @Before public void setUp() { data = new RowDataSet(new String[] {"a", "b", "c"}); fdata = new FilteredRowDataSet(data); new FilteredRowDataSet(data.getTitles()); entry0 = new RowEntry(); entry0.putRow(0, new String[] {"1", "2", "3"}); data.setData(entry0); RowEntry entry = new RowEntry(); entry.putRow(0, new String[] {"4", "5", "6"}); data.setData(entry); } //Overwrite methods to insure data is removed from the original DataSet @Test public void testAppend() { assertEquals(2, data.getEntryCount()); RowEntry entry = new RowEntry(); entry.putRow(0, new String[] {"1", "2", "3"}); fdata.append(entry); assertEquals(3, data.getEntryCount()); } @Test public void testRemove() { assertFalse(fdata.remove(null)); assertFalse(fdata.remove(new RowEntry())); assertFalse(fdata.remove(-1)); assertFalse(fdata.remove(10)); assertEquals(2, fdata.getEntryCount()); IDataEntry entry = data.getEntry(0); assertTrue(fdata.remove(entry)); assertEquals(1, fdata.getEntryCount()); assertFalse(fdata.remove(entry)); assertTrue(fdata.remove(0)); } //End overwrite methods to insure data is removed from the original DataSet //Overwrite to ensure the data returned has all the filters applied @Test public void testGetColumn() { assertNull(fdata.getColumn(-3)); assertNull(fdata.getColumn(10)); assertNull(fdata.getColumn(-3, 0, 1)); assertNull(fdata.getColumn(10, 0, 1)); assertNull(fdata.getColumn(1, 3, 1)); assertNull(fdata.getColumn(1, -2, 1)); assertNull(fdata.getColumn(1, 0, 20)); Object[] col = fdata.getColumn(0); assertEquals(2, col.length); assertSame("1", col[0]); assertSame("4", col[1]); col = fdata.getColumn(IDataSet.COL_ROW_NUM); assertEquals(2, col.length); assertEquals("1", col[0].toString()); assertEquals("2", col[1].toString()); col = fdata.getColumn(1, 0, 1); assertEquals(1, col.length); assertSame("2", col[0]); } @Test public void testGetRow() { assertNull(fdata.getRow(-3)); assertNull(fdata.getRow(10)); Object[] row = fdata.getRow(1); assertEquals(3, row.length); assertSame("5", row[1]); } @Test public void testGetHistoricalData() { assertNull(fdata.getHistoricalData(null, -3)); assertNull(fdata.getHistoricalData(null, 10)); assertNull(fdata.getHistoricalData(null, -3, 0, 1)); assertNull(fdata.getHistoricalData(null, 10, 0, 1)); assertNull(fdata.getHistoricalData(null, 1, 3, 1)); assertNull(fdata.getHistoricalData(null, 1, -2, 1)); assertNull(fdata.getHistoricalData(null, 1, 0, 20)); Object[] col = fdata.getHistoricalData(null, 0); assertEquals(2, col.length); assertSame("1", col[0]); assertSame("4", col[1]); col = fdata.getHistoricalData(null, IDataSet.COL_ROW_NUM); assertEquals(2, col.length); assertEquals("1", col[0].toString()); assertEquals("2", col[1].toString()); col = fdata.getHistoricalData(null, 1, 0, 1); assertEquals(1, col.length); assertSame("2", col[0]); } @Test public void testGetEntryCount() { assertEquals(2, fdata.getEntryCount()); } @Test public void testGetEntry() { assertNull(fdata.getEntry(-1)); assertNull(fdata.getEntry(20)); assertEquals(entry0, data.getEntry(0)); } //End overwrite to ensure the data returned has all the filters applied //IFilteredDataSet Methods @Test public void testAddFilter() { data.remove(0); data.remove(0); RowEntry entry; entry = new RowEntry(); entry.putRow(0, new Integer[] {3, 2, 5}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {4, 2, 3}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {7, 2, 9}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {2, 2, 6}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {5, 2, 2}); data.append(entry); fdata.addFilter(new RangeFilter(0, 3, 5, RangeFilter.INCLUSIVE | RangeFilter.INSIDE_BOUNDS)); assertEquals(3, fdata.getRowCount()); Object[] row = fdata.getRow(1); assertEquals(4, ((Integer)row[0]).intValue()); assertEquals(3, ((Integer)row[2]).intValue()); row = fdata.getRow(2); assertEquals(5, ((Integer)row[0]).intValue()); assertEquals(2, ((Integer)row[1]).intValue()); fdata.addFilter(new SortFilter(2, SortFilter.ASCENDING)); assertEquals(3, fdata.getRowCount()); row = fdata.getRow(0); assertEquals(5, ((Integer)row[0]).intValue()); assertEquals(2, ((Integer)row[2]).intValue()); row = fdata.getRow(1); assertEquals(4, ((Integer)row[0]).intValue()); assertEquals(3, ((Integer)row[2]).intValue()); } @Test public void testRemoveFilter() { data.remove(0); data.remove(0); RowEntry entry; entry = new RowEntry(); entry.putRow(0, new Integer[] {3, 2, 5}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {4, 2, 3}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {7, 2, 9}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {2, 2, 6}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {5, 2, 2}); data.append(entry); RangeFilter filter = new RangeFilter(0, 3, 5, RangeFilter.INCLUSIVE | RangeFilter.INSIDE_BOUNDS); fdata.addFilter(filter); fdata.addFilter(new SortFilter(2, SortFilter.ASCENDING)); fdata.removeFilter(filter); assertEquals(5, fdata.getRowCount()); Object[] row = fdata.getRow(0); assertEquals(5, ((Integer)row[0]).intValue()); assertEquals(2, ((Integer)row[2]).intValue()); row = fdata.getRow(1); assertEquals(4, ((Integer)row[0]).intValue()); assertEquals(3, ((Integer)row[2]).intValue()); } @Test public void testClearFilters() { data.remove(0); data.remove(0); RowEntry entry; entry = new RowEntry(); entry.putRow(0, new Integer[] {3, 2, 5}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {4, 2, 3}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {7, 2, 9}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {2, 2, 6}); data.append(entry); entry = new RowEntry(); entry.putRow(0, new Integer[] {5, 2, 2}); data.append(entry); RangeFilter filter = new RangeFilter(0, 3, 5, RangeFilter.INCLUSIVE | RangeFilter.INSIDE_BOUNDS); fdata.addFilter(filter); fdata.addFilter(new SortFilter(2, SortFilter.ASCENDING)); fdata.clearFilters(); assertEquals(5, fdata.getRowCount()); Object[] row = fdata.getRow(0); assertEquals(3, ((Integer)row[0]).intValue()); assertEquals(5, ((Integer)row[2]).intValue()); row = fdata.getRow(1); assertEquals(4, ((Integer)row[0]).intValue()); assertEquals(3, ((Integer)row[2]).intValue()); } @Test public void testGetFilters() { assertEquals(0, fdata.getFilters().length); RangeFilter filter1 = new RangeFilter(0, 3, 5, RangeFilter.INCLUSIVE | RangeFilter.INSIDE_BOUNDS); SortFilter filter2 = new SortFilter(2, SortFilter.ASCENDING); fdata.addFilter(filter1); fdata.addFilter(filter2); IDataSetFilter[] filters = fdata.getFilters(); assertEquals(2, filters.length); } private RowDataSet data; private FilteredRowDataSet fdata; private RowEntry entry0; }