/** * 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.kernel.util; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import org.junit.Assert; import org.junit.Test; /** * @author Olaf Kock * @author Jos� Navarro */ public class ListUtilTest { @Test public void testCountEmptyList() { List<String> list = new ArrayList<>(); PredicateFilter<String> predicateFilter = new PredicateFilter<String>() { @Override public boolean filter(String string) { return true; } }; Assert.assertEquals(0, ListUtil.count(list, predicateFilter)); } @Test public void testCountList() { List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); PredicateFilter<String> predicateFilter = new PredicateFilter<String>() { @Override public boolean filter(String string) { return string.equals("b"); } }; Assert.assertEquals(1, ListUtil.count(list, predicateFilter)); predicateFilter = new PredicateFilter<String>() { @Override public boolean filter(String string) { return string.equals("z"); } }; Assert.assertEquals(0, ListUtil.count(list, predicateFilter)); } @Test public void testCountNullList() { List<String> list = null; PredicateFilter<String> predicateFilter = new PredicateFilter<String>() { @Override public boolean filter(String string) { return true; } }; Assert.assertEquals(0, ListUtil.count(list, predicateFilter)); } @Test public void testExistsEmptyList() { List<String> list = new ArrayList<>(); PredicateFilter<String> predicateFilter = new PredicateFilter<String>() { @Override public boolean filter(String string) { return true; } }; Assert.assertFalse(ListUtil.exists(list, predicateFilter)); } @Test public void testExistsList() { List<String> list = new ArrayList<>(); list.add("a"); list.add("bb"); list.add("c"); PredicateFilter<String> predicateFilter = new PredicateFilter<String>() { @Override public boolean filter(String string) { if (string.length() == 2) { return true; } return false; } }; Assert.assertTrue(ListUtil.exists(list, predicateFilter)); predicateFilter = new PredicateFilter<String>() { @Override public boolean filter(String string) { return string.equals("z"); } }; Assert.assertFalse(ListUtil.exists(list, predicateFilter)); } @Test public void testExistsNullList() { List<String> list = null; PredicateFilter<String> predicateFilter = new PredicateFilter<String>() { @Override public boolean filter(String string) { return true; } }; Assert.assertFalse(ListUtil.exists(list, predicateFilter)); } @Test public void testFilterWithoutOutputList() { List<String> expectedOutputList = new ArrayList<>(); expectedOutputList.add("b"); PredicateFilter<String> predicateFilter = new PredicateFilter<String>() { @Override public boolean filter(String string) { return string.equals("b"); } }; List<String> inputList = new ArrayList<>(); inputList.add("a"); inputList.add("b"); inputList.add("c"); Collection<String> actualOutputList = ListUtil.filter( inputList, predicateFilter); Assert.assertEquals(expectedOutputList, actualOutputList); } @Test public void testFilterWithOutputList() { List<String> expectedOutputList = new ArrayList<>(); expectedOutputList.add("0"); expectedOutputList.add("b"); List<String> inputList = new ArrayList<>(); inputList.add("a"); inputList.add("b"); inputList.add("c"); List<String> outputList = new ArrayList<>(); outputList.add("0"); PredicateFilter<String> predicateFilter = new PredicateFilter<String>() { @Override public boolean filter(String string) { return string.equals("b"); } }; Collection<String> actualOutputList = ListUtil.filter( inputList, outputList, predicateFilter); Assert.assertSame(outputList, actualOutputList); Assert.assertEquals(expectedOutputList, actualOutputList); } @Test public void testIsNullWhenAllValuesAreNull() { List<String> list = new ArrayList<>(); list.add(null); list.add(null); Assert.assertTrue(ListUtil.isNull(list)); Assert.assertFalse(ListUtil.isNotNull(list)); } @Test public void testIsNullWhenAllValuesAreStringNull() { List<String> list = new ArrayList<>(); list.add("null"); list.add("null"); Assert.assertTrue(ListUtil.isNull(list)); Assert.assertFalse(ListUtil.isNotNull(list)); } @Test public void testIsNullWhenCombiningDifferentNullValues() { List<String> list = new ArrayList<>(); list.add(null); list.add("null"); list.add(StringPool.BLANK); Assert.assertTrue(ListUtil.isNull(list)); Assert.assertFalse(ListUtil.isNotNull(list)); } @Test public void testIsNullWhenEmptyList() { List<String> list = new ArrayList<>(); Assert.assertTrue(ListUtil.isNull(list)); Assert.assertFalse(ListUtil.isNotNull(list)); } @Test public void testIsNullWhenNotAllValuesAreEmptyString() { List<String> list = new ArrayList<>(); list.add(StringPool.BLANK); list.add(StringPool.BLANK); Assert.assertTrue(ListUtil.isNull(list)); Assert.assertFalse(ListUtil.isNotNull(list)); } @Test public void testIsNullWhenNullList() { List<String> list = null; Assert.assertTrue(ListUtil.isNull(list)); Assert.assertFalse(ListUtil.isNotNull(list)); } @Test public void testRemoveEmptyElement() { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); List<String> removeList = new ArrayList<>(); List<String> expectedList = new ArrayList<>(); expectedList.add("aaa"); expectedList.add("bbb"); expectedList.add("ccc"); Assert.assertEquals(expectedList, ListUtil.remove(list, removeList)); } @Test public void testRemoveFromEmptyList() { List<String> list = Collections.<String>emptyList(); List<String> removeList = new ArrayList<>(); removeList.add("aaa"); removeList.add("bbb"); Assert.assertEquals( Collections.emptyList(), ListUtil.remove(list, removeList)); } @Test public void testRemoveMultipleElements() { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); List<String> removeList = new ArrayList<>(); removeList.add("aaa"); removeList.add("bbb"); removeList.add("ccc"); Assert.assertEquals( Collections.emptyList(), ListUtil.remove(list, removeList)); } @Test public void testRemoveNullElement() { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); List<String> expectedList = new ArrayList<>(); expectedList.add("aaa"); expectedList.add("bbb"); expectedList.add("ccc"); List<String> removeList = null; Assert.assertEquals(expectedList, ListUtil.remove(list, removeList)); } @Test public void testRemoveSingleElement() { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); List<String> removeList = new ArrayList<>(); removeList.add("aaa"); List<String> expectedList = new ArrayList<>(); expectedList.add("bbb"); expectedList.add("ccc"); Assert.assertEquals(expectedList, ListUtil.remove(list, removeList)); } @Test public void testRemoveWrongElement() { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); List<String> removeList = new ArrayList<>(); removeList.add("ddd"); List<String> expectedList = new ArrayList<>(); expectedList.add("aaa"); expectedList.add("bbb"); expectedList.add("ccc"); Assert.assertEquals(expectedList, ListUtil.remove(list, removeList)); } @Test public void testSubList() { List<Integer> list = Arrays.asList(1, 2, 3, 4); // Negative start, positive end, within range Assert.assertEquals( Arrays.asList(1, 2, 3), ListUtil.subList(list, -1, 3)); // Negative start, positive end, out of range Assert.assertEquals(list, ListUtil.subList(list, -1, 5)); // Negative start, negative end Assert.assertEquals(list, ListUtil.subList(list, -1, -1)); // Proper start and end Assert.assertEquals(Arrays.asList(2, 3), ListUtil.subList(list, 1, 3)); // Start is equal to end Assert.assertSame( Collections.emptyList(), ListUtil.subList(list, 1, 1)); // Start is greater than end Assert.assertSame( Collections.emptyList(), ListUtil.subList(list, 2, 1)); } @Test public void testToArray() { List<Integer> list = Arrays.asList(1, 2, 3, 4); String[] array = ListUtil.toArray( list, new Accessor<Integer, String>() { @Override public String get(Integer integer) { return String.valueOf(integer); } @Override public Class<String> getAttributeClass() { return String.class; } @Override public Class<Integer> getTypeClass() { return Integer.class; } }); Assert.assertArrayEquals(new String[] {"1", "2", "3", "4"}, array); } @Test public void testToArrayEmpty() { List<Integer> list = Collections.emptyList(); String[] array = ListUtil.toArray( list, new Accessor<Integer, String>() { @Override public String get(Integer integer) { return String.valueOf(integer); } @Override public Class<String> getAttributeClass() { return String.class; } @Override public Class<Integer> getTypeClass() { return Integer.class; } }); Assert.assertArrayEquals(new String[0], array); } @Test public void testToList() throws Exception { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); List<Object> list2 = ListUtil.toList(list); Assert.assertArrayEquals( new Object[] {"aaa", "bbb", "ccc"}, list2.toArray()); } @Test public void testToLongArray() { List<String> list = Arrays.asList("1", "2", "3", "4"); long[] array = ListUtil.toLongArray( list, new Accessor<String, Long>() { @Override public Long get(String string) { return Long.parseLong(string); } @Override public Class<Long> getAttributeClass() { return Long.class; } @Override public Class<String> getTypeClass() { return String.class; } }); Assert.assertArrayEquals(new long[] {1, 2, 3, 4}, array); } @Test public void testToLongArrayEmpty() { List<String> list = Collections.emptyList(); long[] array = ListUtil.toLongArray( list, new Accessor<String, Long>() { @Override public Long get(String string) { return Long.parseLong(string); } @Override public Class<Long> getAttributeClass() { return Long.class; } @Override public Class<String> getTypeClass() { return String.class; } }); Assert.assertArrayEquals(new long[0], array); } @Test public void testToStringIntegerList() throws Exception { List<Integer> list = new ArrayList<>(); list.add(111); list.add(222); list.add(333); Assert.assertEquals( "111,222,333", ListUtil.toString(list, StringPool.NULL, StringPool.COMMA)); } @Test public void testToStringLongList() throws Exception { List<Long> list = new ArrayList<>(); list.add(111L); list.add(222L); list.add(333L); Assert.assertEquals( "111, 222, 333", ListUtil.toString( list, StringPool.BLANK, StringPool.COMMA_AND_SPACE)); } @Test public void testToStringStringList() throws Exception { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); Assert.assertEquals( "aaa.bbb.ccc", ListUtil.toString(list, (String)null, StringPool.PERIOD)); } }