From 8cf21f7d66e264471eb8f94c8202e8aa9fcb7db1 Mon Sep 17 00:00:00 2001 From: vil02 <65706193+vil02@users.noreply.github.com> Date: Sun, 22 Sep 2024 10:34:27 +0200 Subject: [PATCH] fix: handle Null Dereference in `UnitsConverter` --- .inferconfig | 1 - .../com/thealgorithms/conversions/UnitsConverter.java | 3 ++- .../thealgorithms/conversions/UnitsConverterTest.java | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.inferconfig b/.inferconfig index 96c34a54a0d8..93bd1c355493 100644 --- a/.inferconfig +++ b/.inferconfig @@ -2,7 +2,6 @@ "report-block-list-path-regex": [ "src/main/java/com/thealgorithms/ciphers/a5/CompositeLFSR.java", "src/main/java/com/thealgorithms/conversions/RomanToInteger.java", - "src/main/java/com/thealgorithms/conversions/UnitsConverter.java", "src/main/java/com/thealgorithms/datastructures/crdt/GCounter.java", "src/main/java/com/thealgorithms/datastructures/crdt/PNCounter.java", "src/main/java/com/thealgorithms/datastructures/graphs/KahnsAlgorithm.java", diff --git a/src/main/java/com/thealgorithms/conversions/UnitsConverter.java b/src/main/java/com/thealgorithms/conversions/UnitsConverter.java index a19d40285047..81c4d4562070 100644 --- a/src/main/java/com/thealgorithms/conversions/UnitsConverter.java +++ b/src/main/java/com/thealgorithms/conversions/UnitsConverter.java @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.NoSuchElementException; import java.util.Set; import org.apache.commons.lang3.tuple.Pair; @@ -77,7 +78,7 @@ public double convert(final String inputUnit, final String outputUnit, final dou throw new IllegalArgumentException("inputUnit must be different from outputUnit."); } final var conversionKey = Pair.of(inputUnit, outputUnit); - return conversions.get(conversionKey).convert(value); + return conversions.computeIfAbsent(conversionKey, k -> { throw new NoSuchElementException("No converter for: " + k); }).convert(value); } public Set availableUnits() { diff --git a/src/test/java/com/thealgorithms/conversions/UnitsConverterTest.java b/src/test/java/com/thealgorithms/conversions/UnitsConverterTest.java index 76e48f144fd6..580a66bc01ec 100644 --- a/src/test/java/com/thealgorithms/conversions/UnitsConverterTest.java +++ b/src/test/java/com/thealgorithms/conversions/UnitsConverterTest.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.Map; +import java.util.NoSuchElementException; import org.apache.commons.lang3.tuple.Pair; import org.junit.jupiter.api.Test; @@ -15,4 +16,12 @@ void testConvertThrowsForSameUnits() { assertThrows(IllegalArgumentException.class, () -> someConverter.convert("A", "A", 20.0)); assertThrows(IllegalArgumentException.class, () -> someConverter.convert("B", "B", 20.0)); } + + @Test + void testConvertThrowsForUnknownUnits() { + final UnitsConverter someConverter = new UnitsConverter(Map.ofEntries(entry(Pair.of("A", "B"), new AffineConverter(10.0, -20.0)))); + assertThrows(NoSuchElementException.class, () -> someConverter.convert("A", "X", 20.0)); + assertThrows(NoSuchElementException.class, () -> someConverter.convert("X", "A", 20.0)); + assertThrows(NoSuchElementException.class, () -> someConverter.convert("X", "Y", 20.0)); + } }