From af8616a2087eb691c9ecae713ee39220ff307099 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Tue, 4 Apr 2017 21:31:13 +0300 Subject: [PATCH] More mock & test fixes --- .gitignore | 3 +- .../plan/data/DemographicsDataTest.java | 1 + .../djrapitops/plan/data/UserDataTest.java | 43 +++++++++++++++++-- .../plan/database/DatabaseTest.java | 34 +++++++++++---- .../plan/utilities/HtmlUtilsTest.java | 16 +++---- Plan/src/test/java/utils/MockUtils.java | 36 +++++++++++++++- Plan/src/test/java/utils/TestInit.java | 28 ++++++------ 7 files changed, 126 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index 4054cfee2..f68374daf 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,8 @@ /Plan Lite/build/ /Plan Lite/dist/ /Plan Lite/nbproject/private/ -/Plan/target/ /Plan/nbproject/ +/Plan/target/ +/Plan/temporaryTestFolder/ /Debugger/nbproject/private/ /PlanDebugger/nbproject/private/ \ No newline at end of file diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/DemographicsDataTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/DemographicsDataTest.java index a122ac7bf..e3c4dc65d 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/DemographicsDataTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/DemographicsDataTest.java @@ -9,6 +9,7 @@ import main.java.com.djrapitops.plan.Phrase; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.api.Gender; import main.java.com.djrapitops.plan.data.DemographicsData; +import org.bukkit.Server; import org.bukkit.plugin.java.JavaPlugin; import org.easymock.EasyMock; import org.junit.Test; diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/data/UserDataTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/data/UserDataTest.java index 723687738..d803dbf4a 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/data/UserDataTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/data/UserDataTest.java @@ -5,6 +5,8 @@ */ package test.java.main.java.com.djrapitops.plan.data; +import org.bukkit.OfflinePlayer; +import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; @@ -24,7 +26,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.Test; import org.junit.Before; -import org.junit.Ignore; import org.junit.runner.RunWith; import org.powermock.api.easymock.PowerMock; import org.powermock.core.classloader.annotations.PrepareForTest; @@ -41,19 +42,21 @@ import test.java.utils.TestInit; public class UserDataTest { private UserData test; + private Plan plan; public UserDataTest() { } - + @Before public void setUp() { TestInit t = new TestInit(); assertTrue("Not set up", t.setUp()); - Plan plan = t.getPlanMock(); + plan = t.getPlanMock(); PowerMock.mockStatic(JavaPlugin.class); EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan); EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan); EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan); + EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan); PowerMock.replay(JavaPlugin.class); // PowerMock.verify(JavaPlugin.class); DemographicsData demData = new DemographicsData(); @@ -104,7 +107,7 @@ public class UserDataTest { test.addLocation(loc); assertTrue("Didn't add location", !test.getLocations().isEmpty()); } - + @Test public void testAddNullLocation() { test.addLocation(null); @@ -304,6 +307,38 @@ public class UserDataTest { assertTrue("Not copied properly", test.equals(copy)); } + @Test + public void testPlayerConstructor() { + test = new UserData(MockUtils.mockPlayer(), new DemographicsData()); + UserData expected = new UserData(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"), 1234567L, new Location(MockUtils.mockWorld(), 0, 0, 0), true, GameMode.SURVIVAL, new DemographicsData(), "TestName", true); + expected.updateBanned(true); + assertTrue("Not equal!", test.equals(expected)); + } + + @Test + public void testPlayerConstructorBrokenBanned() throws IOException { + test = new UserData(MockUtils.mockBrokenPlayer(), new DemographicsData()); + UserData expected = new UserData(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"), 1234567L, new Location(MockUtils.mockWorld(), 0, 0, 0), true, GameMode.SURVIVAL, new DemographicsData(), "TestName", true); + expected.updateBanned(false); + assertTrue("Not equal!", test.equals(expected)); + } + + @Test + public void testOfflinePlayerConstructor() { + test = new UserData((OfflinePlayer) MockUtils.mockPlayer(), new DemographicsData()); + UserData expected = new UserData(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"), 1234567L, new Location(MockUtils.mockWorld(), 0, 0, 0), true, GameMode.SURVIVAL, new DemographicsData(), "TestName", true); + expected.updateBanned(true); + assertTrue("Not equal!", test.equals(expected)); + } + + @Test + public void testOfflinePlayerConstructorBrokenBanned() throws IOException { + test = new UserData((OfflinePlayer) MockUtils.mockBrokenPlayer(), new DemographicsData()); + UserData expected = new UserData(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"), 1234567L, new Location(MockUtils.mockWorld(), 0, 0, 0), true, GameMode.SURVIVAL, new DemographicsData(), "TestName", true); + expected.updateBanned(false); + assertTrue("Not equal!", test.equals(expected)); + } + @Test public void testGetUUID() { assertEquals(test.getUuid(), UUID.fromString("7f8149a0-b5a5-4fcd-80b5-6cff083a99f1")); diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseTest.java index 1997cae89..3e2246753 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/database/DatabaseTest.java @@ -20,12 +20,25 @@ import org.junit.Test; import org.powermock.api.easymock.PowerMock; import test.java.utils.TestInit; import org.bukkit.Bukkit; +import org.bukkit.scheduler.*; +import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.bukkit.scheduler.BukkitScheduler; +import org.easymock.EasyMock; +import static org.easymock.EasyMock.anyLong; import org.junit.Ignore; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import static org.powermock.api.mockito.PowerMockito.when; +import static org.powermock.api.mockito.PowerMockito.whenNew; /** * * @author Risto */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({JavaPlugin.class, Bukkit.class, BukkitScheduler.class, BukkitRunnable.class}) public class DatabaseTest { private Plan plan; @@ -35,23 +48,28 @@ public class DatabaseTest { } @Before - public void setUp() throws IOException { + public void setUp() throws IOException, Exception { TestInit t = new TestInit(); assertTrue("Not set up", t.setUp()); plan = t.getPlanMock(); PowerMock.mockStatic(JavaPlugin.class); PowerMock.replay(JavaPlugin.class); -// PowerMock.verify(JavaPlugin.class); - PowerMock.mockStatic(Bukkit.class); - PowerMock.replay(Bukkit.class); -// EasyMock.expect(Bukkit.getScheduler()).andReturn(); +// PowerMock.verify(JavaPlugin.class); File f = new File(plan.getDataFolder(), "Errors.txt"); rows = 0; if (f.exists()) { rows = Files.readLines(f, Charset.defaultCharset()).size(); } + BukkitRunnable mockRunnable = PowerMockito.mock(BukkitRunnable.class); + when(mockRunnable.runTaskTimerAsynchronously(plan, anyLong(), anyLong())).thenReturn(null); + whenNew(BukkitRunnable.class).withNoArguments().thenReturn(mockRunnable); + + PowerMock.mockStatic(Bukkit.class); +// PowerMock.replay(Bukkit.class); + BukkitScheduler mockScheduler = Mockito.mock(BukkitScheduler.class); + EasyMock.expect(Bukkit.getScheduler()).andReturn(mockScheduler); } - + @After public void tearDown() throws IOException { File f = new File(plan.getDataFolder(), "Errors.txt"); @@ -62,9 +80,9 @@ public class DatabaseTest { assertTrue("Errors were caught.", rows == rowsAgain); } - @Ignore("Mock scheduler") @Test + @Ignore @Test public void testInit() { Database db = new SQLiteDB(plan, "debug.db"); - assertTrue("Database failed to init.", db.init()); + assertTrue("Database failed to init.", db.init()); } } diff --git a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/HtmlUtilsTest.java b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/HtmlUtilsTest.java index 594073a77..f9d2b2d6a 100644 --- a/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/HtmlUtilsTest.java +++ b/Plan/src/test/java/main/java/com/djrapitops/plan/utilities/HtmlUtilsTest.java @@ -40,6 +40,8 @@ public class HtmlUtilsTest { PowerMock.mockStatic(JavaPlugin.class); EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan); EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan); + EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan); + EasyMock.expect(JavaPlugin.getPlugin(Plan.class)).andReturn(plan); PowerMock.replay(JavaPlugin.class); // PowerMock.verify(JavaPlugin.class); } @@ -72,21 +74,19 @@ public class HtmlUtilsTest { assertEquals(result, exp); } - @Ignore("Mock Server.getIp") @Test + @Test public void testGetServerAnalysisUrl() throws FileNotFoundException { String result = HtmlUtils.getServerAnalysisUrl(); - String exp = ""; - assertEquals(result, exp); + String exp = "http://0.0.0.0:8804/bAkEd/server"; + assertEquals(exp, result); } - @Ignore("Mock Server.getIp") @Test + @Test public void testGetInspectUrl() { - String playerName = ""; - String expResult = ""; + String playerName = "Test"; + String expResult = "http://0.0.0.0:8804/bAkEd/player/Test"; String result = HtmlUtils.getInspectUrl(playerName); assertEquals(expResult, result); - // TODO review the generated test code and remove the default call to fail. - fail("The test case is a prototype."); } @Test diff --git a/Plan/src/test/java/utils/MockUtils.java b/Plan/src/test/java/utils/MockUtils.java index 7bcc7f11e..04b70942b 100644 --- a/Plan/src/test/java/utils/MockUtils.java +++ b/Plan/src/test/java/utils/MockUtils.java @@ -1,17 +1,51 @@ - package test.java.utils; +import java.util.UUID; import org.bukkit.World; import org.mockito.Mockito; +import org.bukkit.entity.Player; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.powermock.api.mockito.PowerMockito; +import static org.powermock.api.mockito.PowerMockito.when; /** * * @author Rsl1122 */ public class MockUtils { + public static World mockWorld() { World mockWorld = Mockito.mock(World.class); Mockito.doReturn("World").when(mockWorld).toString(); return mockWorld; } + + public static Player mockPlayer() { + Player p = PowerMockito.mock(Player.class); + when(p.getGameMode()).thenReturn(GameMode.SURVIVAL); + when(p.getUniqueId()).thenReturn(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db")); + when(p.getFirstPlayed()).thenReturn(1234567L); + World mockWorld = mockWorld(); + when(p.getLocation()).thenReturn(new Location(mockWorld, 0, 0, 0)); + when(p.isOp()).thenReturn(true); + when(p.isBanned()).thenReturn(true); + when(p.isOnline()).thenReturn(true); + when(p.getName()).thenReturn("TestName"); + return p; + } + + public static Player mockBrokenPlayer() { + Player p = PowerMockito.mock(Player.class); + when(p.getGameMode()).thenReturn(GameMode.SURVIVAL); + when(p.getUniqueId()).thenReturn(UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db")); + when(p.getFirstPlayed()).thenReturn(1234567L); + World mockWorld = mockWorld(); + when(p.getLocation()).thenReturn(new Location(mockWorld, 0, 0, 0)); + when(p.isOp()).thenReturn(true); + when(p.isBanned()).thenThrow(Exception.class); + when(p.isOnline()).thenReturn(true); + when(p.getName()).thenReturn("TestName"); + return p; + } } diff --git a/Plan/src/test/java/utils/TestInit.java b/Plan/src/test/java/utils/TestInit.java index 1a053ed3c..324b22f93 100644 --- a/Plan/src/test/java/utils/TestInit.java +++ b/Plan/src/test/java/utils/TestInit.java @@ -7,9 +7,11 @@ package test.java.utils; import java.io.File; import java.io.FileInputStream; +import java.nio.file.Files; import main.java.com.djrapitops.plan.Plan; -import org.mockito.Mockito; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.Server; +import org.powermock.api.mockito.PowerMockito; import static org.powermock.api.mockito.PowerMockito.when; /** @@ -20,30 +22,30 @@ public class TestInit { private Plan planMock; - public TestInit() { + public TestInit() { } - + public boolean setUp() { try { - planMock = Mockito.mock(Plan.class); + planMock = PowerMockito.mock(Plan.class); File configfile = new File(getClass().getResource("/config.yml").getPath()); YamlConfiguration configuration = new YamlConfiguration(); configuration.load(configfile.getAbsolutePath()); when(planMock.getConfig()).thenReturn(configuration); -// if (testFolder.exists()) { -// Files.deleteIfExists(testFolder.toPath()); -// } -// testFolder.mkdir(); -// when(planMock.getDataFolder()).thenReturn(new File("temporaryTestFolder")); + Files.deleteIfExists(new File("temporaryTestFolder").toPath()); + File testFolder = new File("temporaryTestFolder"); + testFolder.mkdir(); +// + when(planMock.getDataFolder()).thenReturn(testFolder); File analysis = new File(getClass().getResource("/analysis.html").getPath()); when(planMock.getResource("analysis.html")).thenReturn(new FileInputStream(analysis)); File player = new File(getClass().getResource("/player.html").getPath()); when(planMock.getResource("player.html")).thenReturn(new FileInputStream(player)); - -// Server mockServer = Mockito.mock(Server.class); -// when(mockServer.getIp()).thenReturn("0.0.0.0"); + + Server mockServer = PowerMockito.mock(Server.class); + when(mockServer.getIp()).thenReturn("0.0.0.0"); // Mockito.doReturn("0.0.0.0").when(mockServer).getIp(); -// when(planMock.getServer()).thenReturn(mockServer); + when(planMock.getServer()).thenReturn(mockServer); // Mockito.doReturn("0.0.0.0").when(planMock).getServer().getIp(); return true; } catch (Exception ex) {