mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-07 09:45:04 +08:00
fix: handle Null Dereference in UnitsConverter
(#5460)
This commit is contained in:
@ -2,7 +2,6 @@
|
|||||||
"report-block-list-path-regex": [
|
"report-block-list-path-regex": [
|
||||||
"src/main/java/com/thealgorithms/ciphers/a5/CompositeLFSR.java",
|
"src/main/java/com/thealgorithms/ciphers/a5/CompositeLFSR.java",
|
||||||
"src/main/java/com/thealgorithms/conversions/RomanToInteger.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/GCounter.java",
|
||||||
"src/main/java/com/thealgorithms/datastructures/crdt/PNCounter.java",
|
"src/main/java/com/thealgorithms/datastructures/crdt/PNCounter.java",
|
||||||
"src/main/java/com/thealgorithms/datastructures/graphs/KahnsAlgorithm.java",
|
"src/main/java/com/thealgorithms/datastructures/graphs/KahnsAlgorithm.java",
|
||||||
|
@ -3,6 +3,7 @@ package com.thealgorithms.conversions;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
@ -77,7 +78,7 @@ public final class UnitsConverter {
|
|||||||
throw new IllegalArgumentException("inputUnit must be different from outputUnit.");
|
throw new IllegalArgumentException("inputUnit must be different from outputUnit.");
|
||||||
}
|
}
|
||||||
final var conversionKey = Pair.of(inputUnit, 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<String> availableUnits() {
|
public Set<String> availableUnits() {
|
||||||
|
@ -4,6 +4,7 @@ import static java.util.Map.entry;
|
|||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
@ -15,4 +16,12 @@ public class UnitsConverterTest {
|
|||||||
assertThrows(IllegalArgumentException.class, () -> someConverter.convert("A", "A", 20.0));
|
assertThrows(IllegalArgumentException.class, () -> someConverter.convert("A", "A", 20.0));
|
||||||
assertThrows(IllegalArgumentException.class, () -> someConverter.convert("B", "B", 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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user