From dfd3606a35da8ea0ebd49900f7034fb1aff3b9bb Mon Sep 17 00:00:00 2001 From: Fulminazzo Date: Fri, 19 Apr 2024 15:39:24 +0200 Subject: [PATCH 1/6] Removed unnecessary println statements --- .../java/it/angrybear/yagl/listeners/PersistentListenerTest.java | 1 - .../src/test/java/it/angrybear/yagl/wrappers/WrapperTest.java | 1 - 2 files changed, 2 deletions(-) diff --git a/item/bukkit/src/test/java/it/angrybear/yagl/listeners/PersistentListenerTest.java b/item/bukkit/src/test/java/it/angrybear/yagl/listeners/PersistentListenerTest.java index 2c7098c4f..dba511d54 100644 --- a/item/bukkit/src/test/java/it/angrybear/yagl/listeners/PersistentListenerTest.java +++ b/item/bukkit/src/test/java/it/angrybear/yagl/listeners/PersistentListenerTest.java @@ -97,7 +97,6 @@ void simulateInventoryClick(InventoryClickEvent event) { assertFalse(this.clicked, "Clicked should be initialized as false"); assertFalse(event.isCancelled(), "Event should not be cancelled"); listener.on(event); - System.out.println("cancelled ? " + event.isCancelled()); assertTrue(event.isCancelled(), "Event should have been cancelled by now"); assertTrue(this.clicked, "Clicked should have changed"); } diff --git a/wrappers/base/src/test/java/it/angrybear/yagl/wrappers/WrapperTest.java b/wrappers/base/src/test/java/it/angrybear/yagl/wrappers/WrapperTest.java index 07d4b6406..05117d923 100644 --- a/wrappers/base/src/test/java/it/angrybear/yagl/wrappers/WrapperTest.java +++ b/wrappers/base/src/test/java/it/angrybear/yagl/wrappers/WrapperTest.java @@ -54,7 +54,6 @@ void testSettersRanges(ConsumerException consumer, Integer min, Int final String message = e.getMessage(); assertNotNull(message, "Error message should have not been null"); - System.out.println(message); if (min != null) { assertTrue(message.contains(String.valueOf(min)), "Error message should contain min value"); From 840ea700714a9a7d57a4add36f10af94ae55f2b6 Mon Sep 17 00:00:00 2001 From: Fulminazzo Date: Fri, 19 Apr 2024 15:41:34 +0200 Subject: [PATCH 2/6] Added tests for stripped print --- .../java/it/angrybear/yagl/items/ItemImplTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java b/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java index 8f0feae1e..1e797fd3c 100644 --- a/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java +++ b/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java @@ -4,6 +4,8 @@ import it.angrybear.yagl.items.fields.ItemFlag; import org.junit.jupiter.api.Test; +import java.util.Arrays; + import static org.junit.jupiter.api.Assertions.*; class ItemImplTest { @@ -48,4 +50,14 @@ void testPrint() { .addEnchantments("enchant1", "enchant2") .addItemFlags(ItemFlag.HIDE_ATTRIBUTES)::toString); } + + @Test + void testStrippedPrint() { + String output = new ItemImpl() + .setMaterial("stone") + .setAmount(2).toString(); + for (String s : Arrays.asList("durability", "displayName", "lore", "enchantments", "itemFlags", "unbreakable", "customModelData")) + assertFalse(output.contains(s), String.format("'%s' should not contain %s", output, s)); + } + } \ No newline at end of file From d47fd6065e86d070a96216a4f4e6a1a1eaa6cc4e Mon Sep 17 00:00:00 2001 From: Fulminazzo Date: Fri, 19 Apr 2024 15:47:54 +0200 Subject: [PATCH 3/6] Updated tests for print method --- .../java/it/angrybear/yagl/items/ItemImplTest.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java b/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java index 1e797fd3c..20612f9b7 100644 --- a/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java +++ b/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java @@ -2,9 +2,11 @@ import it.angrybear.yagl.items.fields.ItemField; import it.angrybear.yagl.items.fields.ItemFlag; +import it.fulminazzo.fulmicollection.objects.Printable; import org.junit.jupiter.api.Test; import java.util.Arrays; +import java.util.PrimitiveIterator; import static org.junit.jupiter.api.Assertions.*; @@ -43,12 +45,19 @@ void testSimilarity() { @Test void testPrint() { - assertDoesNotThrow(new ItemImpl() + Item item = new ItemImpl() .setMaterial("material") .setAmount(2) + .setDurability(4) + .setDisplayName("Hello world") .addLore("lore") + .setCustomModelData(2) .addEnchantments("enchant1", "enchant2") - .addItemFlags(ItemFlag.HIDE_ATTRIBUTES)::toString); + .addItemFlags(ItemFlag.HIDE_ATTRIBUTES) + .setUnbreakable(true); + String output = item.toString(); + String expected = Printable.convertToJson(item); + assertEquals(expected, output); } @Test From 8f53599cd24633f460301ffc213fb68dfe8be764 Mon Sep 17 00:00:00 2001 From: Fulminazzo Date: Fri, 19 Apr 2024 15:54:59 +0200 Subject: [PATCH 4/6] Fixed stripped print test --- .../src/test/java/it/angrybear/yagl/items/ItemImplTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java b/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java index 20612f9b7..70947e39e 100644 --- a/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java +++ b/item/base/src/test/java/it/angrybear/yagl/items/ItemImplTest.java @@ -6,7 +6,6 @@ import org.junit.jupiter.api.Test; import java.util.Arrays; -import java.util.PrimitiveIterator; import static org.junit.jupiter.api.Assertions.*; @@ -65,7 +64,7 @@ void testStrippedPrint() { String output = new ItemImpl() .setMaterial("stone") .setAmount(2).toString(); - for (String s : Arrays.asList("durability", "displayName", "lore", "enchantments", "itemFlags", "unbreakable", "customModelData")) + for (String s : Arrays.asList("durability", "displayName", "lore", "enchantments", "itemFlags", "customModelData")) assertFalse(output.contains(s), String.format("'%s' should not contain %s", output, s)); } From 49f5ab6c041707fa9aaeb72dbf8fd1028a2cc395 Mon Sep 17 00:00:00 2001 From: Fulminazzo Date: Fri, 19 Apr 2024 16:00:32 +0200 Subject: [PATCH 5/6] Created ObjectUtils with printAsJSON method --- .../it/angrybear/yagl/utils/ObjectUtils.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 common/base/src/main/java/it/angrybear/yagl/utils/ObjectUtils.java diff --git a/common/base/src/main/java/it/angrybear/yagl/utils/ObjectUtils.java b/common/base/src/main/java/it/angrybear/yagl/utils/ObjectUtils.java new file mode 100644 index 000000000..4c71e5e4a --- /dev/null +++ b/common/base/src/main/java/it/angrybear/yagl/utils/ObjectUtils.java @@ -0,0 +1,65 @@ +package it.angrybear.yagl.utils; + +import it.fulminazzo.fulmicollection.objects.Refl; +import it.fulminazzo.fulmicollection.structures.Tuple; +import it.fulminazzo.fulmicollection.utils.ReflectionUtils; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Field; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * The type Object utils. + */ +public class ObjectUtils { + private static final String EMPTY_IDENTIFIER = ""; + + /** + * Prints the given object in a JSON format. + * If the object (or an object contained in it) is "empty", + * it will be printed as {@link #EMPTY_IDENTIFIER}. + * + * @param object the object + * @return the output + */ + public static String printAsJSON(@Nullable Object object) { + if (object == null) return EMPTY_IDENTIFIER; + else if (object instanceof Enum) return ((Enum) object).name(); + else if (object instanceof String) { + String s = object.toString(); + if (s.isEmpty()) return EMPTY_IDENTIFIER; + else return String.format("\"%s\"", s); + } else if (object instanceof Number) { + Number n = (Number) object; + if (n.doubleValue() > 0) return n.toString(); + else return EMPTY_IDENTIFIER; + } else if (ReflectionUtils.isPrimitiveOrWrapper(object.getClass())) return object.toString(); + else if (object instanceof Collection) { + Collection collection = (Collection) object; + String output = collection.stream().map(ObjectUtils::printAsJSON).collect(Collectors.joining(", ")); + if (output.matches("(, )*")) return EMPTY_IDENTIFIER; + else return String.format("[%s]", output); + } else if (!(object instanceof Map)) { + Map map = new LinkedHashMap<>(); + Refl refl = new Refl<>(object); + for (final Field field : refl.getNonStaticFields()) { + Object obj = refl.getFieldObject(field); + map.put(field.getName(), obj); + } + object = map; + } + Map map = (Map) object; + StringBuilder output = new StringBuilder(); + map.entrySet().stream() + .map(e -> new Tuple<>(printAsJSON(e.getKey()), printAsJSON(e.getValue()))) + .filter(t -> !t.getKey().equals(EMPTY_IDENTIFIER) && !t.getValue().equals(EMPTY_IDENTIFIER)) + .forEach(t -> output.append(t.getKey()).append(": ").append(t.getValue()).append(", ")); + String result = output.toString(); + if (result.matches("(: , )*")) return EMPTY_IDENTIFIER; + else return String.format("{%s}", result.substring(0, result.length() - 2)); + } + +} From e45408b36bef733b3ea8ba628ec3f665643af824 Mon Sep 17 00:00:00 2001 From: Fulminazzo Date: Fri, 19 Apr 2024 16:00:44 +0200 Subject: [PATCH 6/6] Reworked toString method to use ObjectUtils --- item/base/src/main/java/it/angrybear/yagl/items/ItemImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/item/base/src/main/java/it/angrybear/yagl/items/ItemImpl.java b/item/base/src/main/java/it/angrybear/yagl/items/ItemImpl.java index 9a256eb5f..a50832f40 100644 --- a/item/base/src/main/java/it/angrybear/yagl/items/ItemImpl.java +++ b/item/base/src/main/java/it/angrybear/yagl/items/ItemImpl.java @@ -4,9 +4,9 @@ import it.angrybear.yagl.items.fields.ItemFlag; import it.angrybear.yagl.structures.EnchantmentSet; import it.angrybear.yagl.utils.MessageUtils; +import it.angrybear.yagl.utils.ObjectUtils; import it.angrybear.yagl.wrappers.Enchantment; import it.fulminazzo.fulmicollection.objects.FieldEquable; -import it.fulminazzo.fulmicollection.objects.Printable; import it.fulminazzo.fulmicollection.utils.ReflectionUtils; import lombok.Getter; import org.jetbrains.annotations.NotNull; @@ -118,6 +118,6 @@ protected Class clazz() { @Override public @NotNull String toString() { - return Printable.convertToJson(this); + return ObjectUtils.printAsJSON(this); } }