/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, version 2 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.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 General Public License for more details.
*
*
* Copyright 2006 - 2016 Pentaho Corporation. All rights reserved.
*/
package org.pentaho.aggdes.ui;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.pentaho.aggdes.ui.model.AggListEvent;
import org.pentaho.aggdes.ui.model.AggListListener;
import org.pentaho.aggdes.ui.model.UIAggregate;
import org.pentaho.aggdes.ui.model.impl.AggListImpl;
import org.pentaho.aggdes.ui.model.impl.UIAggregateImpl;
import junit.framework.TestCase;
/**
* Unit test for AggListImpl
*
* @author Will Gorman (wgorman@pentaho.com)
*/
public class AggListImplTest extends TestCase {
static class TestAggListListener implements AggListListener {
boolean changed = false;
List<AggListEvent> events = new ArrayList<AggListEvent>();
public void listChanged(AggListEvent e) {
events.add(e);
changed = true;
}
};
public void test() {
assertTrue( AggListEvent.Type.values() != null );
assertTrue( AggListEvent.Type.valueOf( "AGG_ADDED" ).toString().equals( "AGG_ADDED" ) );
List<UIAggregate> newAggList = new ArrayList<UIAggregate>();
UIAggregateImpl agg1 = new UIAggregateImpl();
newAggList.add(agg1);
AggListImpl aggList1 = new AggListImpl(newAggList);
assertTrue(aggList1.getAgg(0) == agg1);
AggListImpl aggList = new AggListImpl();
TestAggListListener listener = new TestAggListListener();
aggList.addAggListListener(listener);
aggList.addAgg(agg1);
assertTrue(listener.changed);
assertEquals(listener.events.size(), 1);
assertEquals(listener.events.get(0).getType(), AggListEvent.Type.AGG_ADDED);
assertEquals(listener.events.get(0).getIndex(), 0);
listener.changed = false;
listener.events.clear();
aggList.setSelectedIndex(0);
assertTrue(listener.changed);
assertEquals(2, listener.events.size());
assertEquals(listener.events.get(0).getType(), AggListEvent.Type.SELECTION_CHANGING);
assertEquals(listener.events.get(0).getIndex(), -1);
assertEquals(listener.events.get(1).getType(), AggListEvent.Type.SELECTION_CHANGED);
assertEquals(listener.events.get(1).getIndex(), 0);
assertEquals(aggList.getSelectedIndex(), 0);
assertEquals(aggList.getSelectedValue(), agg1);
aggList.setSelectedIndex(-1);
assertNull(aggList.getSelectedValue());
// exception thrown?
aggList.setSelectedIndex(1);
listener.changed = false;
listener.events.clear();
try {
aggList.aggChanged(new UIAggregateImpl());
fail();
} catch (IllegalArgumentException e) {
// verified
}
aggList.aggChanged(agg1);
assertEquals(listener.events.size(), 1);
assertEquals(listener.events.get(0).getType(), AggListEvent.Type.AGG_CHANGED);
assertEquals(listener.events.get(0).getIndex(), 0);
Iterator<UIAggregate> iter = aggList.iterator();
assertNotNull(iter);
assertEquals(iter.next(), agg1);
assertEquals(aggList.getSize(), 1);
assertEquals(aggList.getAgg(0), agg1);
assertNull(aggList.getAgg(-1));
// no exception, just a log warning, verify size doesn't change
aggList.removeAgg(-1);
assertEquals(aggList.getSize(), 1);
aggList.removeAgg(1);
assertEquals(aggList.getSize(), 1);
aggList.setSelectedIndex(0);
listener.changed = false;
listener.events.clear();
// remove the actual aggregate
aggList.removeAgg(0);
assertEquals(3, listener.events.size());
assertEquals(listener.events.get(0).getType(), AggListEvent.Type.SELECTION_CHANGING);
assertEquals(listener.events.get(0).getIndex(), 0);
assertEquals(listener.events.get(1).getType(), AggListEvent.Type.SELECTION_CHANGED);
assertEquals(listener.events.get(1).getIndex(), -1);
assertEquals(listener.events.get(2).getType(), AggListEvent.Type.AGG_REMOVED);
assertEquals(listener.events.get(2).getIndex(), 0);
assertEquals(aggList.getSize(), 0);
assertEquals(aggList.getSelectedIndex(), -1);
// verify listener can be removed
listener.changed = false;
aggList.removeAggListListener(listener);
aggList.addAgg(agg1);
assertFalse(listener.changed);
}
public void testMoveAggUpAndDown() {
// TEST moveAggUp, moveAggDown
List<UIAggregate> newAggList = new ArrayList<UIAggregate>();
UIAggregateImpl agg1 = new UIAggregateImpl();
UIAggregateImpl agg2 = new UIAggregateImpl();
UIAggregateImpl agg3 = new UIAggregateImpl();
newAggList.add(agg1);
newAggList.add(agg2);
newAggList.add(agg3);
AggListImpl aggList1 = new AggListImpl(newAggList);
TestAggListListener listener = new TestAggListListener();
aggList1.addAggListListener(listener);
// nothing should happen, already on top
aggList1.moveAggUp(agg1);
assertEquals(aggList1.getSize(), 3);
assertEquals(aggList1.getAgg(0), agg1);
assertFalse(listener.changed);
// now try moving up
aggList1.moveAggUp(agg2);
assertEquals(aggList1.getSize(), 3);
assertEquals(aggList1.getAgg(0), agg2);
assertEquals(aggList1.getAgg(1), agg1);
assertTrue(listener.changed);
assertEquals(4, listener.events.size());
assertEquals(listener.events.get(0).getType(), AggListEvent.Type.AGG_CHANGED);
assertEquals(listener.events.get(1).getType(), AggListEvent.Type.AGG_CHANGED);
assertEquals(listener.events.get(2).getType(), AggListEvent.Type.SELECTION_CHANGING);
assertEquals(listener.events.get(3).getType(), AggListEvent.Type.SELECTION_CHANGED);
listener.changed = false;
listener.events.clear();
// nothing should happen, already on bottom
aggList1.moveAggDown(agg3);
assertEquals(aggList1.getSize(), 3);
assertEquals(aggList1.getAgg(2), agg3);
assertFalse(listener.changed);
// now try moving down
aggList1.moveAggDown(agg1);
assertEquals(aggList1.getSize(), 3);
assertEquals(aggList1.getAgg(1), agg3);
assertEquals(aggList1.getAgg(2), agg1);
assertTrue(listener.changed);
assertEquals(4, listener.events.size());
assertEquals(listener.events.get(0).getType(), AggListEvent.Type.AGG_CHANGED);
assertEquals(listener.events.get(1).getType(), AggListEvent.Type.AGG_CHANGED);
assertEquals(listener.events.get(2).getType(), AggListEvent.Type.SELECTION_CHANGING);
assertEquals(listener.events.get(3).getType(), AggListEvent.Type.SELECTION_CHANGED);
}
public void testCheckAllUnCheckAll() {
List<UIAggregate> newAggList = new ArrayList<UIAggregate>();
UIAggregateImpl agg1 = new UIAggregateImpl();
UIAggregateImpl agg2 = new UIAggregateImpl();
UIAggregateImpl agg3 = new UIAggregateImpl();
newAggList.add(agg1);
newAggList.add(agg2);
newAggList.add(agg3);
AggListImpl aggList1 = new AggListImpl(newAggList);
TestAggListListener listener = new TestAggListListener();
aggList1.addAggListListener(listener);
assertTrue(aggList1.getAgg(0).getEnabled());
assertTrue(aggList1.getAgg(1).getEnabled());
assertTrue(aggList1.getAgg(2).getEnabled());
aggList1.uncheckAll();
assertEquals(aggList1.getSize(), 3);
assertFalse(aggList1.getAgg(0).getEnabled());
assertFalse(aggList1.getAgg(1).getEnabled());
assertFalse(aggList1.getAgg(2).getEnabled());
assertTrue(listener.changed);
assertEquals(listener.events.size(), 3);
listener.changed = false;
listener.events.clear();
aggList1.checkAll();
assertEquals(aggList1.getSize(), 3);
assertTrue(aggList1.getAgg(0).getEnabled());
assertTrue(aggList1.getAgg(1).getEnabled());
assertTrue(aggList1.getAgg(2).getEnabled());
assertTrue(listener.changed);
assertEquals(listener.events.size(), 3);
}
}