From 829a7d6bf624997bbd713e2ae224603aaf879f54 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Thu, 9 Dec 2021 13:31:04 +0100 Subject: [PATCH] Added version compat tests --- .../biomes/TestBiomeMapCompatibility.java | 161 ++++++++++++++++++ src/test/resources/biomes/1.14.x.json | 77 +++++++++ src/test/resources/biomes/1.15.x.json | 77 +++++++++ src/test/resources/biomes/1.16.x.json | 81 +++++++++ src/test/resources/biomes/1.17.x.json | 83 +++++++++ src/test/resources/biomes/1.18.x.json | 63 +++++++ 6 files changed, 542 insertions(+) create mode 100644 src/test/java/io/github/thebusybiscuit/slimefun4/utils/biomes/TestBiomeMapCompatibility.java create mode 100644 src/test/resources/biomes/1.14.x.json create mode 100644 src/test/resources/biomes/1.15.x.json create mode 100644 src/test/resources/biomes/1.16.x.json create mode 100644 src/test/resources/biomes/1.17.x.json create mode 100644 src/test/resources/biomes/1.18.x.json diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/utils/biomes/TestBiomeMapCompatibility.java b/src/test/java/io/github/thebusybiscuit/slimefun4/utils/biomes/TestBiomeMapCompatibility.java new file mode 100644 index 000000000..4a0ec3600 --- /dev/null +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/utils/biomes/TestBiomeMapCompatibility.java @@ -0,0 +1,161 @@ +package io.github.thebusybiscuit.slimefun4.utils.biomes; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.ParametersAreNonnullByDefault; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.MethodSource; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; + +import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion; +import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; + +import be.seeseemelk.mockbukkit.MockBukkit; + +/** + * This test checks if biome maps work across multiple versions of Minecraft. + * A similar test can be written for Material Tags :? + * + * @author TheBusyBiscuit + * + */ +class TestBiomeMapCompatibility { + + private static final Map compatibilityMap = new EnumMap<>(MinecraftVersion.class); + + @BeforeAll + public static void load() { + MockBukkit.mock(); + + for (MinecraftVersion version : MinecraftVersion.values()) { + if (!version.isVirtual()) { + loadBiomes(version); + } + } + } + + @AfterAll + public static void unload() { + MockBukkit.unmock(); + } + + private static void loadBiomes(@Nonnull MinecraftVersion version) { + String path = "/biomes/" + version.getName() + ".json"; + + if (Slimefun.class.getResource(path) == null) { + return; + } + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(Slimefun.class.getResourceAsStream(path), StandardCharsets.UTF_8))) { + JsonParser parser = new JsonParser(); + JsonArray biomes = parser.parse(reader.lines().collect(Collectors.joining(""))).getAsJsonArray(); + + compatibilityMap.put(version, biomes); + } catch (IOException x) { + x.printStackTrace(); + } + } + + @ParameterizedTest(name = "Test if {0} has a biome resource") + @EnumSource(value = MinecraftVersion.class) + void testMissingBiomeResources(@Nonnull MinecraftVersion version) { + if (!version.isVirtual()) { + Assertions.assertTrue(compatibilityMap.containsKey(version)); + } + } + + @ParameterizedTest(name = "Test if biome-map {0}.json is compatible with {1}") + @MethodSource("biomeMaps") + @ParametersAreNonnullByDefault + void testCompatibilities(String name, MinecraftVersion version) { + assertCompatibility(name, version); + } + + private static @Nonnull Stream biomeMaps() { + Map testCases = new HashMap<>(); + + // @formatter:off + testCases.put("nether_ice", new MinecraftVersion[] { + MinecraftVersion.MINECRAFT_1_14, + MinecraftVersion.MINECRAFT_1_15, + MinecraftVersion.MINECRAFT_1_16, + MinecraftVersion.MINECRAFT_1_17 + }); + + testCases.put("oil", new MinecraftVersion[] { + MinecraftVersion.MINECRAFT_1_14, + MinecraftVersion.MINECRAFT_1_15, + MinecraftVersion.MINECRAFT_1_16, + MinecraftVersion.MINECRAFT_1_17 + }); + + testCases.put("salt", new MinecraftVersion[] { + MinecraftVersion.MINECRAFT_1_14, + MinecraftVersion.MINECRAFT_1_15, + MinecraftVersion.MINECRAFT_1_16, + MinecraftVersion.MINECRAFT_1_17 + }); + + testCases.put("uranium", new MinecraftVersion[] { + MinecraftVersion.MINECRAFT_1_14, + MinecraftVersion.MINECRAFT_1_15, + MinecraftVersion.MINECRAFT_1_16, + MinecraftVersion.MINECRAFT_1_17 + }); + // @formatter:on + + return testCases.entrySet().stream().flatMap(entry -> { + return Arrays.stream(entry.getValue()).map(version -> Arguments.of(entry.getKey(), version)); + }); + } + + @ParametersAreNonnullByDefault + private void assertCompatibility(String name, MinecraftVersion version) { + JsonArray allBiomes = compatibilityMap.get(version); + + String path = "/biome-maps/" + name + ".json"; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(Slimefun.class.getResourceAsStream(path), StandardCharsets.UTF_8))) { + JsonParser parser = new JsonParser(); + JsonArray root = parser.parse(reader.lines().collect(Collectors.joining(""))).getAsJsonArray(); + + for (JsonElement element : root) { + JsonArray biomes = element.getAsJsonObject().getAsJsonArray("biomes"); + + checkBiomes(biomes, allBiomes, version); + } + } catch (IOException x) { + Assertions.fail(x); + } + } + + @ParametersAreNonnullByDefault + private void checkBiomes(JsonArray biomes, JsonArray allBiomes, MinecraftVersion version) { + for (JsonElement biome : biomes) { + /* + * Assert that this biome exists within the list of all biomes + * for this version of Minecraft. + */ + Assertions.assertTrue(allBiomes.contains(biome), "Biome \"" + biome.getAsString() + "\" does not exist on Minecraft " + version.getName()); + } + } + +} diff --git a/src/test/resources/biomes/1.14.x.json b/src/test/resources/biomes/1.14.x.json new file mode 100644 index 000000000..8ee609358 --- /dev/null +++ b/src/test/resources/biomes/1.14.x.json @@ -0,0 +1,77 @@ +[ + "minecraft:ocean", + "minecraft:plains", + "minecraft:desert", + "minecraft:mountains", + "minecraft:forest", + "minecraft:taiga", + "minecraft:swamp", + "minecraft:river", + "minecraft:nether", + "minecraft:the_end", + "minecraft:frozen_ocean", + "minecraft:frozen_river", + "minecraft:snowy_tundra", + "minecraft:snowy_mountains", + "minecraft:mushroom_fields", + "minecraft:mushroom_field_shore", + "minecraft:beach", + "minecraft:desert_hills", + "minecraft:wooded_hills", + "minecraft:taiga_hills", + "minecraft:mountain_edge", + "minecraft:jungle", + "minecraft:jungle_hills", + "minecraft:jungle_edge", + "minecraft:deep_ocean", + "minecraft:stone_shore", + "minecraft:snowy_beach", + "minecraft:birch_forest", + "minecraft:birch_forest_hills", + "minecraft:dark_forest", + "minecraft:snowy_taiga", + "minecraft:snowy_taiga_hills", + "minecraft:giant_tree_taiga", + "minecraft:giant_tree_taiga_hills", + "minecraft:wooded_mountains", + "minecraft:savanna", + "minecraft:savanna_plateau", + "minecraft:badlands", + "minecraft:wooded_badlands_plateau", + "minecraft:badlands_plateau", + "minecraft:small_end_islands", + "minecraft:end_midlands", + "minecraft:end_highlands", + "minecraft:end_barrens", + "minecraft:warm_ocean", + "minecraft:lukewarm_ocean", + "minecraft:cold_ocean", + "minecraft:deep_warm_ocean", + "minecraft:deep_lukewarm_ocean", + "minecraft:deep_cold_ocean", + "minecraft:deep_frozen_ocean", + "minecraft:the_void", + "minecraft:sunflower_plains", + "minecraft:desert_lakes", + "minecraft:gravelly_mountains", + "minecraft:flower_forest", + "minecraft:taiga_mountains", + "minecraft:swamp_hills", + "minecraft:ice_spikes", + "minecraft:modified_jungle", + "minecraft:modified_jungle_edge", + "minecraft:tall_birch_forest", + "minecraft:tall_birch_hills", + "minecraft:dark_forest_hills", + "minecraft:snowy_taiga_mountains", + "minecraft:giant_spruce_taiga", + "minecraft:giant_spruce_taiga_hills", + "minecraft:modified_gravelly_mountains", + "minecraft:shattered_savanna", + "minecraft:shattered_savanna_plateau", + "minecraft:eroded_badlands", + "minecraft:modified_wooded_badlands_plateau", + "minecraft:modified_badlands_plateau", + "minecraft:bamboo_jungle", + "minecraft:bamboo_jungle_hills" +] diff --git a/src/test/resources/biomes/1.15.x.json b/src/test/resources/biomes/1.15.x.json new file mode 100644 index 000000000..8ee609358 --- /dev/null +++ b/src/test/resources/biomes/1.15.x.json @@ -0,0 +1,77 @@ +[ + "minecraft:ocean", + "minecraft:plains", + "minecraft:desert", + "minecraft:mountains", + "minecraft:forest", + "minecraft:taiga", + "minecraft:swamp", + "minecraft:river", + "minecraft:nether", + "minecraft:the_end", + "minecraft:frozen_ocean", + "minecraft:frozen_river", + "minecraft:snowy_tundra", + "minecraft:snowy_mountains", + "minecraft:mushroom_fields", + "minecraft:mushroom_field_shore", + "minecraft:beach", + "minecraft:desert_hills", + "minecraft:wooded_hills", + "minecraft:taiga_hills", + "minecraft:mountain_edge", + "minecraft:jungle", + "minecraft:jungle_hills", + "minecraft:jungle_edge", + "minecraft:deep_ocean", + "minecraft:stone_shore", + "minecraft:snowy_beach", + "minecraft:birch_forest", + "minecraft:birch_forest_hills", + "minecraft:dark_forest", + "minecraft:snowy_taiga", + "minecraft:snowy_taiga_hills", + "minecraft:giant_tree_taiga", + "minecraft:giant_tree_taiga_hills", + "minecraft:wooded_mountains", + "minecraft:savanna", + "minecraft:savanna_plateau", + "minecraft:badlands", + "minecraft:wooded_badlands_plateau", + "minecraft:badlands_plateau", + "minecraft:small_end_islands", + "minecraft:end_midlands", + "minecraft:end_highlands", + "minecraft:end_barrens", + "minecraft:warm_ocean", + "minecraft:lukewarm_ocean", + "minecraft:cold_ocean", + "minecraft:deep_warm_ocean", + "minecraft:deep_lukewarm_ocean", + "minecraft:deep_cold_ocean", + "minecraft:deep_frozen_ocean", + "minecraft:the_void", + "minecraft:sunflower_plains", + "minecraft:desert_lakes", + "minecraft:gravelly_mountains", + "minecraft:flower_forest", + "minecraft:taiga_mountains", + "minecraft:swamp_hills", + "minecraft:ice_spikes", + "minecraft:modified_jungle", + "minecraft:modified_jungle_edge", + "minecraft:tall_birch_forest", + "minecraft:tall_birch_hills", + "minecraft:dark_forest_hills", + "minecraft:snowy_taiga_mountains", + "minecraft:giant_spruce_taiga", + "minecraft:giant_spruce_taiga_hills", + "minecraft:modified_gravelly_mountains", + "minecraft:shattered_savanna", + "minecraft:shattered_savanna_plateau", + "minecraft:eroded_badlands", + "minecraft:modified_wooded_badlands_plateau", + "minecraft:modified_badlands_plateau", + "minecraft:bamboo_jungle", + "minecraft:bamboo_jungle_hills" +] diff --git a/src/test/resources/biomes/1.16.x.json b/src/test/resources/biomes/1.16.x.json new file mode 100644 index 000000000..5a9050daf --- /dev/null +++ b/src/test/resources/biomes/1.16.x.json @@ -0,0 +1,81 @@ +[ + "minecraft:ocean", + "minecraft:plains", + "minecraft:desert", + "minecraft:mountains", + "minecraft:forest", + "minecraft:taiga", + "minecraft:swamp", + "minecraft:river", + "minecraft:nether_wastes", + "minecraft:the_end", + "minecraft:frozen_ocean", + "minecraft:frozen_river", + "minecraft:snowy_tundra", + "minecraft:snowy_mountains", + "minecraft:mushroom_fields", + "minecraft:mushroom_field_shore", + "minecraft:beach", + "minecraft:desert_hills", + "minecraft:wooded_hills", + "minecraft:taiga_hills", + "minecraft:mountain_edge", + "minecraft:jungle", + "minecraft:jungle_hills", + "minecraft:jungle_edge", + "minecraft:deep_ocean", + "minecraft:stone_shore", + "minecraft:snowy_beach", + "minecraft:birch_forest", + "minecraft:birch_forest_hills", + "minecraft:dark_forest", + "minecraft:snowy_taiga", + "minecraft:snowy_taiga_hills", + "minecraft:giant_tree_taiga", + "minecraft:giant_tree_taiga_hills", + "minecraft:wooded_mountains", + "minecraft:savanna", + "minecraft:savanna_plateau", + "minecraft:badlands", + "minecraft:wooded_badlands_plateau", + "minecraft:badlands_plateau", + "minecraft:small_end_islands", + "minecraft:end_midlands", + "minecraft:end_highlands", + "minecraft:end_barrens", + "minecraft:warm_ocean", + "minecraft:lukewarm_ocean", + "minecraft:cold_ocean", + "minecraft:deep_warm_ocean", + "minecraft:deep_lukewarm_ocean", + "minecraft:deep_cold_ocean", + "minecraft:deep_frozen_ocean", + "minecraft:the_void", + "minecraft:sunflower_plains", + "minecraft:desert_lakes", + "minecraft:gravelly_mountains", + "minecraft:flower_forest", + "minecraft:taiga_mountains", + "minecraft:swamp_hills", + "minecraft:ice_spikes", + "minecraft:modified_jungle", + "minecraft:modified_jungle_edge", + "minecraft:tall_birch_forest", + "minecraft:tall_birch_hills", + "minecraft:dark_forest_hills", + "minecraft:snowy_taiga_mountains", + "minecraft:giant_spruce_taiga", + "minecraft:giant_spruce_taiga_hills", + "minecraft:modified_gravelly_mountains", + "minecraft:shattered_savanna", + "minecraft:shattered_savanna_plateau", + "minecraft:eroded_badlands", + "minecraft:modified_wooded_badlands_plateau", + "minecraft:modified_badlands_plateau", + "minecraft:bamboo_jungle", + "minecraft:bamboo_jungle_hills", + "minecraft:soul_sand_valley", + "minecraft:crimson_forest", + "minecraft:warped_forest", + "minecraft:basalt_deltas" +] diff --git a/src/test/resources/biomes/1.17.x.json b/src/test/resources/biomes/1.17.x.json new file mode 100644 index 000000000..8797f76d5 --- /dev/null +++ b/src/test/resources/biomes/1.17.x.json @@ -0,0 +1,83 @@ +[ + "minecraft:ocean", + "minecraft:plains", + "minecraft:desert", + "minecraft:mountains", + "minecraft:forest", + "minecraft:taiga", + "minecraft:swamp", + "minecraft:river", + "minecraft:nether_wastes", + "minecraft:the_end", + "minecraft:frozen_ocean", + "minecraft:frozen_river", + "minecraft:snowy_tundra", + "minecraft:snowy_mountains", + "minecraft:mushroom_fields", + "minecraft:mushroom_field_shore", + "minecraft:beach", + "minecraft:desert_hills", + "minecraft:wooded_hills", + "minecraft:taiga_hills", + "minecraft:mountain_edge", + "minecraft:jungle", + "minecraft:jungle_hills", + "minecraft:jungle_edge", + "minecraft:deep_ocean", + "minecraft:stone_shore", + "minecraft:snowy_beach", + "minecraft:birch_forest", + "minecraft:birch_forest_hills", + "minecraft:dark_forest", + "minecraft:snowy_taiga", + "minecraft:snowy_taiga_hills", + "minecraft:giant_tree_taiga", + "minecraft:giant_tree_taiga_hills", + "minecraft:wooded_mountains", + "minecraft:savanna", + "minecraft:savanna_plateau", + "minecraft:badlands", + "minecraft:wooded_badlands_plateau", + "minecraft:badlands_plateau", + "minecraft:small_end_islands", + "minecraft:end_midlands", + "minecraft:end_highlands", + "minecraft:end_barrens", + "minecraft:warm_ocean", + "minecraft:lukewarm_ocean", + "minecraft:cold_ocean", + "minecraft:deep_warm_ocean", + "minecraft:deep_lukewarm_ocean", + "minecraft:deep_cold_ocean", + "minecraft:deep_frozen_ocean", + "minecraft:the_void", + "minecraft:sunflower_plains", + "minecraft:desert_lakes", + "minecraft:gravelly_mountains", + "minecraft:flower_forest", + "minecraft:taiga_mountains", + "minecraft:swamp_hills", + "minecraft:ice_spikes", + "minecraft:modified_jungle", + "minecraft:modified_jungle_edge", + "minecraft:tall_birch_forest", + "minecraft:tall_birch_hills", + "minecraft:dark_forest_hills", + "minecraft:snowy_taiga_mountains", + "minecraft:giant_spruce_taiga", + "minecraft:giant_spruce_taiga_hills", + "minecraft:modified_gravelly_mountains", + "minecraft:shattered_savanna", + "minecraft:shattered_savanna_plateau", + "minecraft:eroded_badlands", + "minecraft:modified_wooded_badlands_plateau", + "minecraft:modified_badlands_plateau", + "minecraft:bamboo_jungle", + "minecraft:bamboo_jungle_hills", + "minecraft:soul_sand_valley", + "minecraft:crimson_forest", + "minecraft:warped_forest", + "minecraft:basalt_deltas", + "minecraft:dripstone_caves", + "minecraft:lush_caves" +] diff --git a/src/test/resources/biomes/1.18.x.json b/src/test/resources/biomes/1.18.x.json new file mode 100644 index 000000000..efa620807 --- /dev/null +++ b/src/test/resources/biomes/1.18.x.json @@ -0,0 +1,63 @@ +[ + "minecraft:ocean", + "minecraft:plains", + "minecraft:desert", + "minecraft:windswept_hills", + "minecraft:forest", + "minecraft:taiga", + "minecraft:swamp", + "minecraft:river", + "minecraft:nether_wastes", + "minecraft:the_end", + "minecraft:frozen_ocean", + "minecraft:frozen_river", + "minecraft:snowy_plains", + "minecraft:mushroom_fields", + "minecraft:beach", + "minecraft:jungle", + "minecraft:sparse_jungle", + "minecraft:deep_ocean", + "minecraft:stony_shore", + "minecraft:snowy_beach", + "minecraft:birch_forest", + "minecraft:dark_forest", + "minecraft:snowy_taiga", + "minecraft:old_growth_pine_taiga", + "minecraft:windswept_forest", + "minecraft:savanna", + "minecraft:savanna_plateau", + "minecraft:badlands", + "minecraft:wooded_badlands", + "minecraft:small_end_islands", + "minecraft:end_midlands", + "minecraft:end_highlands", + "minecraft:end_barrens", + "minecraft:warm_ocean", + "minecraft:lukewarm_ocean", + "minecraft:cold_ocean", + "minecraft:deep_lukewarm_ocean", + "minecraft:deep_cold_ocean", + "minecraft:deep_frozen_ocean", + "minecraft:the_void", + "minecraft:sunflower_plains", + "minecraft:windswept_gravelly_hills", + "minecraft:flower_forest", + "minecraft:ice_spikes", + "minecraft:old_growth_birch_forest", + "minecraft:old_growth_spruce_taiga", + "minecraft:windswept_savanna", + "minecraft:eroded_badlands", + "minecraft:bamboo_jungle", + "minecraft:soul_sand_valley", + "minecraft:crimson_forest", + "minecraft:warped_forest", + "minecraft:basalt_deltas", + "minecraft:dripstone_caves", + "minecraft:lush_caves", + "minecraft:meadow", + "minecraft:grove", + "minecraft:snowy_slopes", + "minecraft:frozen_peaks", + "minecraft:jagged_peaks", + "minecraft:stony_peaks" +]