/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.reporting.designer.core.util; import junit.framework.TestCase; import org.pentaho.reporting.designer.core.util.table.GroupedTableModel; import org.pentaho.reporting.designer.core.util.table.GroupingHeader; import org.pentaho.reporting.designer.core.util.table.GroupingModel; import javax.swing.table.AbstractTableModel; import java.util.ArrayList; /** * Todo: Document Me * * @author Thomas Morgner * @noinspection HardCodedStringLiteral */ public class GroupedTableModelTest extends TestCase { private static class GroupModel extends AbstractTableModel implements GroupingModel { private ArrayList headers; private ArrayList data; private GroupModel() { headers = new ArrayList(); data = new ArrayList(); } public void add( final GroupingHeader header, final Object data ) { headers.add( header ); this.data.add( data ); } public int getRowCount() { return data.size(); } public int getColumnCount() { return 2; } public Object getValueAt( final int rowIndex, final int columnIndex ) { if ( columnIndex == 0 ) { return headers.get( rowIndex ); } return data.get( rowIndex ); } public GroupingHeader getGroupHeader( final int index ) { return (GroupingHeader) headers.get( index ); } public boolean isHeaderRow( final int index ) { return data.get( index ) == null; } } protected static class TestGroupedTableModel extends GroupedTableModel { protected TestGroupedTableModel( final GroupingModel parent ) { super( parent ); } @Override public int mapFromModel( final int row ) { return super.mapFromModel( row ); } @Override public int mapToModel( final int row ) { return super.mapToModel( row ); } } public GroupedTableModelTest() { } public GroupedTableModelTest( final String s ) { super( s ); } @Override protected void setUp() throws Exception { super.setUp(); } public void testEmptyMapping() { final GroupModel model = new GroupModel(); final TestGroupedTableModel groupedTableModel = new TestGroupedTableModel( model ); assertEquals( groupedTableModel.getRowCount(), model.getRowCount() ); } public void testSimpleMapping() { final GroupModel model = new GroupModel(); final GroupingHeader header1 = new GroupingHeader( "1" ); final GroupingHeader header2 = new GroupingHeader( "2" ); final GroupingHeader header3 = new GroupingHeader( "3" ); final GroupingHeader header4 = new GroupingHeader( "4" ); model.add( header1, null ); model.add( header2, null ); model.add( header2, "2a" ); model.add( header2, "2b" ); model.add( header2, "2c" ); model.add( header3, null ); model.add( header3, "3a" ); model.add( header3, "3b" ); model.add( header4, null ); final TestGroupedTableModel groupedTableModel = new TestGroupedTableModel( model ); assertEquals( groupedTableModel.getRowCount(), model.getRowCount() ); for ( int row = 0; row < model.getRowCount(); row++ ) { assertEquals( groupedTableModel.getValueAt( row, 0 ), model.getValueAt( row, 0 ) ); assertEquals( groupedTableModel.getValueAt( row, 1 ), model.getValueAt( row, 1 ) ); assertEquals( groupedTableModel.mapFromModel( row ), row ); } } public void testInnerCollapseMapping() { final GroupModel model = new GroupModel(); final GroupingHeader header1 = new GroupingHeader( "1" ); final GroupingHeader header2 = new GroupingHeader( "2" ); header2.setCollapsed( true ); final GroupingHeader header3 = new GroupingHeader( "3" ); final GroupingHeader header4 = new GroupingHeader( "4" ); model.add( header1, null ); model.add( header1, "1a" ); model.add( header2, null ); model.add( header2, "2a" ); model.add( header2, "2b" ); model.add( header2, "2c" ); model.add( header3, null ); model.add( header3, "3a" ); model.add( header3, "3b" ); model.add( header4, null ); model.add( header4, "4a" ); final TestGroupedTableModel groupedTableModel = new TestGroupedTableModel( model ); assertEquals( "Row-Count", 8, groupedTableModel.getRowCount() ); assertEquals( "Header1", header1, groupedTableModel.getValueAt( 0, 0 ) ); assertEquals( "Header1", header1, groupedTableModel.getValueAt( 1, 0 ) ); assertEquals( "Header2", header2, groupedTableModel.getValueAt( 2, 0 ) ); assertEquals( "Header3", header3, groupedTableModel.getValueAt( 3, 0 ) ); assertEquals( "Header3", header3, groupedTableModel.getValueAt( 4, 0 ) ); assertEquals( "Header3", header3, groupedTableModel.getValueAt( 5, 0 ) ); assertEquals( "Header4", header4, groupedTableModel.getValueAt( 6, 0 ) ); assertEquals( "Header4", header4, groupedTableModel.getValueAt( 7, 0 ) ); assertEquals( "Back-Mapping", 0, groupedTableModel.mapFromModel( 0 ) ); assertEquals( "Back-Mapping", 1, groupedTableModel.mapFromModel( 1 ) ); assertEquals( "Back-Mapping", 2, groupedTableModel.mapFromModel( 2 ) ); assertEquals( "Back-Mapping", 2, groupedTableModel.mapFromModel( 3 ) ); assertEquals( "Back-Mapping", 2, groupedTableModel.mapFromModel( 4 ) ); assertEquals( "Back-Mapping", 2, groupedTableModel.mapFromModel( 5 ) ); assertEquals( "Back-Mapping", 3, groupedTableModel.mapFromModel( 6 ) ); assertEquals( "Back-Mapping", 4, groupedTableModel.mapFromModel( 7 ) ); assertEquals( "Back-Mapping", 5, groupedTableModel.mapFromModel( 8 ) ); assertEquals( "Back-Mapping", 6, groupedTableModel.mapFromModel( 9 ) ); assertEquals( "Back-Mapping", 7, groupedTableModel.mapFromModel( 10 ) ); } public void testFirstCollapseMapping() { final GroupModel model = new GroupModel(); final GroupingHeader header1 = new GroupingHeader( "1" ); header1.setCollapsed( true ); final GroupingHeader header2 = new GroupingHeader( "2" ); final GroupingHeader header3 = new GroupingHeader( "3" ); final GroupingHeader header4 = new GroupingHeader( "4" ); model.add( header1, null ); model.add( header1, "1a" ); model.add( header2, null ); model.add( header2, "2a" ); model.add( header2, "2b" ); model.add( header2, "2c" ); model.add( header3, null ); model.add( header3, "3a" ); model.add( header3, "3b" ); model.add( header4, null ); model.add( header4, "4a" ); final TestGroupedTableModel groupedTableModel = new TestGroupedTableModel( model ); assertEquals( "Row-Count", 10, groupedTableModel.getRowCount() ); assertEquals( "Header1", header1, groupedTableModel.getValueAt( 0, 0 ) ); assertEquals( "Header2", header2, groupedTableModel.getValueAt( 1, 0 ) ); assertEquals( "Header2", header2, groupedTableModel.getValueAt( 2, 0 ) ); assertEquals( "Header2", header2, groupedTableModel.getValueAt( 3, 0 ) ); assertEquals( "Header2", header2, groupedTableModel.getValueAt( 4, 0 ) ); assertEquals( "Header3", header3, groupedTableModel.getValueAt( 5, 0 ) ); assertEquals( "Header3", header3, groupedTableModel.getValueAt( 6, 0 ) ); assertEquals( "Header3", header3, groupedTableModel.getValueAt( 7, 0 ) ); assertEquals( "Header4", header4, groupedTableModel.getValueAt( 8, 0 ) ); assertEquals( "Header4", header4, groupedTableModel.getValueAt( 9, 0 ) ); assertEquals( "Back-Mapping", 0, groupedTableModel.mapFromModel( 0 ) ); assertEquals( "Back-Mapping", 0, groupedTableModel.mapFromModel( 1 ) ); assertEquals( "Back-Mapping", 1, groupedTableModel.mapFromModel( 2 ) ); assertEquals( "Back-Mapping", 2, groupedTableModel.mapFromModel( 3 ) ); assertEquals( "Back-Mapping", 3, groupedTableModel.mapFromModel( 4 ) ); assertEquals( "Back-Mapping", 4, groupedTableModel.mapFromModel( 5 ) ); assertEquals( "Back-Mapping", 5, groupedTableModel.mapFromModel( 6 ) ); assertEquals( "Back-Mapping", 6, groupedTableModel.mapFromModel( 7 ) ); assertEquals( "Back-Mapping", 7, groupedTableModel.mapFromModel( 8 ) ); assertEquals( "Back-Mapping", 8, groupedTableModel.mapFromModel( 9 ) ); assertEquals( "Back-Mapping", 9, groupedTableModel.mapFromModel( 10 ) ); } public void testLastCollapseMapping() { final GroupModel model = new GroupModel(); final GroupingHeader header1 = new GroupingHeader( "1" ); final GroupingHeader header2 = new GroupingHeader( "2" ); final GroupingHeader header3 = new GroupingHeader( "3" ); final GroupingHeader header4 = new GroupingHeader( "4" ); header4.setCollapsed( true ); model.add( header1, null ); model.add( header1, "1a" ); model.add( header2, null ); model.add( header2, "2a" ); model.add( header2, "2b" ); model.add( header2, "2c" ); model.add( header3, null ); model.add( header3, "3a" ); model.add( header3, "3b" ); model.add( header4, null ); model.add( header4, "4a" ); model.add( header4, "4b" ); final TestGroupedTableModel groupedTableModel = new TestGroupedTableModel( model ); assertEquals( "Row-Count", 10, groupedTableModel.getRowCount() ); assertEquals( "Header1", header1, groupedTableModel.getValueAt( 0, 0 ) ); assertEquals( "Header1", header1, groupedTableModel.getValueAt( 1, 0 ) ); assertEquals( "Header2", header2, groupedTableModel.getValueAt( 2, 0 ) ); assertEquals( "Header2", header2, groupedTableModel.getValueAt( 3, 0 ) ); assertEquals( "Header2", header2, groupedTableModel.getValueAt( 4, 0 ) ); assertEquals( "Header2", header2, groupedTableModel.getValueAt( 5, 0 ) ); assertEquals( "Header3", header3, groupedTableModel.getValueAt( 6, 0 ) ); assertEquals( "Header3", header3, groupedTableModel.getValueAt( 7, 0 ) ); assertEquals( "Header3", header3, groupedTableModel.getValueAt( 8, 0 ) ); assertEquals( "Header4", header4, groupedTableModel.getValueAt( 9, 0 ) ); assertEquals( "Back-Mapping", 0, groupedTableModel.mapFromModel( 0 ) ); assertEquals( "Back-Mapping", 1, groupedTableModel.mapFromModel( 1 ) ); assertEquals( "Back-Mapping", 2, groupedTableModel.mapFromModel( 2 ) ); assertEquals( "Back-Mapping", 3, groupedTableModel.mapFromModel( 3 ) ); assertEquals( "Back-Mapping", 4, groupedTableModel.mapFromModel( 4 ) ); assertEquals( "Back-Mapping", 5, groupedTableModel.mapFromModel( 5 ) ); assertEquals( "Back-Mapping", 6, groupedTableModel.mapFromModel( 6 ) ); assertEquals( "Back-Mapping", 7, groupedTableModel.mapFromModel( 7 ) ); assertEquals( "Back-Mapping", 8, groupedTableModel.mapFromModel( 8 ) ); assertEquals( "Back-Mapping", 9, groupedTableModel.mapFromModel( 9 ) ); assertEquals( "Back-Mapping", 9, groupedTableModel.mapFromModel( 10 ) ); assertEquals( "Back-Mapping", 9, groupedTableModel.mapFromModel( 11 ) ); } public void testAllCollapseMapping() { final GroupModel model = new GroupModel(); final GroupingHeader header1 = new GroupingHeader( "1" ); header1.setCollapsed( true ); final GroupingHeader header2 = new GroupingHeader( "2" ); header2.setCollapsed( true ); final GroupingHeader header3 = new GroupingHeader( "3" ); header3.setCollapsed( true ); final GroupingHeader header4 = new GroupingHeader( "4" ); header4.setCollapsed( true ); model.add( header1, null ); model.add( header1, "1a" ); model.add( header2, null ); model.add( header2, "2a" ); model.add( header2, "2b" ); model.add( header2, "2c" ); model.add( header3, null ); model.add( header3, "3a" ); model.add( header3, "3b" ); model.add( header4, null ); model.add( header4, "4a" ); final TestGroupedTableModel groupedTableModel = new TestGroupedTableModel( model ); assertEquals( "Row-Count", 4, groupedTableModel.getRowCount() ); assertEquals( "Header1", header1, groupedTableModel.getValueAt( 0, 0 ) ); assertEquals( "Header2", header2, groupedTableModel.getValueAt( 1, 0 ) ); assertEquals( "Header3", header3, groupedTableModel.getValueAt( 2, 0 ) ); assertEquals( "Header4", header4, groupedTableModel.getValueAt( 3, 0 ) ); assertEquals( "Back-Mapping", 0, groupedTableModel.mapFromModel( 0 ) ); assertEquals( "Back-Mapping", 0, groupedTableModel.mapFromModel( 1 ) ); assertEquals( "Back-Mapping", 1, groupedTableModel.mapFromModel( 2 ) ); assertEquals( "Back-Mapping", 1, groupedTableModel.mapFromModel( 3 ) ); assertEquals( "Back-Mapping", 1, groupedTableModel.mapFromModel( 4 ) ); assertEquals( "Back-Mapping", 1, groupedTableModel.mapFromModel( 5 ) ); assertEquals( "Back-Mapping", 2, groupedTableModel.mapFromModel( 6 ) ); assertEquals( "Back-Mapping", 2, groupedTableModel.mapFromModel( 7 ) ); assertEquals( "Back-Mapping", 2, groupedTableModel.mapFromModel( 8 ) ); assertEquals( "Back-Mapping", 3, groupedTableModel.mapFromModel( 9 ) ); assertEquals( "Back-Mapping", 3, groupedTableModel.mapFromModel( 10 ) ); } }