ChanceSD / PvPManager

JUnit5 test classes and methods should be package-private JAVA-W1058
Anti-pattern
Minor
2 months ago6 months old
21import me.NoChance.PvPManager.Utils.CombatUtils;
22
23@ExtendWith(InstanceCreator.class)
24public class DependencyTest {2526	private static Server server;2728	@BeforeAll29	public static void setupClass() {30		final PluginTest pt = InstanceCreator.getPt();31		server = pt.getServer();32		when(server.getServicesManager()).thenReturn(mock(ServicesManager.class));33	}3435	@Test36	void allEnabled() {37		final JavaPlugin plugin = Mockito.mock(JavaPlugin.class);38		when(plugin.getDescription()).thenReturn(new PluginDescriptionFile("Plugin", "1.0", "plugin"));39		when(server.getPluginManager().getPlugin(ArgumentMatchers.anyString())).thenReturn(plugin);40		assertEquals(server.getPluginManager().getPlugin("PvPManager"), plugin);41		new DependencyManager();42	}4344	@Test45	void versionTags() {46		final String v1 = CombatUtils.stripTags("1.0.2-SNAPSHOT");47		final String v2 = CombatUtils.stripTags("1.0.2;1994-9adac4f");48		final String v3 = CombatUtils.stripTags("1.0.2+3827266");49		assertTrue(v1.equals("1.0.2"));50		assertTrue(v2.equals("1.0.2"));51		assertTrue(v3.equals("1.0.2"));52	}5354	@AfterAll55	public static void cleanup() {56		when(server.getPluginManager().getPlugin(ArgumentMatchers.anyString())).thenReturn(null);57	}5859}
 29import me.NoChance.PvPManager.Settings.Settings;
 30
 31@ExtendWith(InstanceCreator.class)
 32public class PlayerListenerTest { 33 34	private static PlayerListener listener; 35	private static PlayerHandler ph; 36	private static PluginTest pt; 37 38	@BeforeAll 39	public static void setupClass() { 40		pt = InstanceCreator.getPt(); 41		final PvPManager plugin = pt.getPlugin(); 42		ph = plugin.getPlayerHandler(); 43		listener = new PlayerListener(plugin.getPlayerHandler()); 44	} 45 46	@BeforeEach 47	public final void setup() { 48		ph.getPlayers().clear(); 49	} 50 51	private void tagPlayer(final PvPlayer player, final PvPlayer enemy) { 52		player.setTagged(true, enemy); 53		assertTrue(player.isInCombat()); 54	} 55 56	private void tagPlayer(final PvPlayer player) { 57		tagPlayer(player, ph.get(pt.createPlayer("Attacker"))); 58	} 59 60	@Test 61	void onPlayerJoinTest() { 62		final Player playerJoined = pt.createPlayer("onPlayerJoinTest"); 63		assertEquals(0, ph.getPlayers().size()); 64		listener.onPlayerJoin(new PlayerJoinEvent(playerJoined, "")); 65		assertEquals(1, ph.getPlayers().size()); 66		assertEquals(playerJoined, ph.getPlayers().values().stream().findFirst().get().getPlayer()); 67	} 68 69	@Test 70	void onPlayerLogoutTest() { 71		final Player player = pt.createPlayer("onPlayerLogoutTest"); 72		final PvPlayer pvPlayer = ph.get(player); 73		final Player attacker = pt.createPlayer("Attacker"); 74		final PvPlayer pvpAttacker = ph.get(attacker); 75		tagPlayer(pvPlayer, pvpAttacker); 76 77		listener.onPlayerLogout(new PlayerQuitEvent(player, "")); 78		listener.onPlayerLogoutMonitor(new PlayerQuitEvent(player, "")); 79		verify(player, times(1)).setHealth(0); 80		assertFalse(pvPlayer.isInCombat()); 81 82		assertEquals(1, ph.getPlayers().size()); // attacker and defender 83		listener.onPlayerLogoutMonitor(new PlayerQuitEvent(attacker, "")); 84		assertEquals(0, ph.getPlayers().size()); 85	} 86 87	@Test 88	void onPlayerKickTest() { 89		final Player kickPlayer = pt.createPlayer("onPlayerKickTest"); 90		final PvPlayer pvPlayer = ph.get(kickPlayer); 91 92		tagPlayer(pvPlayer); 93		listener.onPlayerKick(new PlayerKickEvent(kickPlayer, "", "")); 94		assertTrue(pvPlayer.isInCombat()); 95 96		Settings.setMatchKickReason(true); 97		tagPlayer(pvPlayer); 98		listener.onPlayerKick(new PlayerKickEvent(kickPlayer, "", "")); 99		assertFalse(pvPlayer.isInCombat());100101		tagPlayer(pvPlayer);102		listener.onPlayerKick(new PlayerKickEvent(kickPlayer, "Kicked for spamming", ""));103		assertTrue(pvPlayer.isInCombat());104	}105106	private PlayerDeathEvent createDeathEvent(final Player player) {107		final PlayerDeathEvent event = mock(PlayerDeathEvent.class);108		when(event.getEntity()).thenReturn(player);109		return event;110	}111112	@Test113	final void regularDeath() {114		final Player player = pt.createPlayer("regularDeath");115		final PvPlayer pDefender = ph.get(player);116		assertFalse(pDefender.isInCombat());117		listener.onPlayerDeath(createDeathEvent(player));118	}119120	@Test121	final void inCombatDeath() {122		final Player attacker = pt.createPlayer("Attacker");123		final PvPlayer pAttacker = ph.get(attacker);124		final Player defender = pt.createPlayer("Defender", attacker);125		final PvPlayer pDefender = ph.get(defender);126127		tagPlayer(pDefender, pAttacker);128		tagPlayer(pAttacker, pDefender);129		listener.onPlayerDeath(createDeathEvent(defender));130		assertFalse(pDefender.isInCombat());131		assertTrue(pAttacker.isInCombat());132133		Settings.setUntagEnemy(true);134		tagPlayer(pDefender, pAttacker);135		tagPlayer(pAttacker, pDefender);136		listener.onPlayerDeath(createDeathEvent(defender));137		assertFalse(pDefender.isInCombat());138		assertFalse(pAttacker.isInCombat());139140		Settings.setSelfTag(true);141		tagPlayer(pAttacker, pAttacker);142		tagPlayer(pDefender, pAttacker);143		tagPlayer(pAttacker, pDefender);144		listener.onPlayerDeath(createDeathEvent(defender));145		assertFalse(pDefender.isInCombat());146		assertFalse(pAttacker.isInCombat());147	}148149	@Test150	final void onCommandTest() {151		final Player player = pt.createPlayer("onCommandTest");152		final PvPlayer pvPlayer = ph.get(player);153		final PlayerCommandPreprocessEvent commandPreprocessEvent = new PlayerCommandPreprocessEvent(player, "/spawn");154155		assertFalse(commandPreprocessEvent.isCancelled());156		listener.onCommand(commandPreprocessEvent);157		assertFalse(commandPreprocessEvent.isCancelled());158159		tagPlayer(pvPlayer);160		listener.onCommand(commandPreprocessEvent);161		assertTrue(commandPreprocessEvent.isCancelled());162		verify(player, atMostOnce()).sendMessage(Messages.getCommandDeniedIncombat());163164		final PlayerCommandPreprocessEvent commandPreprocessEvent2 = new PlayerCommandPreprocessEvent(player, "/tell");165		tagPlayer(pvPlayer);166		listener.onCommand(commandPreprocessEvent2);167		assertFalse(commandPreprocessEvent2.isCancelled());168	}169170}
 32import me.NoChance.PvPManager.Utils.CombatUtils;
 33
 34@ExtendWith(InstanceCreator.class)
 35public class EntityListenerTest { 36 37	private static final PluginTest PT = InstanceCreator.getPt(); 38	private static EntityListener damageListener; 39	private EntityDamageByEntityEvent mockEvent; 40	private EntityDamageByEntityEvent projMockEvent; 41	private static PlayerHandler ph; 42	private static Player attacker; 43	private static Player defender; 44 45	@BeforeAll 46	public static void setupClass() { 47		final PvPManager plugin = PT.getPlugin(); 48		ph = plugin.getPlayerHandler(); 49		damageListener = new EntityListener(ph); 50		Settings.setPvpBlood(false); // avoid loading Material class while testing 51		attacker = PT.getAttacker(); 52		defender = PT.getDefender(); 53	} 54 55	@BeforeEach 56	public final void setup() { 57		ph.getPlayers().clear(); 58	} 59 60	private void createAttack(final boolean cancelled) { 61		mockEvent = createDamageEvent(attacker, defender, cancelled); 62 63		final Projectile proj = mock(Projectile.class); 64		when(proj.getShooter()).thenReturn(attacker); 65		projMockEvent = createDamageEvent(proj, defender, cancelled); 66 67		callEvent(mockEvent); 68		callEvent(projMockEvent); 69	} 70 71	private EntityDamageByEntityEvent createDamageEvent(final Entity attackerEntity, final Entity defenderEntity, final boolean cancelled) { 72		final EntityDamageByEntityEvent event = mock(EntityDamageByEntityEvent.class); 73		when(event.getDamager()).thenReturn(attackerEntity); 74		when(event.getEntity()).thenReturn(defenderEntity); 75		when(event.getDamage()).thenReturn(5.0); 76		Mockito.doCallRealMethod().when(event).setCancelled(ArgumentMatchers.anyBoolean()); 77		when(event.isCancelled()).thenCallRealMethod(); 78		event.setCancelled(cancelled); 79		return event; 80	} 81 82	private void createMobAttack(final boolean mobAttacker, final boolean cancelled) { 83		final Zombie zombie = mock(Zombie.class, RETURNS_MOCKS); 84		if (mobAttacker) { 85			mockEvent = createDamageEvent(zombie, defender, cancelled); 86		} else { 87			mockEvent = createDamageEvent(attacker, zombie, cancelled); 88		} 89 90		final Projectile proj = mock(Projectile.class); 91		when(proj.getShooter()).thenReturn(attacker); 92		if (mobAttacker) { 93			projMockEvent = createDamageEvent(proj, defender, cancelled); 94		} else { 95			projMockEvent = createDamageEvent(proj, zombie, cancelled); 96		} 97 98		callEvent(mockEvent); 99		callEvent(projMockEvent);100	}101102	private void callEvent(final EntityDamageByEntityEvent event) {103		if (!event.isCancelled()) { // ignore cancelled true104			damageListener.onPlayerDamage(event);105		}106		damageListener.onPlayerDamageOverride(event);107		if (!event.isCancelled()) { // ignore cancelled true108			damageListener.onPlayerDamageMonitor(event);109		}110	}111112	@Test113	final void testMobAttack() {114		createMobAttack(false, false);115		assertFalse(mockEvent.isCancelled());116		assertFalse(projMockEvent.isCancelled());117118		createMobAttack(true, false);119		assertFalse(mockEvent.isCancelled());120		assertFalse(projMockEvent.isCancelled());121	}122123	@Test124	final void testSelfTag() {125		final Projectile proj = mock(Projectile.class);126		projMockEvent = createDamageEvent(proj, defender, false);127128		assertFalse(Settings.isSelfTag());129		// attacker different from defender130		when(proj.getShooter()).thenReturn(attacker);131		assertEquals(proj.getShooter(), attacker);132		assertTrue(CombatUtils.isPvP(projMockEvent));133134		// attacker equals defender135		when(proj.getShooter()).thenReturn(defender);136		assertEquals(proj.getShooter(), projMockEvent.getEntity());137		assertFalse(CombatUtils.isPvP(projMockEvent));138139		// now allow self tagging140		Settings.setSelfTag(true);141		assertTrue(Settings.isSelfTag());142		// attacker different from defender143		when(proj.getShooter()).thenReturn(attacker);144		assertEquals(proj.getShooter(), attacker);145		assertTrue(CombatUtils.isPvP(projMockEvent));146147		// attacker equals defender148		when(proj.getShooter()).thenReturn(defender);149		assertEquals(proj.getShooter(), projMockEvent.getEntity());150		assertTrue(CombatUtils.isPvP(projMockEvent));151	}152153	@Test154	final void testNoDamageHits() {155		final Projectile proj = mock(Projectile.class);156		when(proj.getShooter()).thenReturn(attacker);157158		// ignore no damage hits159		assertTrue(Settings.isIgnoreNoDamageHits());160161		projMockEvent = createDamageEvent(proj, defender, false);162		when(projMockEvent.getDamage()).thenReturn(5.0);163		assertTrue(CombatUtils.isPvP(projMockEvent));164165		projMockEvent = createDamageEvent(proj, defender, false);166		when(projMockEvent.getDamage()).thenReturn(0.0);167		assertFalse(CombatUtils.isPvP(projMockEvent));168169		// don't ignore any hits170		Settings.setIgnoreNoDamageHits(false);171		assertFalse(Settings.isIgnoreNoDamageHits());172173		projMockEvent = createDamageEvent(proj, defender, false);174		when(projMockEvent.getDamage()).thenReturn(5.0);175		assertTrue(CombatUtils.isPvP(projMockEvent));176177		projMockEvent = createDamageEvent(proj, defender, false);178		when(projMockEvent.getDamage()).thenReturn(0.0);179		assertTrue(CombatUtils.isPvP(projMockEvent));180	}181182	@Test183	final void cancelNewbie() {184		ph.get(attacker).setNewbie(true);185		createAttack(false);186187		assertEquals(CancelResult.NEWBIE, ph.tryCancel(attacker, defender));188		verify(attacker, times(2)).sendMessage(Messages.newbieBlocked());189190		verify(mockEvent).setCancelled(true);191		verify(projMockEvent).setCancelled(true);192	}193194	@Test195	final void cancelPvPDisabled() {196		ph.get(defender).setPvP(false);197		createAttack(false);198199		assertEquals(CancelResult.PVPDISABLED, ph.tryCancel(attacker, defender));200		verify(attacker, times(2)).sendMessage(Messages.pvpDisabledOther(defender.getName()));201202		verify(mockEvent).setCancelled(true);203		verify(projMockEvent).setCancelled(true);204	}205206	@Test207	final void failCancel() {208		ph.get(defender).setPvP(true);209		ph.get(attacker).setPvP(true);210211		when(attacker.isFlying()).thenReturn(true);212		when(defender.isFlying()).thenReturn(true);213		assertEquals(CancelResult.FAIL, ph.tryCancel(attacker, defender));214		createAttack(false);215		assertTrue(ph.get(attacker).isInCombat());216		assertTrue(ph.get(defender).isInCombat());217		verify(attacker, times(2)).setFlying(false);218		verify(defender, times(2)).setFlying(false);219220		verify(mockEvent, never()).setCancelled(true);221		verify(projMockEvent, never()).setCancelled(true);222	}223224	@Test225	final void overrideCancel() {226		ph.get(attacker).toggleOverride();227		createAttack(false);228229		assertEquals(CancelResult.FAIL_OVERRIDE, ph.tryCancel(attacker, defender));230		assertTrue(ph.get(attacker).isInCombat());231		assertTrue(ph.get(defender).isInCombat());232233		verify(mockEvent, times(1)).setCancelled(false); // only when creating the attack234		verify(projMockEvent, times(1)).setCancelled(false); // only when creating the attack235	}236237	@Test238	final void overrideCancelled() {239		ph.get(attacker).toggleOverride();240		createAttack(true);241242		assertEquals(CancelResult.FAIL_OVERRIDE, ph.tryCancel(attacker, defender));243		assertTrue(ph.get(attacker).isInCombat());244		assertTrue(ph.get(defender).isInCombat());245246		verify(mockEvent).setCancelled(false);247		verify(projMockEvent).setCancelled(false);248	}249250}