From 2946e3c298675b26430e89e26afa2d086f30131c Mon Sep 17 00:00:00 2001 From: tastybento Date: Thu, 30 May 2019 23:04:23 -0700 Subject: [PATCH] Fixes superflat generation with Multiverse https://github.com/BentoBoxWorld/BentoBox/issues/716 --- .../bentobox/managers/AddonsManager.java | 6 +- .../bentobox/managers/IslandWorldManager.java | 4 +- .../bentobox/managers/AddonsManagerTest.java | 211 +++++++++++++++++- 3 files changed, 213 insertions(+), 8 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/managers/AddonsManager.java b/src/main/java/world/bentobox/bentobox/managers/AddonsManager.java index 3b8f24c7d..44dd114bc 100644 --- a/src/main/java/world/bentobox/bentobox/managers/AddonsManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/AddonsManager.java @@ -121,7 +121,7 @@ public class AddonsManager { if (addon instanceof GameModeAddon) { GameModeAddon gameMode = (GameModeAddon) addon; if (!gameMode.getWorldSettings().getWorldName().isEmpty()) { - worldNames.put(gameMode.getWorldSettings().getWorldName(), gameMode); + worldNames.put(gameMode.getWorldSettings().getWorldName().toLowerCase(), gameMode); } } // Addon successfully loaded @@ -377,7 +377,7 @@ public class AddonsManager { /** * Get the world generator if it exists - * @param worldName - name of world + * @param worldName - name of world - case insensitive * @param id - specific generator id * @return ChunkGenerator or null if none found * @since 1.2.0 @@ -385,7 +385,7 @@ public class AddonsManager { @Nullable public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) { // Clean up world name - String w = worldName.replace("_nether", "").replace("_the_end", ""); + String w = worldName.replace("_nether", "").replace("_the_end", "").toLowerCase(); if (worldNames.containsKey(w)) { return worldNames.get(w).getDefaultWorldGenerator(worldName, id); } diff --git a/src/main/java/world/bentobox/bentobox/managers/IslandWorldManager.java b/src/main/java/world/bentobox/bentobox/managers/IslandWorldManager.java index 61a029ee1..1f0106a0e 100644 --- a/src/main/java/world/bentobox/bentobox/managers/IslandWorldManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/IslandWorldManager.java @@ -92,7 +92,7 @@ public class IslandWorldManager { */ public boolean inWorld(@Nullable World world) { return world != null && gameModes.containsKey(world) && - (world.getEnvironment().equals(Environment.NORMAL) || isIslandNether(world) || isIslandEnd(world)); + (world.getEnvironment().equals(Environment.NORMAL) || isIslandNether(world) || isIslandEnd(world)); } /** @@ -292,7 +292,7 @@ public class IslandWorldManager { * @return the worldName */ public String getWorldName(@NonNull World world) { - return gameModes.get(world).getWorldSettings().getWorldName(); + return gameModes.get(world).getWorldSettings().getWorldName().toLowerCase(); } /** diff --git a/src/test/java/world/bentobox/bentobox/managers/AddonsManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/AddonsManagerTest.java index 2c68a9b1f..0b54cd1e3 100644 --- a/src/test/java/world/bentobox/bentobox/managers/AddonsManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/AddonsManagerTest.java @@ -1,36 +1,241 @@ package world.bentobox.bentobox.managers; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.when; +import java.io.File; +import java.nio.file.Files; + +import org.bukkit.Bukkit; +import org.bukkit.event.Listener; +import org.bukkit.plugin.PluginManager; +import org.eclipse.jdt.annotation.NonNull; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.api.addons.Addon; +import world.bentobox.bentobox.api.addons.AddonDescription; +import world.bentobox.bentobox.database.objects.DataObject; @RunWith(PowerMockRunner.class) -@PrepareForTest( { BentoBox.class} ) +@PrepareForTest( {Bukkit.class, BentoBox.class} ) public class AddonsManagerTest { private BentoBox plugin; + private AddonsManager am; + @Mock + private PluginManager pm; + /** + * @throws Exception + */ @Before - public void setup() { + public void setup() throws Exception { + PowerMockito.mockStatic(Bukkit.class); + when(Bukkit.getPluginManager()).thenReturn(pm); // Set up plugin plugin = mock(BentoBox.class); Whitebox.setInternalState(BentoBox.class, "instance", plugin); + FlagsManager fm = mock(FlagsManager.class); + when(plugin.getFlagsManager()).thenReturn(fm); + + am = new AddonsManager(plugin); } + /** + * @throws java.lang.Exception + */ + @After + public void tearDown() throws Exception { + // Delete the addons folder + File f = new File(plugin.getDataFolder(), "addons"); + Files.deleteIfExists(f.toPath()); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#AddonsManager(world.bentobox.bentobox.BentoBox)}. + */ @Test - public void testConstructor() { + public void testAddonsManager() { AddonsManager addonsManager = new AddonsManager(plugin); assertNotNull(addonsManager.getAddons()); } + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#loadAddons()}. + */ + @Test + public void testLoadAddonsNoAddons() { + am.loadAddons(); + verify(plugin, never()).logError("Cannot create addons folder!"); + verify(plugin).log("Loaded 0 addons."); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#enableAddons()}. + */ + @Test + public void testEnableAddonsNoAddon() { + am.enableAddons(); + verify(plugin, never()).log("Enabling addons..."); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#reloadAddons()}. + */ + @Test + public void testReloadAddonsNoAddons() { + am.reloadAddons(); + verify(plugin, never()).log("Disabling addons..."); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#reloadAddon(world.bentobox.bentobox.api.addons.Addon)}. + */ + @Test + public void testReloadAddon() { + Addon addon = mock(Addon.class); + when(addon.isEnabled()).thenReturn(true); + File f = new File(plugin.getDataFolder(), "addons"); + File file = new File(f, "addon.jar"); + when(addon.getFile()).thenReturn(file); + AddonDescription desc = new AddonDescription.Builder("main", "addon-name", "1.0").build(); + when(addon.getDescription()).thenReturn(desc); + am.reloadAddon(addon); + verify(plugin).log("Disabling addon-name..."); + verify(addon).onDisable(); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#getAddonByName(java.lang.String)}. + */ + @Test + public void testGetAddonByNameNoAddons() { + assertFalse(am.getAddonByName("name").isPresent()); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#disableAddons()}. + */ + @Test + public void testDisableAddonsNoAddons() { + am.disableAddons(); + verify(plugin, never()).log("Disabling addons..."); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#getAddons()}. + */ + @Test + public void testGetAddonsNoAddons() { + assertTrue(am.getAddons().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#getGameModeAddons()}. + */ + @Test + public void testGetGameModeAddonsNoAddons() { + assertTrue(am.getGameModeAddons().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#getLoadedAddons()}. + */ + @Test + public void testGetLoadedAddonsnoAddons() { + assertTrue(am.getLoadedAddons().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#getEnabledAddons()}. + */ + @Test + public void testGetEnabledAddonsNoAddons() { + assertTrue(am.getEnabledAddons().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#getLoader(world.bentobox.bentobox.api.addons.Addon)}. + */ + @Test + public void testGetLoaderNoSuchAddon() { + Addon addon = mock(Addon.class); + assertNull(am.getLoader(addon)); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#getClassByName(java.lang.String)}. + */ + @Test + public void testGetClassByNameNull() { + assertNull(am.getClassByName("name")); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#setClass(java.lang.String, java.lang.Class)}. + */ + @Test + public void testSetClass() { + am.setClass("name", Class.class); + assertNotNull(am.getClassByName("name")); + assertEquals(Class.class, am.getClassByName("name")); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#getDefaultWorldGenerator(java.lang.String, java.lang.String)}. + */ + @Test + public void testGetDefaultWorldGeneratorNoWorlds() { + assertNull(am.getDefaultWorldGenerator("BSkyBlock", "")); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#registerListener(world.bentobox.bentobox.api.addons.Addon, org.bukkit.event.Listener)}. + */ + @Test + public void testRegisterListener() { + @NonNull + Addon addon = mock(Addon.class); + + @NonNull + Listener listener = mock(Listener.class); + am.registerListener(addon, listener); + verify(pm).registerEvents(listener, plugin); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#getDataObjects()}. + */ + @Test + public void testGetDataObjectsNone() { + assertTrue(am.getDataObjects().isEmpty()); + } + + /** + * Test method for {@link world.bentobox.bentobox.managers.AddonsManager#getDataObjects()}. + */ + @Test + public void testGetDataObjects() { + am.setClass("dataobj", DataObject.class); + assertFalse(am.getDataObjects().isEmpty()); + assertTrue(am.getDataObjects().size() == 1); + } }