package com.vaadin.v7.data.util.filter; import org.junit.Assert; import org.junit.Test; public class SimpleStringFilterTest extends AbstractFilterTestBase<SimpleStringFilter> { protected static TestItem<String, String> createTestItem() { return new TestItem<String, String>("abcde", "TeSt"); } protected TestItem<String, String> getTestItem() { return createTestItem(); } protected SimpleStringFilter f(Object propertyId, String filterString, boolean ignoreCase, boolean onlyMatchPrefix) { return new SimpleStringFilter(propertyId, filterString, ignoreCase, onlyMatchPrefix); } protected boolean passes(Object propertyId, String filterString, boolean ignoreCase, boolean onlyMatchPrefix) { return f(propertyId, filterString, ignoreCase, onlyMatchPrefix) .passesFilter(null, getTestItem()); } @Test public void testStartsWithCaseSensitive() { Assert.assertTrue(passes(PROPERTY1, "ab", false, true)); Assert.assertTrue(passes(PROPERTY1, "", false, true)); Assert.assertFalse(passes(PROPERTY2, "ab", false, true)); Assert.assertFalse(passes(PROPERTY1, "AB", false, true)); } @Test public void testStartsWithCaseInsensitive() { Assert.assertTrue(passes(PROPERTY1, "AB", true, true)); Assert.assertTrue(passes(PROPERTY2, "te", true, true)); Assert.assertFalse(passes(PROPERTY2, "AB", true, true)); } @Test public void testContainsCaseSensitive() { Assert.assertTrue(passes(PROPERTY1, "ab", false, false)); Assert.assertTrue(passes(PROPERTY1, "abcde", false, false)); Assert.assertTrue(passes(PROPERTY1, "cd", false, false)); Assert.assertTrue(passes(PROPERTY1, "e", false, false)); Assert.assertTrue(passes(PROPERTY1, "", false, false)); Assert.assertFalse(passes(PROPERTY2, "ab", false, false)); Assert.assertFalse(passes(PROPERTY1, "es", false, false)); } @Test public void testContainsCaseInsensitive() { Assert.assertTrue(passes(PROPERTY1, "AB", true, false)); Assert.assertTrue(passes(PROPERTY1, "aBcDe", true, false)); Assert.assertTrue(passes(PROPERTY1, "CD", true, false)); Assert.assertTrue(passes(PROPERTY1, "", true, false)); Assert.assertTrue(passes(PROPERTY2, "es", true, false)); Assert.assertFalse(passes(PROPERTY2, "ab", true, false)); } @Test public void testAppliesToProperty() { SimpleStringFilter filter = f(PROPERTY1, "ab", false, true); Assert.assertTrue(filter.appliesToProperty(PROPERTY1)); Assert.assertFalse(filter.appliesToProperty(PROPERTY2)); Assert.assertFalse(filter.appliesToProperty("other")); } @Test public void testEqualsHashCode() { SimpleStringFilter filter = f(PROPERTY1, "ab", false, true); SimpleStringFilter f1 = f(PROPERTY2, "ab", false, true); SimpleStringFilter f1b = f(PROPERTY2, "ab", false, true); SimpleStringFilter f2 = f(PROPERTY1, "cd", false, true); SimpleStringFilter f2b = f(PROPERTY1, "cd", false, true); SimpleStringFilter f3 = f(PROPERTY1, "ab", true, true); SimpleStringFilter f3b = f(PROPERTY1, "ab", true, true); SimpleStringFilter f4 = f(PROPERTY1, "ab", false, false); SimpleStringFilter f4b = f(PROPERTY1, "ab", false, false); // equal but not same instance Assert.assertEquals(f1, f1b); Assert.assertEquals(f2, f2b); Assert.assertEquals(f3, f3b); Assert.assertEquals(f4, f4b); // more than one property differ Assert.assertFalse(f1.equals(f2)); Assert.assertFalse(f1.equals(f3)); Assert.assertFalse(f1.equals(f4)); Assert.assertFalse(f2.equals(f1)); Assert.assertFalse(f2.equals(f3)); Assert.assertFalse(f2.equals(f4)); Assert.assertFalse(f3.equals(f1)); Assert.assertFalse(f3.equals(f2)); Assert.assertFalse(f3.equals(f4)); Assert.assertFalse(f4.equals(f1)); Assert.assertFalse(f4.equals(f2)); Assert.assertFalse(f4.equals(f3)); // only one property differs Assert.assertFalse(filter.equals(f1)); Assert.assertFalse(filter.equals(f2)); Assert.assertFalse(filter.equals(f3)); Assert.assertFalse(filter.equals(f4)); Assert.assertFalse(f1.equals(null)); Assert.assertFalse(f1.equals(new Object())); Assert.assertEquals(f1.hashCode(), f1b.hashCode()); Assert.assertEquals(f2.hashCode(), f2b.hashCode()); Assert.assertEquals(f3.hashCode(), f3b.hashCode()); Assert.assertEquals(f4.hashCode(), f4b.hashCode()); } @Test public void testNonExistentProperty() { Assert.assertFalse(passes("other1", "ab", false, true)); } @Test public void testNullValueForProperty() { TestItem<String, String> item = createTestItem(); item.addItemProperty("other1", new NullProperty()); Assert.assertFalse( f("other1", "ab", false, true).passesFilter(null, item)); } }