summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrien Hopkins <adrien.p.hopkins@gmail.com>2025-03-21 15:26:01 -0500
committerAdrien Hopkins <adrien.p.hopkins@gmail.com>2025-03-21 15:26:01 -0500
commit99ef729b27377b440b15757b789101c7ed87aec1 (patch)
treef6b40a8da5c07fbabbd2230b0df10f8d856d4596
parentbf24568419073c15143b5f59d131751dc73505b3 (diff)
Add tests for NameSymbol
-rw-r--r--src/main/java/sevenUnits/utils/NameSymbol.java12
-rw-r--r--src/test/java/sevenUnits/utils/NameSymbolTest.java73
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()");
+ }
+}