package com.vaadin.v7.data.util.filter;
import org.junit.Assert;
import org.junit.Test;
import com.vaadin.v7.data.Container.Filter;
import com.vaadin.v7.data.Item;
import com.vaadin.v7.data.util.BeanItem;
public class AndOrFilterTest
extends AbstractFilterTestBase<AbstractJunctionFilter> {
protected Item item1 = new BeanItem<Integer>(1);
protected Item item2 = new BeanItem<Integer>(2);
@Test
public void testNoFilterAnd() {
Filter filter = new And();
Assert.assertTrue(filter.passesFilter(null, item1));
}
@Test
public void testSingleFilterAnd() {
Filter filter = new And(new SameItemFilter(item1));
Assert.assertTrue(filter.passesFilter(null, item1));
Assert.assertFalse(filter.passesFilter(null, item2));
}
@Test
public void testTwoFilterAnd() {
Filter filter1 = new And(new SameItemFilter(item1),
new SameItemFilter(item1));
Filter filter2 = new And(new SameItemFilter(item1),
new SameItemFilter(item2));
Assert.assertTrue(filter1.passesFilter(null, item1));
Assert.assertFalse(filter1.passesFilter(null, item2));
Assert.assertFalse(filter2.passesFilter(null, item1));
Assert.assertFalse(filter2.passesFilter(null, item2));
}
@Test
public void testThreeFilterAnd() {
Filter filter1 = new And(new SameItemFilter(item1),
new SameItemFilter(item1), new SameItemFilter(item1));
Filter filter2 = new And(new SameItemFilter(item1),
new SameItemFilter(item1), new SameItemFilter(item2));
Assert.assertTrue(filter1.passesFilter(null, item1));
Assert.assertFalse(filter1.passesFilter(null, item2));
Assert.assertFalse(filter2.passesFilter(null, item1));
Assert.assertFalse(filter2.passesFilter(null, item2));
}
@Test
public void testNoFilterOr() {
Filter filter = new Or();
Assert.assertFalse(filter.passesFilter(null, item1));
}
@Test
public void testSingleFilterOr() {
Filter filter = new Or(new SameItemFilter(item1));
Assert.assertTrue(filter.passesFilter(null, item1));
Assert.assertFalse(filter.passesFilter(null, item2));
}
@Test
public void testTwoFilterOr() {
Filter filter1 = new Or(new SameItemFilter(item1),
new SameItemFilter(item1));
Filter filter2 = new Or(new SameItemFilter(item1),
new SameItemFilter(item2));
Assert.assertTrue(filter1.passesFilter(null, item1));
Assert.assertFalse(filter1.passesFilter(null, item2));
Assert.assertTrue(filter2.passesFilter(null, item1));
Assert.assertTrue(filter2.passesFilter(null, item2));
}
@Test
public void testThreeFilterOr() {
Filter filter1 = new Or(new SameItemFilter(item1),
new SameItemFilter(item1), new SameItemFilter(item1));
Filter filter2 = new Or(new SameItemFilter(item1),
new SameItemFilter(item1), new SameItemFilter(item2));
Assert.assertTrue(filter1.passesFilter(null, item1));
Assert.assertFalse(filter1.passesFilter(null, item2));
Assert.assertTrue(filter2.passesFilter(null, item1));
Assert.assertTrue(filter2.passesFilter(null, item2));
}
@Test
public void testAndEqualsHashCode() {
Filter filter0 = new And();
Filter filter0b = new And();
Filter filter1a = new And(new SameItemFilter(item1));
Filter filter1a2 = new And(new SameItemFilter(item1));
Filter filter1b = new And(new SameItemFilter(item2));
Filter filter2a = new And(new SameItemFilter(item1),
new SameItemFilter(item1));
Filter filter2b = new And(new SameItemFilter(item1),
new SameItemFilter(item2));
Filter filter2b2 = new And(new SameItemFilter(item1),
new SameItemFilter(item2));
Filter other0 = new Or();
Filter other1 = new Or(new SameItemFilter(item1));
Assert.assertEquals(filter0, filter0);
Assert.assertEquals(filter0, filter0b);
Assert.assertFalse(filter0.equals(filter1a));
Assert.assertFalse(filter0.equals(other0));
Assert.assertFalse(filter0.equals(other1));
Assert.assertFalse(filter1a.equals(filter1b));
Assert.assertFalse(filter1a.equals(other1));
Assert.assertFalse(filter1a.equals(filter2a));
Assert.assertFalse(filter2a.equals(filter1a));
Assert.assertFalse(filter2a.equals(filter2b));
Assert.assertEquals(filter2b, filter2b2);
// hashCode()
Assert.assertEquals(filter0.hashCode(), filter0.hashCode());
Assert.assertEquals(filter0.hashCode(), filter0b.hashCode());
Assert.assertEquals(filter1a.hashCode(), filter1a.hashCode());
Assert.assertEquals(filter1a.hashCode(), filter1a2.hashCode());
Assert.assertEquals(filter2a.hashCode(), filter2a.hashCode());
Assert.assertEquals(filter2b.hashCode(), filter2b2.hashCode());
}
@Test
public void testOrEqualsHashCode() {
Filter filter0 = new Or();
Filter filter0b = new Or();
Filter filter1a = new Or(new SameItemFilter(item1));
Filter filter1a2 = new Or(new SameItemFilter(item1));
Filter filter1b = new Or(new SameItemFilter(item2));
Filter filter2a = new Or(new SameItemFilter(item1),
new SameItemFilter(item1));
Filter filter2b = new Or(new SameItemFilter(item1),
new SameItemFilter(item2));
Filter filter2b2 = new Or(new SameItemFilter(item1),
new SameItemFilter(item2));
Filter other0 = new And();
Filter other1 = new And(new SameItemFilter(item1));
Assert.assertEquals(filter0, filter0);
Assert.assertEquals(filter0, filter0b);
Assert.assertFalse(filter0.equals(filter1a));
Assert.assertFalse(filter0.equals(other0));
Assert.assertFalse(filter0.equals(other1));
Assert.assertFalse(filter1a.equals(filter1b));
Assert.assertFalse(filter1a.equals(other1));
Assert.assertFalse(filter1a.equals(filter2a));
Assert.assertFalse(filter2a.equals(filter1a));
Assert.assertFalse(filter2a.equals(filter2b));
Assert.assertEquals(filter2b, filter2b2);
// hashCode()
Assert.assertEquals(filter0.hashCode(), filter0.hashCode());
Assert.assertEquals(filter0.hashCode(), filter0b.hashCode());
Assert.assertEquals(filter1a.hashCode(), filter1a.hashCode());
Assert.assertEquals(filter1a.hashCode(), filter1a2.hashCode());
Assert.assertEquals(filter2a.hashCode(), filter2a.hashCode());
Assert.assertEquals(filter2b.hashCode(), filter2b2.hashCode());
}
@Test
public void testAndAppliesToProperty() {
Filter filter0 = new And();
Filter filter1a = new And(new SameItemFilter(item1, "a"));
Filter filter1b = new And(new SameItemFilter(item1, "b"));
Filter filter2aa = new And(new SameItemFilter(item1, "a"),
new SameItemFilter(item1, "a"));
Filter filter2ab = new And(new SameItemFilter(item1, "a"),
new SameItemFilter(item1, "b"));
Filter filter3abc = new And(new SameItemFilter(item1, "a"),
new SameItemFilter(item1, "b"), new SameItemFilter(item1, "c"));
// empty And does not filter out anything
Assert.assertFalse(filter0.appliesToProperty("a"));
Assert.assertFalse(filter0.appliesToProperty("d"));
Assert.assertTrue(filter1a.appliesToProperty("a"));
Assert.assertFalse(filter1a.appliesToProperty("b"));
Assert.assertFalse(filter1b.appliesToProperty("a"));
Assert.assertTrue(filter1b.appliesToProperty("b"));
Assert.assertTrue(filter2aa.appliesToProperty("a"));
Assert.assertFalse(filter2aa.appliesToProperty("b"));
Assert.assertTrue(filter2ab.appliesToProperty("a"));
Assert.assertTrue(filter2ab.appliesToProperty("b"));
Assert.assertTrue(filter3abc.appliesToProperty("a"));
Assert.assertTrue(filter3abc.appliesToProperty("b"));
Assert.assertTrue(filter3abc.appliesToProperty("c"));
Assert.assertFalse(filter3abc.appliesToProperty("d"));
}
@Test
public void testOrAppliesToProperty() {
Filter filter0 = new Or();
Filter filter1a = new Or(new SameItemFilter(item1, "a"));
Filter filter1b = new Or(new SameItemFilter(item1, "b"));
Filter filter2aa = new Or(new SameItemFilter(item1, "a"),
new SameItemFilter(item1, "a"));
Filter filter2ab = new Or(new SameItemFilter(item1, "a"),
new SameItemFilter(item1, "b"));
Filter filter3abc = new Or(new SameItemFilter(item1, "a"),
new SameItemFilter(item1, "b"), new SameItemFilter(item1, "c"));
// empty Or filters out everything
Assert.assertTrue(filter0.appliesToProperty("a"));
Assert.assertTrue(filter0.appliesToProperty("d"));
Assert.assertTrue(filter1a.appliesToProperty("a"));
Assert.assertFalse(filter1a.appliesToProperty("b"));
Assert.assertFalse(filter1b.appliesToProperty("a"));
Assert.assertTrue(filter1b.appliesToProperty("b"));
Assert.assertTrue(filter2aa.appliesToProperty("a"));
Assert.assertFalse(filter2aa.appliesToProperty("b"));
Assert.assertTrue(filter2ab.appliesToProperty("a"));
Assert.assertTrue(filter2ab.appliesToProperty("b"));
Assert.assertTrue(filter3abc.appliesToProperty("a"));
Assert.assertTrue(filter3abc.appliesToProperty("b"));
Assert.assertTrue(filter3abc.appliesToProperty("c"));
Assert.assertFalse(filter3abc.appliesToProperty("d"));
}
}