/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library 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.
*/
package com.liferay.portal.util;
import com.liferay.portal.kernel.util.AggregatePredicateFilter;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.PredicateFilter;
import com.liferay.portal.kernel.util.StringUtil;
import java.util.Arrays;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Marcellus Tavares
*/
public class AggregatePredicateFilterTest {
@Test
public void testAndAggregatePredicateFilter() {
List<String> list = Arrays.asList("Bob", "Clair", "James", "Joe");
AggregatePredicateFilter<String> aggregatePredicateFilter =
new AggregatePredicateFilter<>(new StartsWithPredicateFilter("B"));
aggregatePredicateFilter = aggregatePredicateFilter.or(
new EndsWithPredicateFilter("B"));
Assert.assertEquals(
Arrays.asList("Bob"),
ListUtil.filter(list, aggregatePredicateFilter));
}
@Test
public void testIdentityAggregatePredicateFilter() {
List<String> list = Arrays.asList("Bob", "Clair", "James", "Joe");
AggregatePredicateFilter<String> aggregatePredicateFilter =
new AggregatePredicateFilter<>(new StartsWithPredicateFilter("J"));
Assert.assertEquals(
Arrays.asList("James", "Joe"),
ListUtil.filter(list, aggregatePredicateFilter));
}
@Test
public void testMultipleAggregatePredicateFilter() {
List<String> list = Arrays.asList(
"Bob", "Carl", "Clair", "James", "Joe");
AggregatePredicateFilter<String> aggregatePredicateFilter =
new AggregatePredicateFilter<>(new StartsWithPredicateFilter("C"));
aggregatePredicateFilter = aggregatePredicateFilter.and(
new EndsWithPredicateFilter("L"));
aggregatePredicateFilter = aggregatePredicateFilter.or(
new EndsWithPredicateFilter("E"));
Assert.assertEquals(
Arrays.asList("Carl", "Joe"),
ListUtil.filter(list, aggregatePredicateFilter));
aggregatePredicateFilter = aggregatePredicateFilter.negate();
Assert.assertEquals(
Arrays.asList("Bob", "Clair", "James"),
ListUtil.filter(list, aggregatePredicateFilter));
}
@Test
public void testNegateAggregatePredicateFilter() {
List<String> list = Arrays.asList("Bob", "Clair", "James", "Joe");
AggregatePredicateFilter<String> aggregatePredicateFilter =
new AggregatePredicateFilter<>(new StartsWithPredicateFilter("J"));
aggregatePredicateFilter = aggregatePredicateFilter.negate();
Assert.assertEquals(
Arrays.asList("Bob", "Clair"),
ListUtil.filter(list, aggregatePredicateFilter));
}
@Test
public void testOrAggregatePredicateFilter() {
List<String> list = Arrays.asList("Bob", "Clair", "James", "Joe");
AggregatePredicateFilter<String> aggregatePredicateFilter =
new AggregatePredicateFilter<>(new StartsWithPredicateFilter("J"));
aggregatePredicateFilter = aggregatePredicateFilter.or(
new EndsWithPredicateFilter("R"));
Assert.assertEquals(
Arrays.asList("Clair", "James", "Joe"),
ListUtil.filter(list, aggregatePredicateFilter));
}
private static class EndsWithPredicateFilter
implements PredicateFilter<String> {
public EndsWithPredicateFilter(String lastLetter) {
_lastLetter = lastLetter;
}
@Override
public boolean filter(String string) {
String lastLetter = string.substring(string.length() - 1);
if (StringUtil.equalsIgnoreCase(lastLetter, _lastLetter)) {
return true;
}
return false;
}
private final String _lastLetter;
}
private static class StartsWithPredicateFilter
implements PredicateFilter<String> {
public StartsWithPredicateFilter(String firstLetter) {
_firstLetter = firstLetter;
}
@Override
public boolean filter(String string) {
String firstLetter = string.substring(0, 1);
if (StringUtil.equalsIgnoreCase(firstLetter, _firstLetter)) {
return true;
}
return false;
}
private final String _firstLetter;
}
}