From af42c84512750c7c3f06168503d3f06c09eef62c Mon Sep 17 00:00:00 2001 From: KingSimon <19822231+KingOfSquares@users.noreply.github.com> Date: Wed, 3 Nov 2021 19:30:49 +0100 Subject: [PATCH 1/4] Add Tristate method to TextDecoration.State --- .../kyori/adventure/text/format/TextDecoration.java | 12 ++++++++++++ .../adventure/text/format/TextDecorationTest.java | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java index 915629f44..412d80e4c 100644 --- a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java +++ b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java @@ -25,6 +25,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.util.Index; +import net.kyori.adventure.util.TriState; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -166,5 +167,16 @@ public String toString() { public static @NotNull State byBoolean(final @Nullable Boolean flag) { return flag == null ? NOT_SET : byBoolean(flag.booleanValue()); } + + /** + * Gets a state from a {@link net.kyori.adventure.util.TriState}. + * + * @param flag the tristate + * @return the state + * @since 4.10.0 + */ + public static @NotNull State byTriState(final @NotNull TriState flag) { + return byBoolean(flag.toBoolean()); + } } } diff --git a/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java b/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java index 490d58bdc..bd3d17797 100644 --- a/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java +++ b/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java @@ -23,6 +23,7 @@ */ package net.kyori.adventure.text.format; +import net.kyori.adventure.util.TriState; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -34,4 +35,11 @@ void testByBoolean() { assertEquals(TextDecoration.State.FALSE, TextDecoration.State.byBoolean(false)); assertEquals(TextDecoration.State.TRUE, TextDecoration.State.byBoolean(true)); } + + @Test + void testByTristate() { + assertEquals(TextDecoration.State.NOT_SET, TextDecoration.State.byTriState(TriState.NOT_SET)); + assertEquals(TextDecoration.State.FALSE, TextDecoration.State.byTriState(TriState.FALSE)); + assertEquals(TextDecoration.State.TRUE, TextDecoration.State.byTriState(TriState.TRUE)); + } } From 295137d583b6dd558815286656a3b3c6a2cfd9c5 Mon Sep 17 00:00:00 2001 From: KingSimon <19822231+KingOfSquares@users.noreply.github.com> Date: Wed, 3 Nov 2021 19:51:53 +0100 Subject: [PATCH 2/4] Properly enforce non-nullability --- .../java/net/kyori/adventure/text/format/TextDecoration.java | 3 +++ .../net/kyori/adventure/text/format/TextDecorationTest.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java index 412d80e4c..d2dcf84f0 100644 --- a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java +++ b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java @@ -29,6 +29,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import static java.util.Objects.requireNonNull; + /** * An enumeration of decorations which may be applied to a {@link Component}. * @@ -176,6 +178,7 @@ public String toString() { * @since 4.10.0 */ public static @NotNull State byTriState(final @NotNull TriState flag) { + requireNonNull(flag); return byBoolean(flag.toBoolean()); } } diff --git a/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java b/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java index bd3d17797..dbb75e606 100644 --- a/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java +++ b/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java @@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; class TextDecorationTest { @Test @@ -41,5 +42,7 @@ void testByTristate() { assertEquals(TextDecoration.State.NOT_SET, TextDecoration.State.byTriState(TriState.NOT_SET)); assertEquals(TextDecoration.State.FALSE, TextDecoration.State.byTriState(TriState.FALSE)); assertEquals(TextDecoration.State.TRUE, TextDecoration.State.byTriState(TriState.TRUE)); + + assertThrows(NullPointerException.class, () -> TextDecoration.State.byTriState(null)); } } From f386ea460a6c64c73a88149a2ba8d42757e9fc67 Mon Sep 17 00:00:00 2001 From: KingSimon <19822231+KingOfSquares@users.noreply.github.com> Date: Wed, 3 Nov 2021 23:55:32 +0100 Subject: [PATCH 3/4] Use switch --- .../net/kyori/adventure/text/format/TextDecoration.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java index d2dcf84f0..e5a7b830b 100644 --- a/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java +++ b/api/src/main/java/net/kyori/adventure/text/format/TextDecoration.java @@ -179,7 +179,12 @@ public String toString() { */ public static @NotNull State byTriState(final @NotNull TriState flag) { requireNonNull(flag); - return byBoolean(flag.toBoolean()); + switch (flag) { + case TRUE: return TRUE; + case FALSE: return FALSE; + case NOT_SET: return NOT_SET; + } + throw new IllegalArgumentException("Unable to turn TriState: " + flag + " into a TextDecoration.State"); } } } From 456c9c884d9831b505e6e00bc64fbac458295166 Mon Sep 17 00:00:00 2001 From: KingSimon <19822231+KingOfSquares@users.noreply.github.com> Date: Tue, 9 Nov 2021 00:30:16 +0100 Subject: [PATCH 4/4] Increase test coverage --- .../net/kyori/adventure/text/format/TextDecorationTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java b/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java index dbb75e606..3eabdb3d4 100644 --- a/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java +++ b/api/src/test/java/net/kyori/adventure/text/format/TextDecorationTest.java @@ -23,9 +23,11 @@ */ package net.kyori.adventure.text.format; +import java.util.Arrays; import net.kyori.adventure.util.TriState; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -44,5 +46,6 @@ void testByTristate() { assertEquals(TextDecoration.State.TRUE, TextDecoration.State.byTriState(TriState.TRUE)); assertThrows(NullPointerException.class, () -> TextDecoration.State.byTriState(null)); + assertDoesNotThrow(() -> Arrays.stream(TriState.values()).forEach(TextDecoration.State::byTriState)); } }