Skip to content

Commit 536b9b4

Browse files
committed
fix some more tests
1 parent 704cc38 commit 536b9b4

File tree

3 files changed

+33
-21
lines changed

3 files changed

+33
-21
lines changed

paper-server/src/main/java/org/bukkit/craftbukkit/util/CraftNBTTagConfigSerializer.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.bukkit.craftbukkit.util;
22

3+
import com.mojang.brigadier.StringReader;
34
import com.mojang.brigadier.exceptions.CommandSyntaxException;
45
import java.util.List;
56
import java.util.Map;
@@ -60,12 +61,10 @@ private static Tag internalLegacyDeserialization(@NotNull final Object object) {
6061
}
6162

6263
return tagList;
63-
} else if (object instanceof String) {
64-
String string = (String) object;
65-
64+
} else if (object instanceof final String string) {
6665
if (CraftNBTTagConfigSerializer.ARRAY.matcher(string).matches()) {
6766
try {
68-
return MOJANGSON_PARSER.parseFully(string);
67+
return MOJANGSON_PARSER.parseAsArgument(new StringReader(string));
6968
} catch (CommandSyntaxException e) {
7069
throw new RuntimeException("Could not deserialize found list ", e);
7170
}
@@ -75,12 +74,14 @@ private static Tag internalLegacyDeserialization(@NotNull final Object object) {
7574
return DoubleTag.valueOf(Double.parseDouble(string.substring(0, string.length() - 1)));
7675
} else {
7776
try {
78-
Tag tag = CraftNBTTagConfigSerializer.MOJANGSON_PARSER.parseFully(string);
77+
Tag tag = CraftNBTTagConfigSerializer.MOJANGSON_PARSER.parseAsArgument(new StringReader(string));
7978

8079
if (tag instanceof IntTag) { // If this returns an integer, it did not use our method from above
8180
return StringTag.valueOf(tag.toString()); // It then is a string that was falsely read as an int
8281
} else if (tag instanceof DoubleTag) {
8382
return StringTag.valueOf(String.valueOf(((DoubleTag) tag).doubleValue())); // Doubles add "d" at the end
83+
} else if (tag instanceof StringTag) {
84+
return StringTag.valueOf(string); // Return the whole string
8485
} else {
8586
return tag;
8687
}

paper-server/src/test/java/io/papermc/paper/adventure/AdventureCodecsTest.java

+25-14
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import com.mojang.serialization.JavaOps;
88
import com.mojang.serialization.JsonOps;
99
import io.papermc.paper.util.MethodParameterSource;
10-
import java.io.IOException;
1110
import java.lang.annotation.ElementType;
1211
import java.lang.annotation.Retention;
1312
import java.lang.annotation.RetentionPolicy;
@@ -109,37 +108,49 @@ void testKey() {
109108
@ParameterizedTest(name = PARAMETERIZED_NAME)
110109
@EnumSource(value = ClickEvent.Action.class, mode = EnumSource.Mode.EXCLUDE, names = {"OPEN_FILE"})
111110
void testClickEvent(final ClickEvent.Action action) {
112-
final ClickEvent event = ClickEvent.clickEvent(action, "1337");
111+
final ClickEvent event = ClickEvent.clickEvent(action, action.name().equals("OPEN_URL") ? "https://google.com" : "1337");
113112
final Tag result = CLICK_EVENT_CODEC.encodeStart(NbtOps.INSTANCE, event).result().orElseThrow();
114113
final net.minecraft.network.chat.ClickEvent nms = net.minecraft.network.chat.ClickEvent.CODEC.decode(NbtOps.INSTANCE, result).result().orElseThrow().getFirst();
115114
assertEquals(event.action().toString(), nms.action().getSerializedName());
116-
assertEquals(event.value(), nms.getValue());
115+
switch (nms) {
116+
case net.minecraft.network.chat.ClickEvent.OpenUrl(java.net.URI uri) ->
117+
assertEquals(event.value(), uri.toString());
118+
case net.minecraft.network.chat.ClickEvent.SuggestCommand(String command) ->
119+
assertEquals(event.value(), command);
120+
case net.minecraft.network.chat.ClickEvent.RunCommand(String command) ->
121+
assertEquals(event.value(), command);
122+
case net.minecraft.network.chat.ClickEvent.CopyToClipboard(String value) ->
123+
assertEquals(event.value(), value);
124+
case net.minecraft.network.chat.ClickEvent.ChangePage(int page) ->
125+
assertEquals(event.value(), String.valueOf(page));
126+
default -> throw new AssertionError("Unexpected ClickEvent type: " + nms.getClass());
127+
}
117128
}
118129

119130
@Test
120131
void testShowTextHoverEvent() {
121132
final HoverEvent<Component> hoverEvent = HoverEvent.hoverEvent(HoverEvent.Action.SHOW_TEXT, text("hello"));
122133
final Tag result = HOVER_EVENT_CODEC.encodeStart(NbtOps.INSTANCE, hoverEvent).result().orElseThrow();
123-
final net.minecraft.network.chat.HoverEvent nms = net.minecraft.network.chat.HoverEvent.CODEC.decode(NbtOps.INSTANCE, result).result().orElseThrow().getFirst();
134+
final net.minecraft.network.chat.HoverEvent.ShowText nms = (net.minecraft.network.chat.HoverEvent.ShowText) net.minecraft.network.chat.HoverEvent.CODEC.decode(NbtOps.INSTANCE, result).result().orElseThrow().getFirst();
124135
assertEquals(hoverEvent.action().toString(), nms.action().getSerializedName());
125-
assertNotNull(nms.getValue(net.minecraft.network.chat.HoverEvent.Action.SHOW_TEXT));
136+
assertEquals("hello", nms.value().getString());
126137
}
127138

128139
@Test
129-
void testShowItemHoverEvent() throws IOException {
140+
void testShowItemHoverEvent() {
130141
final ItemStack stack = new ItemStack(Items.PUMPKIN, 3);
131142
stack.set(DataComponents.CUSTOM_NAME, net.minecraft.network.chat.Component.literal("NAME"));
132143
final HoverEvent<HoverEvent.ShowItem> hoverEvent = HoverEvent.showItem(key("minecraft:pumpkin"), 3, PaperAdventure.asAdventure(stack.getComponentsPatch()));
133144
final Tag result = HOVER_EVENT_CODEC.encodeStart(NbtOps.INSTANCE, hoverEvent).result().orElseThrow();
134145
final DataResult<Pair<net.minecraft.network.chat.HoverEvent, Tag>> dataResult = net.minecraft.network.chat.HoverEvent.CODEC.decode(NbtOps.INSTANCE, result);
135146
assertTrue(dataResult.result().isPresent(), () -> dataResult + " result is not present");
136-
final net.minecraft.network.chat.HoverEvent nms = dataResult.result().orElseThrow().getFirst();
147+
final net.minecraft.network.chat.HoverEvent.ShowItem nms = (net.minecraft.network.chat.HoverEvent.ShowItem) dataResult.result().orElseThrow().getFirst();
137148
assertEquals(hoverEvent.action().toString(), nms.action().getSerializedName());
138-
final net.minecraft.network.chat.HoverEvent.ItemStackInfo value = nms.getValue(net.minecraft.network.chat.HoverEvent.Action.SHOW_ITEM);
139-
assertNotNull(value);
140-
assertEquals(hoverEvent.value().count(), value.count);
141-
assertEquals(hoverEvent.value().item().asString(), value.item.unwrapKey().orElseThrow().location().toString());
142-
assertEquals(stack.getComponentsPatch(), value.components);
149+
final ItemStack item = nms.item();
150+
assertNotNull(item);
151+
assertEquals(hoverEvent.value().count(), item.getCount());
152+
assertEquals(hoverEvent.value().item().asString(), item.getItem().toString());
153+
assertEquals(stack.getComponentsPatch(), item.getComponentsPatch());
143154
}
144155

145156
@Test
@@ -149,9 +160,9 @@ void testShowEntityHoverEvent() {
149160
final Tag result = HOVER_EVENT_CODEC.encodeStart(NbtOps.INSTANCE, hoverEvent).result().orElseThrow();
150161
final DataResult<Pair<net.minecraft.network.chat.HoverEvent, Tag>> dataResult = net.minecraft.network.chat.HoverEvent.CODEC.decode(NbtOps.INSTANCE, result);
151162
assertTrue(dataResult.result().isPresent(), () -> dataResult + " result is not present");
152-
final net.minecraft.network.chat.HoverEvent nms = dataResult.result().orElseThrow().getFirst();
163+
final net.minecraft.network.chat.HoverEvent.ShowEntity nms = (net.minecraft.network.chat.HoverEvent.ShowEntity) dataResult.result().orElseThrow().getFirst();
153164
assertEquals(hoverEvent.action().toString(), nms.action().getSerializedName());
154-
final net.minecraft.network.chat.HoverEvent.EntityTooltipInfo value = nms.getValue(net.minecraft.network.chat.HoverEvent.Action.SHOW_ENTITY);
165+
final net.minecraft.network.chat.HoverEvent.EntityTooltipInfo value = nms.entity();
155166
assertNotNull(value);
156167
assertEquals(hoverEvent.value().type().asString(), BuiltInRegistries.ENTITY_TYPE.getKey(value.type).toString());
157168
assertEquals(hoverEvent.value().id(), value.uuid);

paper-server/src/test/java/org/bukkit/ChatTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ public void testURLJsonConversion() {
3232
CraftChatMessage.toJSON(components[0]));
3333

3434
components = CraftChatMessage.fromString("123 " + ChatColor.GOLD + "https://spigotmc.org " + ChatColor.BOLD + "test");
35-
assertEquals("{\"text\":\"\",\"extra\":[\"123 \",{\"text\":\"https://spigotmc.org\",\"strikethrough\":false,\"obfuscated\":false,\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://spigotmc.org\"},\"bold\":false,\"italic\":false,\"underlined\":false,\"color\":\"gold\"},{\"text\":\" \",\"strikethrough\":false,\"obfuscated\":false,\"bold\":false,\"italic\":false,\"underlined\":false,\"color\":\"gold\"},{\"text\":\"test\",\"strikethrough\":false,\"obfuscated\":false,\"bold\":true,\"italic\":false,\"underlined\":false,\"color\":\"gold\"}]}",
35+
assertEquals("{\"text\":\"\",\"extra\":[\"123 \",{\"text\":\"https://spigotmc.org\",\"strikethrough\":false,\"obfuscated\":false,\"click_event\":{\"url\":\"https://spigotmc.org\",\"action\":\"open_url\"},\"bold\":false,\"italic\":false,\"underlined\":false,\"color\":\"gold\"},{\"text\":\" \",\"strikethrough\":false,\"obfuscated\":false,\"bold\":false,\"italic\":false,\"underlined\":false,\"color\":\"gold\"},{\"text\":\"test\",\"strikethrough\":false,\"obfuscated\":false,\"bold\":true,\"italic\":false,\"underlined\":false,\"color\":\"gold\"}]}",
3636
CraftChatMessage.toJSON(components[0]));
3737

3838
components = CraftChatMessage.fromString("multiCase http://SpigotMC.ORg/SpOngeBobMeEMeGoESHeRE");
39-
assertEquals("{\"text\":\"\",\"extra\":[\"multiCase \",{\"text\":\"http://SpigotMC.ORg/SpOngeBobMeEMeGoESHeRE\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"http://SpigotMC.ORg/SpOngeBobMeEMeGoESHeRE\"}}]}",
39+
assertEquals("{\"text\":\"\",\"extra\":[\"multiCase \",{\"text\":\"http://SpigotMC.ORg/SpOngeBobMeEMeGoESHeRE\",\"click_event\":{\"url\":\"http://SpigotMC.ORg/SpOngeBobMeEMeGoESHeRE\",\"action\":\"open_url\"}}]}",
4040
CraftChatMessage.toJSON(components[0]));
4141
}
4242
}

0 commit comments

Comments
 (0)