diff --git a/core-java-modules/core-java-collections-array-list-2/pom.xml b/core-java-modules/core-java-collections-array-list-2/pom.xml index b436324dca3a..ce3989ca2c8d 100644 --- a/core-java-modules/core-java-collections-array-list-2/pom.xml +++ b/core-java-modules/core-java-collections-array-list-2/pom.xml @@ -12,6 +12,14 @@ 0.0.1-SNAPSHOT + + + org.apache.commons + commons-collections4 + ${apache.commons.version} + + + @@ -28,5 +36,6 @@ 17 17 + 4.4 diff --git a/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/addallnulls/AddAllWithNullsUnitTest.java b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/addallnulls/AddAllWithNullsUnitTest.java new file mode 100644 index 000000000000..fa470fc975ba --- /dev/null +++ b/core-java-modules/core-java-collections-array-list-2/src/test/java/com/baeldung/addallnulls/AddAllWithNullsUnitTest.java @@ -0,0 +1,89 @@ +package com.baeldung.addallnulls; + +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.api.Assertions.assertThatNoException; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Stream; +import org.apache.commons.collections4.CollectionUtils; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.NullSource; + +class AddAllWithNullsUnitTest { + + @ParameterizedTest + @NullSource + void givenNull_whenAddAll_thenAddThrowsNPE(List list) { + ArrayList strings = new ArrayList<>(); + assertThatExceptionOfType(NullPointerException.class).isThrownBy(() -> strings.addAll(list)); + } + + @ParameterizedTest + @NullSource + void givenNull_whenAddAllWithCheck_thenNoNPE(List list) { + ArrayList strings = new ArrayList<>(); + assertThatNoException().isThrownBy(() -> { + if (list != null) { + strings.addAll(list); + } + }); + } + + @ParameterizedTest + @NullSource + void givenNull_whenAddAllWithCollectionCheck_thenNoNPE(List list) { + ArrayList strings = new ArrayList<>(); + assertThatNoException().isThrownBy(() -> { + strings.addAll(CollectionUtils.emptyIfNull(list)); + }); + } + + @ParameterizedTest + @NullSource + void givenNull_whenAddAllWithExternalizedCheck_thenNoNPE(List list) { + ArrayList strings = new ArrayList<>(); + assertThatNoException().isThrownBy(() -> { + addIfNonNull(list, strings); + }); + } + + private static void addIfNonNull(List list, ArrayList strings) { + if (list != null) { + strings.addAll(list); + } + } + + @ParameterizedTest + @NullSource + void givenNull_whenAddAllWithOptional_thenNoNPE(List list) { + ArrayList strings = new ArrayList<>(); + assertThatNoException().isThrownBy(() -> { + Optional.ofNullable(list).ifPresent(strings::addAll); + }); + } + + @ParameterizedTest + @MethodSource("listProvider") + void givenCollectionOfNullableLists_whenFilter_thenNoNPE(List> listOfLists) { + ArrayList strings = new ArrayList<>(); + assertThatNoException().isThrownBy(() -> { + listOfLists.stream().filter(Objects::nonNull).forEach(strings::addAll); + }); + } + + static Stream>> listProvider() { + ArrayList> lists = new ArrayList<>(); + lists.add(null); + lists.add(List.of("Hello")); + lists.add(null); + lists.add(List.of("World")); + lists.add(null); + return Stream.of( + lists + ); + } +}