From eebc5c6e62f60a23c609783f2afdb2fafb6873c4 Mon Sep 17 00:00:00 2001 From: "main()" Date: Mon, 23 Jan 2012 16:02:44 +0100 Subject: [PATCH] Mocking is better than implementing mock-classes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (déjà vu ... ;) ) --- .../test/utils/MockWorldFactory.java | 81 +++++++------------ 1 file changed, 27 insertions(+), 54 deletions(-) diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockWorldFactory.java b/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockWorldFactory.java index 1528e073..fd362c0d 100644 --- a/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockWorldFactory.java +++ b/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockWorldFactory.java @@ -7,8 +7,7 @@ package com.onarandombox.MultiverseCore.test.utils; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; import java.io.File; import java.util.ArrayList; @@ -20,9 +19,8 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.WorldType; +import org.bukkit.block.Block; import org.bukkit.generator.ChunkGenerator; -import org.mockito.ArgumentMatcher; -import org.mockito.Matchers; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -33,51 +31,6 @@ public class MockWorldFactory { private MockWorldFactory() { } - private static class LocationMatcher extends ArgumentMatcher { - private Location l; - - public LocationMatcher(Location location) { - this.l = location; - } - - public boolean matches(Object creator) { - return creator.equals(l); - } - } - - private static class LocationMatcherAbove extends LocationMatcher { - - public LocationMatcherAbove(Location location) { - super(location); - } - - public boolean matches(Object creator) { - Util.log("Checking above..."); - if (super.l == null || creator == null) { - return false; - } - boolean equal = ((Location) creator).getBlockY() >= super.l.getBlockY(); - Util.log("Checking equals/\\..." + equal); - return equal; - } - } - - private static class LocationMatcherBelow extends LocationMatcher { - - public LocationMatcherBelow(Location location) { - super(location); - } - - public boolean matches(Object creator) { - if (super.l == null || creator == null) { - return false; - } - boolean equal = ((Location) creator).getBlockY() < super.l.getBlockY(); - Util.log("Checking equals\\/..." + equal); - return equal; - } - } - private static void registerWorld(World world) { createdWorlds.put(world.getName(), world); } @@ -95,11 +48,31 @@ public class MockWorldFactory { World thiss = (World) invocation.getMock(); return new File(TestInstanceCreator.serverDirectory, thiss.getName()); - }}); - LocationMatcherAbove matchWorldAbove = new LocationMatcherAbove(new Location(mockWorld, 0, 0, 0)); - LocationMatcherBelow matchWorldBelow = new LocationMatcherBelow(new Location(mockWorld, 0, 0, 0)); - when(mockWorld.getBlockAt(Matchers.argThat(matchWorldAbove))).thenReturn(new MockBlock(new Location(mockWorld, 0, 0, 0), Material.AIR)); - when(mockWorld.getBlockAt(Matchers.argThat(matchWorldBelow))).thenReturn(new MockBlock(new Location(mockWorld, 0, 0, 0), Material.STONE)); + } + }); + when(mockWorld.getBlockAt(any(Location.class))).thenAnswer(new Answer() { + public Block answer(InvocationOnMock invocation) throws Throwable { + Location loc; + try { + loc = (Location) invocation.getArguments()[0]; + } catch (Exception e) { + return null; + } + + Block mockBlock = mock(Block.class); + Material blockType = Material.AIR; // TODO we might use other materials, too + + when(mockBlock.getType()).thenReturn(blockType); + when(mockBlock.getTypeId()).thenReturn(blockType.getId()); + when(mockBlock.getWorld()).thenReturn(loc.getWorld()); + when(mockBlock.getX()).thenReturn(loc.getBlockX()); + when(mockBlock.getY()).thenReturn(loc.getBlockY()); + when(mockBlock.getZ()).thenReturn(loc.getBlockZ()); + when(mockBlock.getLocation()).thenReturn(loc); + when(mockBlock.isEmpty()).thenReturn(blockType == Material.AIR); + return mockBlock; + } + }); return mockWorld; }