diff options
author | Dirk Fauth | 2017-01-14 21:05:36 +0000 |
---|---|---|
committer | Dirk Fauth | 2017-01-14 21:05:36 +0000 |
commit | bf050520a1d7ede42b7489f1796cdfc17f8c4ecc (patch) | |
tree | 6034b6be73955cef43413c5cb30f50e6b3884d3b | |
parent | 6e3d64004d3b42157b4d1701a48f62a8ab003cb3 (diff) | |
download | org.eclipse.nebula.widgets.nattable-bf050520a1d7ede42b7489f1796cdfc17f8c4ecc.tar.gz org.eclipse.nebula.widgets.nattable-bf050520a1d7ede42b7489f1796cdfc17f8c4ecc.tar.xz org.eclipse.nebula.widgets.nattable-bf050520a1d7ede42b7489f1796cdfc17f8c4ecc.zip |
Bug 510473 - Add test cases for default IFilterStrategy implementations
Change-Id: If2eb3345f931f11e956cdd4e27beac25a297b5d3
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
3 files changed, 555 insertions, 0 deletions
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxGlazedListsFilterStrategyTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxGlazedListsFilterStrategyTest.java new file mode 100644 index 00000000..7764c178 --- /dev/null +++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxGlazedListsFilterStrategyTest.java @@ -0,0 +1,221 @@ +/******************************************************************************* + * Copyright (c) 2017 Dirk Fauth. + * 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: + * Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation + ******************************************************************************/ +package org.eclipse.nebula.widgets.nattable.extension.glazedlists.filterrow; + +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; + +import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry; +import org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration; +import org.eclipse.nebula.widgets.nattable.data.IColumnAccessor; +import org.eclipse.nebula.widgets.nattable.data.ListDataProvider; +import org.eclipse.nebula.widgets.nattable.data.ReflectiveColumnPropertyAccessor; +import org.eclipse.nebula.widgets.nattable.dataset.person.Person; +import org.eclipse.nebula.widgets.nattable.dataset.person.PersonService; +import org.eclipse.nebula.widgets.nattable.edit.EditConstants; +import org.eclipse.nebula.widgets.nattable.extension.glazedlists.fixture.DataLayerFixture; +import org.eclipse.nebula.widgets.nattable.filterrow.FilterRowDataProvider; +import org.eclipse.nebula.widgets.nattable.filterrow.combobox.ComboBoxFilterRowConfiguration; +import org.eclipse.nebula.widgets.nattable.filterrow.combobox.FilterRowComboBoxDataProvider; +import org.eclipse.nebula.widgets.nattable.filterrow.config.DefaultFilterRowConfiguration; +import org.eclipse.nebula.widgets.nattable.layer.DataLayer; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import ca.odell.glazedlists.EventList; +import ca.odell.glazedlists.FilterList; +import ca.odell.glazedlists.GlazedLists; +import ca.odell.glazedlists.matchers.Matcher; + +public class ComboBoxGlazedListsFilterStrategyTest { + + private static FilterList<Person> filterList; + + private static ConfigRegistry configRegistry; + private static DataLayerFixture columnHeaderLayer; + private static FilterRowComboBoxDataProvider<Person> comboBoxDataProvider; + private static ComboBoxGlazedListsFilterStrategy<Person> filterStrategy; + private static FilterRowDataProvider<Person> dataProvider; + + private static String[] personPropertyNames = { + "firstName", + "lastName", + "gender", + "married", + "birthday" }; + + private static Matcher<Person> homerFilter = new Matcher<Person>() { + + @Override + public boolean matches(Person item) { + return !"Homer".equals(item.getFirstName()); + } + }; + + @BeforeClass + public static void init() { + // initialize the collection with a big amount of values + EventList<Person> baseCollection = GlazedLists.eventList(PersonService.getFixedPersons()); + for (int i = 1; i < 1000; i++) { + baseCollection.addAll(PersonService.getFixedPersons()); + } + filterList = new FilterList<>(GlazedLists.eventList(baseCollection)); + + configRegistry = new ConfigRegistry(); + + new DefaultNatTableStyleConfiguration().configureRegistry(configRegistry); + new DefaultFilterRowConfiguration().configureRegistry(configRegistry); + new ComboBoxFilterRowConfiguration().configureRegistry(configRegistry); + + columnHeaderLayer = new DataLayerFixture(5, 2, 100, 50); + + IColumnAccessor<Person> bodyDataColumnAccessor = new ReflectiveColumnPropertyAccessor<>(personPropertyNames); + comboBoxDataProvider = new GlazedListsFilterRowComboBoxDataProvider<>( + new DataLayer(new ListDataProvider<>(filterList, bodyDataColumnAccessor)), + baseCollection, + bodyDataColumnAccessor); + + filterStrategy = new ComboBoxGlazedListsFilterStrategy<>( + comboBoxDataProvider, + filterList, + bodyDataColumnAccessor, + configRegistry); + dataProvider = new FilterRowDataProvider<>( + filterStrategy, + columnHeaderLayer, + columnHeaderLayer.getDataProvider(), configRegistry); + } + + @Before + public void setup() { + for (int i = 0; i < dataProvider.getColumnCount(); i++) { + dataProvider.getFilterIndexToObjectMap().put(i, EditConstants.SELECT_ALL_ITEMS_VALUE); + } + filterStrategy.applyFilter(dataProvider.getFilterIndexToObjectMap()); + } + + @Test + public void shouldFilterForSimpsons() { + assertEquals(18000, filterList.size()); + + dataProvider.setDataValue(1, 1, Arrays.asList("Simpson")); + + assertEquals(10000, filterList.size()); + } + + @Test + public void shouldFilterForMultipleCriteria() { + assertEquals(18000, filterList.size()); + + dataProvider.setDataValue(0, 1, Arrays.asList("Homer", "Marge", "Maude")); + + assertEquals(7000, filterList.size()); + + dataProvider.setDataValue(1, 1, Arrays.asList("Flanders")); + + assertEquals(2000, filterList.size()); + } + + @Test + public void shouldResetFilterinSameOrder() { + dataProvider.setDataValue(0, 1, Arrays.asList("Homer", "Marge", "Maude")); + dataProvider.setDataValue(1, 1, Arrays.asList("Flanders")); + assertEquals(2000, filterList.size()); + + // this will imply to select all values + dataProvider.setDataValue(1, 1, comboBoxDataProvider.getValues(1, 0)); + assertEquals(7000, filterList.size()); + + // setting null should be the same as selecting all + dataProvider.setDataValue(0, 1, null); + assertEquals(18000, filterList.size()); + } + + @Test + public void shouldResetFilterinDifferentOrder() { + dataProvider.setDataValue(0, 1, Arrays.asList("Homer", "Marge", "Maude")); + dataProvider.setDataValue(1, 1, Arrays.asList("Flanders")); + assertEquals(2000, filterList.size()); + + dataProvider.setDataValue(0, 1, comboBoxDataProvider.getValues(0, 0)); + assertEquals(8000, filterList.size()); + + dataProvider.setDataValue(1, 1, comboBoxDataProvider.getValues(1, 0)); + assertEquals(18000, filterList.size()); + } + + // with static filter + + @Test + public void shouldFilterForSimpsonsWithStaticHomerFilter() { + filterStrategy.addStaticFilter(homerFilter); + assertEquals(15000, filterList.size()); + + dataProvider.setDataValue(1, 1, Arrays.asList("Simpson")); + assertEquals(7000, filterList.size()); + + filterStrategy.removeStaticFilter(homerFilter); + assertEquals(10000, filterList.size()); + } + + @Test + public void shouldFilterForMultipleCriteriaWithStaticHomerFilter() { + filterStrategy.addStaticFilter(homerFilter); + assertEquals(15000, filterList.size()); + + dataProvider.setDataValue(0, 1, Arrays.asList("Homer", "Marge", "Maude")); + assertEquals(4000, filterList.size()); + + dataProvider.setDataValue(1, 1, Arrays.asList("Simpson")); + assertEquals(2000, filterList.size()); + + filterStrategy.removeStaticFilter(homerFilter); + assertEquals(5000, filterList.size()); + } + + @Test + public void shouldResetFilterinSameOrderWithStaticHomerFilter() { + filterStrategy.addStaticFilter(homerFilter); + + dataProvider.setDataValue(0, 1, Arrays.asList("Homer", "Marge", "Maude")); + dataProvider.setDataValue(1, 1, Arrays.asList("Simpson")); + assertEquals(2000, filterList.size()); + + dataProvider.setDataValue(1, 1, comboBoxDataProvider.getValues(1, 0)); + assertEquals(4000, filterList.size()); + + dataProvider.setDataValue(0, 1, comboBoxDataProvider.getValues(0, 0)); + assertEquals(15000, filterList.size()); + + filterStrategy.removeStaticFilter(homerFilter); + assertEquals(18000, filterList.size()); + } + + @Test + public void shouldResetFilterinDifferentOrderWithStaticHomerFilter() { + filterStrategy.addStaticFilter(homerFilter); + + dataProvider.setDataValue(0, 1, Arrays.asList("Homer", "Marge", "Maude")); + dataProvider.setDataValue(1, 1, Arrays.asList("Simpson")); + assertEquals(2000, filterList.size()); + + dataProvider.setDataValue(0, 1, comboBoxDataProvider.getValues(0, 0)); + assertEquals(7000, filterList.size()); + + dataProvider.setDataValue(1, 1, comboBoxDataProvider.getValues(1, 0)); + assertEquals(15000, filterList.size()); + + filterStrategy.removeStaticFilter(homerFilter); + assertEquals(18000, filterList.size()); + } +} diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/DefaultGlazedListsFilterStrategyTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/DefaultGlazedListsFilterStrategyTest.java new file mode 100644 index 00000000..40efb225 --- /dev/null +++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/DefaultGlazedListsFilterStrategyTest.java @@ -0,0 +1,126 @@ +/******************************************************************************* + * Copyright (c) 2017 Dirk Fauth. + * 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: + * Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation + ******************************************************************************/ +package org.eclipse.nebula.widgets.nattable.extension.glazedlists.filterrow; + +import static org.junit.Assert.assertEquals; + +import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry; +import org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration; +import org.eclipse.nebula.widgets.nattable.data.ReflectiveColumnPropertyAccessor; +import org.eclipse.nebula.widgets.nattable.dataset.person.Person; +import org.eclipse.nebula.widgets.nattable.dataset.person.PersonService; +import org.eclipse.nebula.widgets.nattable.extension.glazedlists.fixture.DataLayerFixture; +import org.eclipse.nebula.widgets.nattable.filterrow.FilterRowDataProvider; +import org.eclipse.nebula.widgets.nattable.filterrow.config.DefaultFilterRowConfiguration; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import ca.odell.glazedlists.FilterList; +import ca.odell.glazedlists.GlazedLists; + +public class DefaultGlazedListsFilterStrategyTest { + + private static FilterList<Person> filterList; + + private static ConfigRegistry configRegistry; + private static DataLayerFixture columnHeaderLayer; + private static FilterRowDataProvider<Person> dataProvider; + + private static String[] personPropertyNames = { + "firstName", + "lastName", + "gender", + "married", + "birthday" }; + + @BeforeClass + public static void init() { + // initialize the collection with a big amount of values + filterList = new FilterList<>(GlazedLists.eventList(PersonService.getFixedPersons())); + for (int i = 1; i < 1000; i++) { + filterList.addAll(PersonService.getFixedPersons()); + } + configRegistry = new ConfigRegistry(); + + new DefaultNatTableStyleConfiguration().configureRegistry(configRegistry); + new DefaultFilterRowConfiguration().configureRegistry(configRegistry); + + columnHeaderLayer = new DataLayerFixture(5, 2, 100, 50); + dataProvider = new FilterRowDataProvider<>( + new DefaultGlazedListsFilterStrategy<>( + filterList, + new ReflectiveColumnPropertyAccessor<Person>(personPropertyNames), + configRegistry), + columnHeaderLayer, + columnHeaderLayer.getDataProvider(), configRegistry); + } + + @Before + public void setup() { + // ensure to start over with a clear filter + dataProvider.clearAllFilters(); + } + + @Test + public void shouldFilterForSimpsons() { + assertEquals(18000, filterList.size()); + + dataProvider.setDataValue(1, 1, "Simpson"); + + assertEquals(10000, filterList.size()); + } + + @Test + public void shouldFilterForMultipleCriteria() { + assertEquals(18000, filterList.size()); + + // filter: contains m + // per fixed we have 3 Homer, 2 Marge, 2 Maude + dataProvider.setDataValue(0, 1, "m"); + + assertEquals(7000, filterList.size()); + + dataProvider.setDataValue(1, 1, "Flanders"); + + assertEquals(2000, filterList.size()); + } + + @Test + public void shouldResetFilterinSameOrder() { + // filter: contains m + // per fixed we have 3 Homer, 2 Marge, 2 Maude + dataProvider.setDataValue(0, 1, "m"); + dataProvider.setDataValue(1, 1, "Flanders"); + assertEquals(2000, filterList.size()); + + dataProvider.setDataValue(1, 1, null); + assertEquals(7000, filterList.size()); + + dataProvider.setDataValue(0, 1, null); + assertEquals(18000, filterList.size()); + } + + @Test + public void shouldResetFilterinDifferentOrder() { + // filter: contains m + // per fixed we have 3 Homer, 2 Marge, 2 Maude + dataProvider.setDataValue(0, 1, "m"); + dataProvider.setDataValue(1, 1, "Flanders"); + assertEquals(2000, filterList.size()); + + dataProvider.setDataValue(0, 1, null); + assertEquals(8000, filterList.size()); + + dataProvider.setDataValue(1, 1, null); + assertEquals(18000, filterList.size()); + } +} diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/DefaultGlazedListsStaticFilterStrategyTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/DefaultGlazedListsStaticFilterStrategyTest.java new file mode 100644 index 00000000..9bb92b49 --- /dev/null +++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/DefaultGlazedListsStaticFilterStrategyTest.java @@ -0,0 +1,208 @@ +/******************************************************************************* + * Copyright (c) 2017 Dirk Fauth. + * 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: + * Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation + ******************************************************************************/ +package org.eclipse.nebula.widgets.nattable.extension.glazedlists.filterrow; + +import static org.junit.Assert.assertEquals; + +import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry; +import org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration; +import org.eclipse.nebula.widgets.nattable.data.ReflectiveColumnPropertyAccessor; +import org.eclipse.nebula.widgets.nattable.dataset.person.Person; +import org.eclipse.nebula.widgets.nattable.dataset.person.PersonService; +import org.eclipse.nebula.widgets.nattable.extension.glazedlists.fixture.DataLayerFixture; +import org.eclipse.nebula.widgets.nattable.filterrow.FilterRowDataProvider; +import org.eclipse.nebula.widgets.nattable.filterrow.config.DefaultFilterRowConfiguration; +import org.junit.After; +import org.junit.BeforeClass; +import org.junit.Test; + +import ca.odell.glazedlists.FilterList; +import ca.odell.glazedlists.GlazedLists; +import ca.odell.glazedlists.matchers.Matcher; + +public class DefaultGlazedListsStaticFilterStrategyTest { + + private static FilterList<Person> filterList; + + private static ConfigRegistry configRegistry; + private static DataLayerFixture columnHeaderLayer; + private static DefaultGlazedListsStaticFilterStrategy<Person> filterStrategy; + private static FilterRowDataProvider<Person> dataProvider; + + private static String[] personPropertyNames = { + "firstName", + "lastName", + "gender", + "married", + "birthday" }; + + private static Matcher<Person> homerFilter = new Matcher<Person>() { + + @Override + public boolean matches(Person item) { + return !"Homer".equals(item.getFirstName()); + } + }; + + @BeforeClass + public static void init() { + // initialize the collection with a big amount of values + filterList = new FilterList<>(GlazedLists.eventList(PersonService.getFixedPersons())); + for (int i = 1; i < 1000; i++) { + filterList.addAll(PersonService.getFixedPersons()); + } + configRegistry = new ConfigRegistry(); + + new DefaultNatTableStyleConfiguration().configureRegistry(configRegistry); + new DefaultFilterRowConfiguration().configureRegistry(configRegistry); + + columnHeaderLayer = new DataLayerFixture(5, 2, 100, 50); + filterStrategy = new DefaultGlazedListsStaticFilterStrategy<>( + filterList, + new ReflectiveColumnPropertyAccessor<Person>(personPropertyNames), + configRegistry); + dataProvider = new FilterRowDataProvider<>( + filterStrategy, + columnHeaderLayer, + columnHeaderLayer.getDataProvider(), configRegistry); + } + + @After + public void tearDown() { + // ensure to start over with a clear filter + dataProvider.clearAllFilters(); + } + + @Test + public void shouldFilterForSimpsons() { + assertEquals(18000, filterList.size()); + + dataProvider.setDataValue(1, 1, "Simpson"); + + assertEquals(10000, filterList.size()); + } + + @Test + public void shouldFilterForMultipleCriteria() { + assertEquals(18000, filterList.size()); + + // filter: contains m + // per fixed we have 3 Homer, 2 Marge, 2 Maude + dataProvider.setDataValue(0, 1, "m"); + + assertEquals(7000, filterList.size()); + + dataProvider.setDataValue(1, 1, "Flanders"); + + assertEquals(2000, filterList.size()); + } + + @Test + public void shouldResetFilterinSameOrder() { + // filter: contains m + // per fixed we have 3 Homer, 2 Marge, 2 Maude + dataProvider.setDataValue(0, 1, "m"); + dataProvider.setDataValue(1, 1, "Flanders"); + assertEquals(2000, filterList.size()); + + dataProvider.setDataValue(1, 1, null); + assertEquals(7000, filterList.size()); + + dataProvider.setDataValue(0, 1, null); + assertEquals(18000, filterList.size()); + } + + @Test + public void shouldResetFilterinDifferentOrder() { + // filter: contains m + // per fixed we have 3 Homer, 2 Marge, 2 Maude + dataProvider.setDataValue(0, 1, "m"); + dataProvider.setDataValue(1, 1, "Flanders"); + assertEquals(2000, filterList.size()); + + dataProvider.setDataValue(0, 1, null); + assertEquals(8000, filterList.size()); + + dataProvider.setDataValue(1, 1, null); + assertEquals(18000, filterList.size()); + } + + // with static filter + + @Test + public void shouldFilterForSimpsonsWithStaticHomerFilter() { + filterStrategy.addStaticFilter(homerFilter); + assertEquals(15000, filterList.size()); + + dataProvider.setDataValue(1, 1, "Simpson"); + assertEquals(7000, filterList.size()); + + filterStrategy.removeStaticFilter(homerFilter); + assertEquals(10000, filterList.size()); + } + + @Test + public void shouldFilterForMultipleCriteriaWithStaticHomerFilter() { + filterStrategy.addStaticFilter(homerFilter); + assertEquals(15000, filterList.size()); + + // filter: contains m + // per fixed we have 3 Homer, 2 Marge, 2 Maude + dataProvider.setDataValue(0, 1, "m"); + assertEquals(4000, filterList.size()); + + dataProvider.setDataValue(1, 1, "Simpson"); + assertEquals(2000, filterList.size()); + + filterStrategy.removeStaticFilter(homerFilter); + assertEquals(5000, filterList.size()); + } + + @Test + public void shouldResetFilterinSameOrderWithStaticHomerFilter() { + filterStrategy.addStaticFilter(homerFilter); + + // filter: contains m + // per fixed we have 3 Homer, 2 Marge, 2 Maude + dataProvider.setDataValue(0, 1, "m"); + dataProvider.setDataValue(1, 1, "Simpson"); + assertEquals(2000, filterList.size()); + + dataProvider.setDataValue(1, 1, null); + assertEquals(4000, filterList.size()); + + dataProvider.setDataValue(0, 1, null); + assertEquals(15000, filterList.size()); + + filterStrategy.removeStaticFilter(homerFilter); + assertEquals(18000, filterList.size()); + } + + @Test + public void shouldResetFilterinDifferentOrderWithStaticHomerFilter() { + filterStrategy.addStaticFilter(homerFilter); + + // filter: contains m + // per fixed we have 3 Homer, 2 Marge, 2 Maude + dataProvider.setDataValue(0, 1, "m"); + dataProvider.setDataValue(1, 1, "Simpson"); + assertEquals(2000, filterList.size()); + + dataProvider.setDataValue(0, 1, null); + assertEquals(7000, filterList.size()); + + dataProvider.setDataValue(1, 1, null); + assertEquals(15000, filterList.size()); + + filterStrategy.removeStaticFilter(homerFilter); + assertEquals(18000, filterList.size()); + } +} |