diff options
author | Adrien Hopkins <adrien.p.hopkins@gmail.com> | 2025-03-21 15:26:01 -0500 |
---|---|---|
committer | Adrien Hopkins <adrien.p.hopkins@gmail.com> | 2025-03-21 15:26:01 -0500 |
commit | 99ef729b27377b440b15757b789101c7ed87aec1 (patch) | |
tree | f6b40a8da5c07fbabbd2230b0df10f8d856d4596 | |
parent | bf24568419073c15143b5f59d131751dc73505b3 (diff) |
Add tests for NameSymbol
-rw-r--r-- | src/main/java/sevenUnits/utils/NameSymbol.java | 12 | ||||
-rw-r--r-- | src/test/java/sevenUnits/utils/NameSymbolTest.java | 73 |
2 files changed, 81 insertions, 4 deletions
diff --git a/src/main/java/sevenUnits/utils/NameSymbol.java b/src/main/java/sevenUnits/utils/NameSymbol.java index 49c44fa..290dcd6 100644 --- a/src/main/java/sevenUnits/utils/NameSymbol.java +++ b/src/main/java/sevenUnits/utils/NameSymbol.java @@ -196,14 +196,18 @@ public final class NameSymbol { * of the argument * @since 2019-10-21 */ - private NameSymbol(final Optional<String> primaryName, + NameSymbol(final Optional<String> primaryName, final Optional<String> symbol, final Set<String> otherNames) { this.primaryName = primaryName; this.symbol = symbol; - otherNames.remove(null); - this.otherNames = Collections.unmodifiableSet(otherNames); + if (otherNames != null) { + otherNames.remove(null); + this.otherNames = Collections.unmodifiableSet(otherNames); + } else { + this.otherNames = Set.of(); + } - if (this.primaryName.isEmpty()) { + if (this.primaryName == null || this.primaryName.isEmpty()) { assert this.otherNames.isEmpty(); } } diff --git a/src/test/java/sevenUnits/utils/NameSymbolTest.java b/src/test/java/sevenUnits/utils/NameSymbolTest.java new file mode 100644 index 0000000..327cd9f --- /dev/null +++ b/src/test/java/sevenUnits/utils/NameSymbolTest.java @@ -0,0 +1,73 @@ +package sevenUnits.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class NameSymbolTest { + private static Stream<Arguments> testEqualsHashCode() { + return Stream.of( + Arguments.of(NameSymbol.ofName("test"), NameSymbol.ofName("test"), true), + Arguments.of(NameSymbol.ofName("a"), NameSymbol.ofName("b"), false), + Arguments.of(NameSymbol.ofSymbol("test"), NameSymbol.ofSymbol("test"), true), + Arguments.of(NameSymbol.ofSymbol("a"), NameSymbol.ofSymbol("b"), false), + Arguments.of(NameSymbol.ofName("test"), NameSymbol.ofSymbol("test"), false), + Arguments.of(NameSymbol.of("main", "s"), NameSymbol.of("main", "s"), true), + Arguments.of(NameSymbol.of("main", "s"), NameSymbol.of("main", "s", "m"), false), + Arguments.of(new NameSymbol(null, null, new HashSet<>()), + new NameSymbol(null, null, new HashSet<>()), true), + Arguments.of(new NameSymbol( + Optional.of("main"), Optional.of("s"), new HashSet<>()), + new NameSymbol(null, null, new HashSet<>()), false), + Arguments.of(new NameSymbol(null, null, new HashSet<>()), + new NameSymbol(Optional.of("main"), Optional.of("s"), + new HashSet<>()), false), + Arguments.of(new NameSymbol(Optional.of("main"), null, new HashSet<>()), + new NameSymbol(Optional.of("main"), Optional.of("s"), + new HashSet<>()), false)); + } + + /** + * Tests that two NameSymbols are or are not equal. + * If they are equal, also ensures they have the same hash code. + * @param a first NameSymbol to test + * @param b second NameSymbol to test + * @param equal true iff a should be equal to be, otherwise false + */ + @ParameterizedTest + @MethodSource + public void testEqualsHashCode(NameSymbol a, NameSymbol b, boolean equal) { + if (equal) { + assertTrue(Objects.equals(a, b)); + assertEquals(a.hashCode(), b.hashCode(), + "Equal NameSymbol instances have different hash codes."); + } else { + assertFalse(Objects.equals(a, b)); + } + } + + @Test + public void testCreate() { + Set<String> names = Set.of("a", "b", "c"); + NameSymbol ns = NameSymbol.ofNullable(null, null, names); + assertTrue(ns.getPrimaryName().isPresent(), "NameSymbol created without primary name."); + assertTrue(names.contains(ns.getPrimaryName().orElseThrow()), + String.format("Primary name (%s) was not obtained from names set.", + ns.getPrimaryName())); + assertFalse(ns.getOtherNames().contains(ns.getPrimaryName().orElseThrow()), + String.format("Primary name (%s) was included in other names set.", + ns.getPrimaryName())); + assertEquals(Set.of("a", "b", "c"), names, "names input was changed by ofNullable()"); + } +} |