diff --git a/core-java/pom.xml b/core-java/pom.xml index 5766224b3a..3406bddda9 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -358,7 +358,7 @@ 1.1.7 - 19.0 + 21.0 3.5 1.55 1.10 diff --git a/core-java/src/test/java/com/baeldung/guava/GuavaBiMapTest.java b/core-java/src/test/java/com/baeldung/guava/GuavaBiMapTest.java new file mode 100644 index 0000000000..c04cfb14fb --- /dev/null +++ b/core-java/src/test/java/com/baeldung/guava/GuavaBiMapTest.java @@ -0,0 +1,122 @@ +package com.baeldung.guava; + +import static org.junit.Assert.*; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; +import com.google.common.collect.BiMap; +import com.google.common.collect.EnumHashBiMap; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.ImmutableBiMap; + +public class GuavaBiMapTest { + @Test + public void whenQueryByValue_shouldReturnKey() { + final BiMap personCountryHeadBiMap = HashBiMap.create(); + personCountryHeadBiMap.put("Modi", "India"); + personCountryHeadBiMap.put("Obama", "USA"); + personCountryHeadBiMap.put("Putin", "USSR"); + + final String countryHeadName = personCountryHeadBiMap.inverse().get("India"); + + assertEquals("Modi", countryHeadName); + } + + @Test + public void whenCreateBiMapFromExistingMap_shouldReturnKey() { + final Map personCountryHeadMap = new HashMap<>(); + personCountryHeadMap.put("Modi", "India"); + personCountryHeadMap.put("Obama", "USA"); + personCountryHeadMap.put("Putin", "USSR"); + final BiMap personCountryHeadBiMap = HashBiMap.create(personCountryHeadMap); + + final String countryHeadName = personCountryHeadBiMap.inverse().get("India"); + + assertEquals("Modi", countryHeadName); + } + + @Test + public void whenQueryByKey_shouldReturnValue() { + final BiMap personCountryHeadBiMap = HashBiMap.create(); + + personCountryHeadBiMap.put("Modi", "India"); + personCountryHeadBiMap.put("Obama", "USA"); + personCountryHeadBiMap.put("Putin", "USSR"); + + assertEquals("USA", personCountryHeadBiMap.get("Obama")); + } + + @Test(expected = IllegalArgumentException.class) + public void whenSameValueIsBeingPresent_shouldThrowException() { + final BiMap personCountryHeadBiMap = HashBiMap.create(); + + personCountryHeadBiMap.put("Modi", "India"); + personCountryHeadBiMap.put("Obama", "USA"); + personCountryHeadBiMap.put("Putin", "USSR"); + personCountryHeadBiMap.put("Trump", "USA"); + } + + @Test + public void givenSameValueIsBeingPresent_whenForcePutIsUsed_shouldCompleteSuccessfully() { + final BiMap personCountryHeadBiMap = HashBiMap.create(); + + personCountryHeadBiMap.put("Modi", "India"); + personCountryHeadBiMap.put("Obama", "USA"); + personCountryHeadBiMap.put("Putin", "USSR"); + personCountryHeadBiMap.forcePut("Trump", "USA"); + + assertEquals("USA", personCountryHeadBiMap.get("Trump")); + assertEquals("Trump", personCountryHeadBiMap.inverse().get("USA")); + } + + @Test + public void whenSameKeyIsBeingPresent_shouldReplaceAlreadyPresent() { + final BiMap personCountryHeadBiMap = HashBiMap.create(); + + personCountryHeadBiMap.put("Modi", "India"); + personCountryHeadBiMap.put("Obama", "USA"); + personCountryHeadBiMap.put("Putin", "USSR"); + personCountryHeadBiMap.put("Obama", "HongKong"); + + assertEquals("HongKong", personCountryHeadBiMap.get("Obama")); + } + + @Test + public void whenUsingImmutableBiMap_shouldAllowPutSuccessfully() { + final BiMap personCountryHeadBiMap = new ImmutableBiMap.Builder().put("Modi", "India").put("Obama", "USA").put("Putin", "USSR").build(); + + assertEquals("USA", personCountryHeadBiMap.get("Obama")); + } + + @Test(expected = UnsupportedOperationException.class) + public void whenUsingImmutableBiMap_shouldNotAllowRemove() { + final BiMap personCountryHeadBiMap = new ImmutableBiMap.Builder().put("Modi", "India").put("Obama", "USA").put("Putin", "USSR").build(); + + personCountryHeadBiMap.remove("Modi"); + } + + @Test(expected = UnsupportedOperationException.class) + public void whenUsingImmutableBiMap_shouldNotAllowPut() { + final BiMap personCountryHeadBiMap = new ImmutableBiMap.Builder().put("Modi", "India").put("Obama", "USA").put("Putin", "USSR").build(); + + personCountryHeadBiMap.put("Trump", "USA"); + } + + private enum Operation { + ADD, SUBTRACT, MULTIPLY, DIVIDE + } + + @Test + public void whenUsingEnumAsKeyInMap_shouldReplaceAlreadyPresent() { + final BiMap operationStringBiMap = EnumHashBiMap.create(Operation.class); + + operationStringBiMap.put(Operation.ADD, "Add"); + operationStringBiMap.put(Operation.SUBTRACT, "Subtract"); + operationStringBiMap.put(Operation.MULTIPLY, "Multiply"); + operationStringBiMap.put(Operation.DIVIDE, "Divide"); + + assertEquals("Divide", operationStringBiMap.get(Operation.DIVIDE)); + } +}