diff --git a/.gitignore b/.gitignore
index ac697fa7..e204b345 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,4 +33,8 @@
.idea/
# Fern's utils
-uploadtoserver.sh
\ No newline at end of file
+uploadtoserver.sh
+
+# Testing files:
+debug.log
+
diff --git a/pom.xml b/pom.xml
index d57ccd81..1447ce8b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -193,12 +193,40 @@
compile
-
+
org.junit
junit
4.8.2
+ test
-
+
+ org.powermock
+ powermock-module-junit4
+ 1.4.9
+ jar
+ test
+
+
+ org.powermock
+ powermock-api-easymock
+ 1.4.9
+ jar
+ test
+
+
+ org.powermock
+ powermock-api-mockito
+ 1.4.9
+ jar
+ test
+
+
+ org.easymock
+ easymock
+ 3.0
+ test
+
+
diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
index 6dd77c9b..dbe6b2de 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
@@ -33,6 +33,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.Event.Priority;
+import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
@@ -52,6 +53,8 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
public static boolean EnforceGameModes;
public static boolean PrefixChat;
public static boolean BedRespawn;
+ private File testConfigDirectory;
+ private PluginDescriptionFile testDescriptionFile;
@Override
@@ -124,6 +127,28 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
debugLog = new DebugLog("Multiverse-Core", getDataFolder() + File.separator + "debug.log");
}
+ @Override
+ public File getDataFolder() {
+ if (this.testConfigDirectory != null) {
+ return this.testConfigDirectory;
+ }
+ return super.getDataFolder();
+ }
+
+ @Override
+ public PluginDescriptionFile getDescription() {
+ if (this.testDescriptionFile != null) {
+ return this.testDescriptionFile;
+ }
+ return super.getDescription(); //To change body of overridden methods use File | Settings | File Templates.
+ }
+
+
+ public void setTestMode(File configDir, PluginDescriptionFile descriptionFile) {
+ this.testConfigDirectory = configDir;
+ this.testDescriptionFile = descriptionFile;
+ }
+
public FileConfiguration getMVConfiguration() {
return this.multiverseConfig;
}
@@ -230,6 +255,7 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
/** Function to Register all the Events needed. */
private void registerEvents() {
+ System.out.print(getServer().getName());
PluginManager pm = getServer().getPluginManager();
// pm.registerEvent(Event.Type.PLAYER_MOVE, playerListener, Priority.Highest, this); // Low so it acts above any other.
pm.registerEvent(Event.Type.PLAYER_TELEPORT, this.playerListener, Priority.Highest, this); // Cancel Teleports if needed.
@@ -451,6 +477,9 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
private String getAuthors() {
String authors = "";
ArrayList auths = this.getDescription().getAuthors();
+ if(auths.size() == 0) {
+ return "";
+ }
if (auths.size() == 1) {
return auths.get(0);
diff --git a/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java b/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java
index 7d365c40..94d32a23 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java
@@ -141,4 +141,12 @@ public interface MVWorldManager {
* @return A valid {@link PurgeWorlds}.
*/
public PurgeWorlds getWorldPurger();
+
+ /**
+ * Gets the world players will spawn in on first join.
+ * Currently this always returns worlds.get(0) from Bukkit.
+ *
+ * @return A Multiverse world that players will spawn in or null if no MV world has been set.
+ */
+ public MultiverseWorld getSpawnWorld();
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java b/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
index deecf179..5b41a785 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
@@ -438,4 +438,8 @@ public class WorldManager implements MVWorldManager {
this.plugin.log(Level.SEVERE, "Could not save worlds.yml. Please check your settings.");
}
}
+
+ public MultiverseWorld getSpawnWorld() {
+ return this.getMVWorld(this.plugin.getServer().getWorlds().get(0));
+ }
}
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/TestMockWorld.java b/src/test/java/com/onarandombox/MultiverseCore/test/TestMockWorld.java
new file mode 100644
index 00000000..fe0dd50d
--- /dev/null
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/TestMockWorld.java
@@ -0,0 +1,41 @@
+package com.onarandombox.MultiverseCore.test;
+
+import junit.framework.Assert;
+import org.bukkit.World;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(PowerMockRunner.class)
+public class TestMockWorld {
+ private World mockWorld;
+ private World mockNetherWorld;
+ @Test
+ public void testWorldInit() {
+ // Initialize a fake world and world_nether.
+ this.mockWorld = PowerMockito.mock(World.class);
+ when(this.mockWorld.getName()).thenReturn("world");
+ when(this.mockWorld.getEnvironment()).thenReturn(World.Environment.NORMAL);
+
+ this.mockNetherWorld = PowerMockito.mock(World.class);
+ when(this.mockNetherWorld.getName()).thenReturn("world_nether");
+ when(this.mockNetherWorld.getEnvironment()).thenReturn(World.Environment.NETHER);
+
+ // Test the mock world objects
+ Assert.assertEquals(this.mockWorld.getName(), "world");
+ Assert.assertEquals(this.mockNetherWorld.getName(), "world_nether");
+ verify(this.mockWorld).getName();
+ verify(this.mockNetherWorld).getName();
+
+ // Test the environments
+ Assert.assertEquals(this.mockWorld.getEnvironment(), World.Environment.NORMAL);
+ Assert.assertEquals(this.mockNetherWorld.getEnvironment(), World.Environment.NETHER);
+ verify(this.mockWorld).getEnvironment();
+ verify(this.mockNetherWorld).getEnvironment();
+ }
+}
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldImport.java b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldImport.java
new file mode 100644
index 00000000..5ecc3dc2
--- /dev/null
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldImport.java
@@ -0,0 +1,123 @@
+package com.onarandombox.MultiverseCore.test;
+
+import com.onarandombox.MultiverseCore.MultiverseCore;
+import junit.framework.Assert;
+import org.bukkit.Server;
+import org.bukkit.World;
+import org.bukkit.command.Command;
+import org.bukkit.command.ConsoleCommandSender;
+import org.bukkit.permissions.Permission;
+import org.bukkit.permissions.PermissionDefault;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.PluginDescriptionFile;
+import org.bukkit.plugin.PluginLoader;
+import org.bukkit.plugin.PluginManager;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.Mockito.*;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({PluginManager.class, MultiverseCore.class, Permission.class})
+public class TestWorldImport {
+ ConsoleCommandSender mockCommandSender;
+ private World mockWorld;
+ private World mockNetherWorld;
+ private List worldList;
+ private Server mockServer;
+ private PluginManager mockPluginManager;
+ private PluginLoader pluginLoader;
+ MultiverseCore core;
+
+ @Before
+ public void setUp() throws Exception {
+ // Initialize a fake console.
+ this.mockCommandSender = mock(ConsoleCommandSender.class);
+
+ // Initialize a fake world and world_nether.
+ this.mockWorld = mock(World.class);
+ when(this.mockWorld.getName()).thenReturn("world");
+ when(this.mockWorld.getEnvironment()).thenReturn(World.Environment.NORMAL);
+
+ this.mockNetherWorld = mock(World.class);
+ when(this.mockNetherWorld.getName()).thenReturn("world_nether");
+ when(this.mockNetherWorld.getEnvironment()).thenReturn(World.Environment.NETHER);
+
+ // Initialize our fake worldlist.
+ this.worldList = new ArrayList();
+ this.worldList.add(mockWorld);
+
+
+ JavaPlugin[] plugins = new JavaPlugin[]{core};
+
+ PowerMockito.whenNew(Permission.class).withArguments("Test").thenThrow(new Exception("Permission created exception"));
+ Method addPermissionMethod = PowerMockito.method(PluginManager.class, "addPermission", Permission.class);
+ Constructor permissionConst = PowerMockito.constructor(Permission.class, String.class, String.class, PermissionDefault.class);
+ PowerMockito.suppress(permissionConst);
+ Permission p = new Permission("Test", "test", PermissionDefault.OP);
+
+
+ // Mock the Plugin Manager
+ this.mockPluginManager = PowerMockito.mock(PluginManager.class);
+ when(this.mockPluginManager.getPlugins()).thenReturn(plugins);
+ when(this.mockPluginManager.getPlugin("Multiverse-Core")).thenReturn(core);
+
+ mockPluginManager.addPermission(new Permission(""));
+
+
+ // Initialize our server.
+ this.mockServer = mock(Server.class);
+ when(this.mockServer.getWorld("world")).thenReturn(mockWorld);
+ when(this.mockServer.getWorlds()).thenReturn(worldList);
+ when(this.mockServer.getPluginManager()).thenReturn(this.mockPluginManager);
+ when(this.mockServer.getName()).thenReturn("FernCraft");
+
+
+ PluginDescriptionFile pdf = new PluginDescriptionFile("Multiverse-Core", "2.1-Test", "com.onarandombox.MultiverseCore.MultiverseCore");
+ this.core = PowerMockito.spy(new MultiverseCore());
+ doReturn(this.mockServer).when(core).getServer();
+ doReturn(new File(".")).when(core).getDataFolder();
+ doReturn(pdf).when(core).getDescription();
+ core.onLoad();
+ // Enable it.
+ core.onEnable();
+
+
+ }
+
+ @Test
+ public void TestWorldImport() {
+
+
+ // Start actual testing.
+ // Create a core instance.
+ Plugin plugin = this.mockServer.getPluginManager().getPlugin("Multiverse-Core");
+ // Make sure Core is not null
+ Assert.assertNotNull(plugin);
+ // Make sure core is actually a multiverse core
+
+ // Initialize a fake command
+ Command mockCommand = mock(Command.class);
+ when(mockCommand.getName()).thenReturn("mv");
+ String[] normalArgs = new String[]{"import", "world", "normal"};
+ String[] netherArgs = new String[]{"import", "world_nether", "nether"};
+
+ Assert.assertEquals(0, this.core.getMVWorldManager().getMVWorlds().size());
+
+ // Import the first world.
+ plugin.onCommand(mockCommandSender, mockCommand, "", normalArgs);
+
+ Assert.assertEquals(1, this.core.getMVWorldManager().getMVWorlds().size());
+ }
+}