Improve MapUtils with the null checks, add JUnit for it and add Javadoc for the parameter indent. (#126)

* Improve MapUtils with the null checks, add JUnit for it and add Javadoc for the parameter indent.

* Standardize on American English spelling of 'behavior'.

* Tested the NPE exceptions with the JUnit 5 APIs.

* Fixed the failure of CI with the ParameterResolutionException.

* Remove unused imports.
diff --git a/pom.xml b/pom.xml
index e632c7c..1da7535 100644
--- a/pom.xml
+++ b/pom.xml
@@ -441,11 +441,20 @@
     <contributor>
       <name>Claude Warren</name>
     </contributor>
+    <contributor>
+      <name>Chen Guoping</name>
+    </contributor>
   </contributors>
 
   <dependencies>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <version>5.6.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <version>5.6.0</version>
       <scope>test</scope>
diff --git a/src/main/java/org/apache/commons/collections4/MapUtils.java b/src/main/java/org/apache/commons/collections4/MapUtils.java
index e73474e..ee66d23 100644
--- a/src/main/java/org/apache/commons/collections4/MapUtils.java
+++ b/src/main/java/org/apache/commons/collections4/MapUtils.java
@@ -1187,11 +1187,12 @@
      *
      * @param <K> the key type
      * @param <V> the value type
-     * @param map the map to invert, may not be null
+     * @param map the map to invert, must not be null
      * @return a new HashMap containing the inverted data
      * @throws NullPointerException if the map is null
      */
     public static <K, V> Map<V, K> invertMap(final Map<K, V> map) {
+        Objects.requireNonNull(map, "map");
         final Map<V, K> out = new HashMap<>(map.size());
         for (final Entry<K, V> entry : map.entrySet()) {
             out.put(entry.getValue(), entry.getKey());
@@ -1614,6 +1615,7 @@
      * Writes indentation to the given stream.
      *
      * @param out the stream to indent
+     * @param indent the index of the indentation
      */
     private static void printIndent(final PrintStream out, final int indent) {
         for (int i = 0; i < indent; i++) {
@@ -1722,13 +1724,14 @@
      * </p>
      *
      * @param <K> the key type
-     * @param map the map to add to, may not be null
+     * @param map the map to add to, must not be null
      * @param key the key
      * @param value the value, null converted to ""
      * @throws NullPointerException if the map is null
      */
     public static <K> void safeAddToMap(final Map<? super K, Object> map, final K key, final Object value)
             throws NullPointerException {
+        Objects.requireNonNull(map, "map");
         map.put(key, value == null ? "" : value);
     }
 
@@ -1808,11 +1811,12 @@
     /**
      * Creates a new HashMap using data copied from a ResourceBundle.
      *
-     * @param resourceBundle the resource bundle to convert, may not be null
-     * @return the hashmap containing the data
+     * @param resourceBundle the resource bundle to convert, must not be null
+     * @return the HashMap containing the data
      * @throws NullPointerException if the bundle is null
      */
     public static Map<String, Object> toMap(final ResourceBundle resourceBundle) {
+        Objects.requireNonNull(resourceBundle, "resourceBundle");
         final Enumeration<String> enumeration = resourceBundle.getKeys();
         final Map<String, Object> map = new HashMap<>();
 
diff --git a/src/test/java/org/apache/commons/collections4/MapUtilsTest.java b/src/test/java/org/apache/commons/collections4/MapUtilsTest.java
index 17428fe..1703bcf 100644
--- a/src/test/java/org/apache/commons/collections4/MapUtilsTest.java
+++ b/src/test/java/org/apache/commons/collections4/MapUtilsTest.java
@@ -16,13 +16,14 @@
  */
 package org.apache.commons.collections4;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
@@ -36,7 +37,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.ListResourceBundle;
-import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.ResourceBundle;
@@ -44,25 +44,21 @@
 import java.util.SortedMap;
 import java.util.TreeMap;
 import org.apache.commons.collections4.collection.TransformedCollectionTest;
-import org.apache.commons.collections4.junit.AbstractAvailableLocalesTest;
 import org.apache.commons.collections4.keyvalue.DefaultKeyValue;
 import org.apache.commons.collections4.keyvalue.DefaultMapEntry;
 import org.apache.commons.collections4.map.HashedMap;
 import org.apache.commons.collections4.map.LazyMap;
 import org.apache.commons.collections4.map.MultiValueMap;
 import org.apache.commons.collections4.map.PredicatedMap;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests for MapUtils.
  */
 @SuppressWarnings("boxing")
-public class MapUtilsTest extends AbstractAvailableLocalesTest {
+public class MapUtilsTest {
     private static final String THREE = "Three";
-
-    public MapUtilsTest(final Locale locale) {
-        super(locale);
-    }
+    private static final String TWO = "Two";
 
     public Predicate<Object> getPredicate() {
         return o -> o instanceof String;
@@ -72,7 +68,7 @@
     public void testPredicatedMap() {
         final Predicate<Object> p = getPredicate();
         final Map<Object, Object> map = MapUtils.predicatedMap(new HashMap<>(), p, p);
-        assertTrue("returned object should be a PredicatedMap", map instanceof PredicatedMap);
+        assertTrue(map instanceof PredicatedMap);
         try {
             MapUtils.predicatedMap(null, p, p);
             fail("Expecting NullPointerException for null map.");
@@ -87,13 +83,13 @@
         Map<Object, Object> map = MapUtils.lazyMap(new HashMap<>(), factory);
         assertTrue(map instanceof LazyMap);
         try {
-            map = MapUtils.lazyMap(new HashMap<>(), (Factory<Object>) null);
+            MapUtils.lazyMap(new HashMap<>(), (Factory<Object>) null);
             fail("Expecting NullPointerException for null factory");
         } catch (final NullPointerException e) {
             // expected
         }
         try {
-            map = MapUtils.lazyMap((Map<Object, Object>) null, factory);
+            MapUtils.lazyMap((Map<Object, Object>) null, factory);
             fail("Expecting NullPointerException for null map");
         } catch (final NullPointerException e) {
             // expected
@@ -102,13 +98,13 @@
         map = MapUtils.lazyMap(new HashMap<>(), transformer);
         assertTrue(map instanceof LazyMap);
         try {
-            map = MapUtils.lazyMap(new HashMap<>(), (Transformer<Object, Object>) null);
+            MapUtils.lazyMap(new HashMap<>(), (Transformer<Object, Object>) null);
             fail("Expecting NullPointerException for null transformer");
         } catch (final NullPointerException e) {
             // expected
         }
         try {
-            map = MapUtils.lazyMap((Map<Object, Object>) null, transformer);
+            MapUtils.lazyMap((Map<Object, Object>) null, transformer);
             fail("Expecting NullPointerException for null map");
         } catch (final NullPointerException e) {
             // expected
@@ -146,7 +142,7 @@
         final Set<String> inKeySet = new HashSet<>(in.keySet());
         final Set<String> inValSet = new HashSet<>(in.values());
 
-        final Map<String, String> out =  MapUtils.invertMap(in);
+        final Map<String, String> out = MapUtils.invertMap(in);
 
         final Set<String> outKeySet = new HashSet<>(out.keySet());
         final Set<String> outValSet = new HashSet<>(out.values());
@@ -154,11 +150,28 @@
         assertEquals(inKeySet, outValSet);
         assertEquals(inValSet, outKeySet);
 
-        assertEquals( "1", out.get("A"));
-        assertEquals( "2", out.get("B"));
-        assertEquals( "3", out.get("C"));
-        assertEquals( "4", out.get("D"));
-        assertEquals( "5", out.get("E"));
+        assertEquals("1", out.get("A"));
+        assertEquals("2", out.get("B"));
+        assertEquals("3", out.get("C"));
+        assertEquals("4", out.get("D"));
+        assertEquals("5", out.get("E"));
+    }
+
+    @Test
+    public void testInvertEmptyMap() {
+        Map<String, String> emptyMap = new HashMap<>();
+        Map<String, String> resultMap = MapUtils.invertMap(emptyMap);
+        assertEquals(emptyMap, resultMap);
+    }
+
+    @Test
+    public void testInvertMapNull() {
+        Map<String, String> nullMap = null;
+        Exception exception = assertThrows(NullPointerException.class, () -> {
+            MapUtils.invertMap(nullMap);
+        });
+        String actualMessage = exception.getMessage();
+        assertTrue(actualMessage.contains("map"));
     }
 
     @Test
@@ -288,14 +301,14 @@
         final ResourceBundle b = new ListResourceBundle() {
             @Override
             public Object[][] getContents() {
-                final Object[][] contents = new Object[ in.size() ][2];
+                final Object[][] contents = new Object[in.size()][2];
                 final Iterator<String> i = in.keySet().iterator();
                 int n = 0;
-                while ( i.hasNext() ) {
+                while (i.hasNext()) {
                     final Object key = i.next();
-                    final Object val = in.get( key );
-                    contents[ n ][ 0 ] = key;
-                    contents[ n ][ 1 ] = val;
+                    final Object val = in.get(key);
+                    contents[n][0] = key;
+                    contents[n][1] = val;
                     ++n;
                 }
                 return contents;
@@ -552,7 +565,7 @@
         final String INDENT = "    ";
 
         final Map<Object, Object> map = new HashMap<>();
-        final Map<Object, Object> map2= new HashMap<>();
+        final Map<Object, Object> map2 = new HashMap<>();
         map.put(null, map2);
         map2.put("2", "B");
 
@@ -897,23 +910,23 @@
     @Test
     public void testLazyMap() {
         final Map<String, Integer> lazyMap = MapUtils.lazyMap(new HashMap<>(), () -> 1);
-        lazyMap.put("Two", 2);
+        lazyMap.put(TWO, 2);
 
-        assertEquals(Integer.valueOf(2), lazyMap.get("Two"));
+        assertEquals(Integer.valueOf(2), lazyMap.get(TWO));
         assertEquals(Integer.valueOf(1), lazyMap.get(THREE));
     }
 
     @Test
     public void testLazySortedMapFactory() {
         final SortedMap<String, Integer> lazySortedMap = MapUtils.lazySortedMap(new TreeMap<>(), () -> 1);
-        lazySortedMap.put("Two", 2);
+        lazySortedMap.put(TWO, 2);
 
-        assertEquals(Integer.valueOf(2), lazySortedMap.get("Two"));
+        assertEquals(Integer.valueOf(2), lazySortedMap.get(TWO));
         assertEquals(Integer.valueOf(1), lazySortedMap.get(THREE));
 
         final Set<Map.Entry<String, Integer>> entrySet = new HashSet<>();
         entrySet.add(new AbstractMap.SimpleEntry<>(THREE, 1));
-        entrySet.add(new AbstractMap.SimpleEntry<>("Two", 2));
+        entrySet.add(new AbstractMap.SimpleEntry<>(TWO, 2));
 
         assertEquals(entrySet, lazySortedMap.entrySet());
     }
@@ -921,14 +934,14 @@
     @Test
     public void testLazySortedMapTransformer() {
         final SortedMap<String, Integer> lazySortedMap = MapUtils.lazySortedMap(new TreeMap<>(), s -> 1);
-        lazySortedMap.put("Two", 2);
+        lazySortedMap.put(TWO, 2);
 
-        assertEquals(Integer.valueOf(2), lazySortedMap.get("Two"));
+        assertEquals(Integer.valueOf(2), lazySortedMap.get(TWO));
         assertEquals(Integer.valueOf(1), lazySortedMap.get(THREE));
 
         final Set<Map.Entry<String, Integer>> entrySet = new HashSet<>();
         entrySet.add(new AbstractMap.SimpleEntry<>(THREE, 1));
-        entrySet.add(new AbstractMap.SimpleEntry<>("Two", 2));
+        entrySet.add(new AbstractMap.SimpleEntry<>(TWO, 2));
 
         assertEquals(entrySet, lazySortedMap.entrySet());
     }
@@ -1001,24 +1014,32 @@
         assertEquals(entrySet, transformedSortedMap.entrySet());
     }
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Test
     public void testUnmodifiableMap() {
-        MapUtils.unmodifiableMap(new HashMap<>()).clear();
+        Exception exception = assertThrows(UnsupportedOperationException.class, () -> {
+            MapUtils.unmodifiableMap(new HashMap<>()).clear();
+        });
     }
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Test
     public void testUnmodifiableSortedMap() {
-        MapUtils.unmodifiableSortedMap(new TreeMap<>()).clear();
+        Exception exception = assertThrows(UnsupportedOperationException.class, () -> {
+            MapUtils.unmodifiableSortedMap(new TreeMap<>()).clear();
+        });
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testFixedSizeMap() {
-        MapUtils.fixedSizeMap(new HashMap<>()).put(new Object(), new Object());
+        Exception exception = assertThrows(IllegalArgumentException.class, () -> {
+            MapUtils.fixedSizeMap(new HashMap<>()).put(new Object(), new Object());
+        });
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testFixedSizeSortedMap() {
-        MapUtils.fixedSizeSortedMap(new TreeMap<Long, Long>()).put(1L, 1L);
+        Exception exception = assertThrows(IllegalArgumentException.class, () -> {
+            MapUtils.fixedSizeSortedMap(new TreeMap<Long, Long>()).put(1L, 1L);
+        });
     }
 
     @Test
@@ -1030,7 +1051,7 @@
     }
 
     @Test
-    public void testgetDoubleValue() {
+    public void testGetDoubleValue() {
         final Map<String, Double> in = new HashMap<>();
         in.put("key", 2.0);
 
@@ -1058,7 +1079,7 @@
     }
 
     @Test
-    public void testgetFloatValue() {
+    public void testGetFloatValue() {
         final Map<String, Float> in = new HashMap<>();
         in.put("key", 2.0f);
 
@@ -1083,7 +1104,7 @@
     }
 
     @Test
-    public void testgetLongValue() {
+    public void testGetLongValue() {
         final Map<String, Long> in = new HashMap<>();
         in.put("key", 2L);
 
@@ -1110,7 +1131,7 @@
     }
 
     @Test
-    public void testgetIntValue() {
+    public void testGetIntValue() {
         final Map<String, Integer> in = new HashMap<>();
         in.put("key", 2);
 
@@ -1134,7 +1155,7 @@
     }
 
     @Test
-    public void testgetShortValue() {
+    public void testGetShortValue() {
         final Map<String, Short> in = new HashMap<>();
         final short val = 10;
         in.put("key", val);
@@ -1159,7 +1180,7 @@
     }
 
     @Test
-    public void testgetByteValue() {
+    public void testGetByteValue() {
         final Map<String, Byte> in = new HashMap<>();
         final byte val = 100;
         in.put("key", val);
@@ -1185,7 +1206,7 @@
     }
 
     @Test
-    public void testgetNumber() {
+    public void testGetNumber() {
         final Map<String, Number> in = new HashMap<>();
         final Number val = 1000;
         in.put("key", val);
@@ -1203,7 +1224,7 @@
     }
 
     @Test
-    public void testgetString() {
+    public void testGetString() {
         final Map<String, String> in = new HashMap<>();
         in.put("key", "str");
 
@@ -1219,11 +1240,10 @@
             }
         }));
         assertEquals("default", MapUtils.getString(null, "noKey", "default"));
-
     }
 
     @Test
-    public void testgetObject() {
+    public void testGetObject() {
         final Map<String, Object> in = new HashMap<>();
         in.put("key", "str");
 
@@ -1235,7 +1255,7 @@
     }
 
     @Test
-    public void testgetBooleanValue() {
+    public void testGetBooleanValue() {
         final Map<String, Object> in = new HashMap<>();
         in.put("key", true);
         in.put("keyNumberTrue", 1);
@@ -1283,7 +1303,7 @@
     }
 
     @Test
-    public void testgetMap() {
+    public void testGetMap() {
         final Map<String, Map<String, String>> in = new HashMap<>();
         final Map<String, String> valMap = new HashMap<>();
         valMap.put("key1", "value1");
@@ -1313,7 +1333,7 @@
         inMap.put("key1", "value1");
         inMap.put("key2", "value2");
         final Map<String, String> map = MapUtils.orderedMap(inMap);
-        assertTrue("returned object should be a OrderedMap", map instanceof OrderedMap);
+        assertTrue(map instanceof OrderedMap);
     }
 
     private char getDecimalSeparator() {