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}
JUnit5 test classes and methods should be package-private.
Unlike JUnit4 which required all the test classes and methods to be declared public
, in JUnit5 they can be anything but private
.
To enforce maximum encapsulation, it is recommended to declare test classes and methods as package-private.
public class MyTest {
@Test
public void testThis() {
// ..test things
}
}
Consider making your test classes and methods package-private.
class MyTest {
@Test
void testThis() {
// ..test things
}
}