/******************************************************************************* * Copyright 2014 Tobias Welther * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.race; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.File; import java.io.IOException; import org.bukkit.Bukkit; import org.bukkit.ChatColor; 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 de.tobiyas.racesandclasses.RacesAndClasses; import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.AbstractHolderManager; import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.AbstractTraitHolder; import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.AbstractTraitHolderTest; import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.exceptions.HolderParsingException; import de.tobiyas.racesandclasses.traitcontainer.TraitStore; import de.tobiyas.racesandclasses.traitcontainer.interfaces.markerinterfaces.Trait; import de.tobiyas.util.config.YAMLConfigExtended; import de.tobiyas.utils.tests.generate.server.GenerateBukkitServer; @RunWith(PowerMockRunner.class) @PrepareForTest({TraitStore.class}) public class RaceContainerTest extends AbstractTraitHolderTest{ public RaceContainerTest() throws IOException { super("test", "[test]", new RaceContainer(new YAMLConfigExtended(File.createTempFile("race", ".yml")), "test")); } @Override protected AbstractHolderManager getHolderManager() { return RacesAndClasses.getPlugin().getRaceManager(); } @Test @Override public void test_config_load_works_with_full_config() { PowerMockito.mockStatic(TraitStore.class); Trait mock = mock(Trait.class); PowerMockito.when(TraitStore.buildTraitByName("NormalArrow", sut)).thenReturn(mock); double manabonus = 42; double raceMaxHealth = 30d; String chatColor = ChatColor.RED.toString(); String chatFormat = "test123"; config.set(holderName + ".config.manabonus", manabonus); config.set(holderName + ".config.racetag", holderTag); config.set(holderName + ".config.raceMaxHealth", raceMaxHealth); config.set(holderName + ".config.chat.color", chatColor); config.set(holderName + ".config.chat.format", chatFormat); try{ sut.load(); RaceContainer container = (RaceContainer) sut; assertEquals(manabonus, container.getManaBonus(), 0.001); assertEquals(raceMaxHealth, container.getRaceMaxHealth(), 0.001); assertEquals(chatColor, container.getRaceChatColor()); assertEquals(chatFormat, container.getRaceChatFormat()); assertEquals(holderTag, container.getTag()); assertEquals(1, sut.getTraits().size()); }catch(HolderParsingException exp){ fail("Config full load failed: " + exp); } } @Test @Override public void test_config_load_works_with_empty_config() { int defaultMana = 0; double defaultHealth = 30; String chatColor = ChatColor.AQUA + "~"; String chatFormat = "test123"; when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().getConfig_defaultHealth()).thenReturn(defaultHealth); when(RacesAndClasses.getPlugin().getConfigManager().getChannelConfig().getConfig_racechat_default_color()).thenReturn(chatColor); when(RacesAndClasses.getPlugin().getConfigManager().getChannelConfig().getConfig_racechat_default_format()).thenReturn(chatFormat); PowerMockito.mockStatic(TraitStore.class); Trait mock = mock(Trait.class); PowerMockito.when(TraitStore.buildTraitByName("NormalArrow", sut)).thenReturn(mock); try{ sut.load(); RaceContainer container = (RaceContainer) sut; assertEquals(defaultMana, container.getManaBonus(), 0.001); assertEquals(defaultHealth, container.getRaceMaxHealth(), 0.001); assertEquals(chatColor, container.getRaceChatColor()); assertEquals(chatFormat, container.getRaceChatFormat()); assertEquals(holderTag, container.getTag()); assertEquals(1, sut.getTraits().size()); }catch(HolderParsingException exp){ fail("Config full load failed: " + exp); } } @Test public void loading_with_empty_config_by_static_constructor_works() throws IOException { double defaultHealth = 30; String chatColor = ChatColor.AQUA + "~"; String chatFormat = "test123"; when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().getConfig_defaultHealth()).thenReturn(defaultHealth); when(RacesAndClasses.getPlugin().getConfigManager().getChannelConfig().getConfig_racechat_default_color()).thenReturn(chatColor); when(RacesAndClasses.getPlugin().getConfigManager().getChannelConfig().getConfig_racechat_default_format()).thenReturn(chatFormat); PowerMockito.mockStatic(TraitStore.class); Trait mock = mock(Trait.class); PowerMockito.when(TraitStore.buildTraitByName(anyString(), any(AbstractTraitHolder.class))).thenReturn(mock); try{ sut.load(); RaceContainer sut2 = RaceContainer.loadRace( new YAMLConfigExtended(File.createTempFile("race", ".yml")), holderName); RaceContainer container = (RaceContainer) sut; assertEquals(sut2.getManaBonus(), container.getManaBonus(), 0.001); assertEquals(sut2.getRaceMaxHealth(), container.getRaceMaxHealth(), 0.001); assertEquals(sut2.getRaceChatColor(), container.getRaceChatColor()); assertEquals(sut2.getRaceChatFormat(), container.getRaceChatFormat()); assertEquals(sut2.getTag(), container.getTag()); assertEquals(sut2.getTraits(), sut.getTraits()); }catch(HolderParsingException exp){ fail("Config full load failed: " + exp); } } @Test public void reloading_adds_STDTraits_NormalArrowTrait(){ PowerMockito.mockStatic(TraitStore.class); Trait mock = mock(Trait.class); PowerMockito.when(TraitStore.buildTraitByName("NormalArrow", sut)).thenReturn(mock); assertTrue(sut.getTraits().isEmpty()); try{ sut.load(); assertTrue(sut.getTraits().size() == 1); }catch(HolderParsingException exp){ fail("reloading adds STD Traits failed: " + exp); } } @Test public void test_editTABEntry_works(){ String playerName = "player"; GenerateBukkitServer.generatePlayerOnServer(playerName); when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_adaptListName()).thenReturn(true); ((RaceContainer)sut ).editTABListEntry(playerName); String name = holderTag + playerName; verify(Bukkit.getPlayer(playerName)).setPlayerListName(name); } @Test public void editTabEntry_with_offline_player_fails(){ String playerName = "player"; when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_adaptListName()).thenReturn(true); ((RaceContainer)sut ).editTABListEntry(playerName); verify(RacesAndClasses.getPlugin().getServer()).getPlayer(playerName); } @Test public void editTabEntry_fails_when_disabled(){ String playerName = "player"; GenerateBukkitServer.generatePlayerOnServer(playerName); when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_adaptListName()).thenReturn(false); ((RaceContainer)sut ).editTABListEntry(playerName); verify(Bukkit.getPlayer(playerName), never()).setPlayerListName(anyString()); } @Test public void editTabEntry_cuts_when_more_as_16_letters() throws IOException{ String playerName = "player"; String longHolderName = "Reaaaaaaly long long name"; GenerateBukkitServer.generatePlayerOnServer(playerName); when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_adaptListName()).thenReturn(true); RaceContainer sut = new RaceContainer( new YAMLConfigExtended(File.createTempFile("race", ".yml")), longHolderName); ((RaceContainer)sut ).editTABListEntry(playerName); String name = "[" + longHolderName + "]" + playerName; verify(Bukkit.getPlayer(playerName)).setPlayerListName(name.substring(0, 15)); } @Test public void std_race_generation_works(){ String raceChatColor = ""; String raceChatFormat = ""; double defaultHealth = 30d; when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().getConfig_defaultRaceName()).thenReturn(holderName); when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().getConfig_defaultRaceTag()).thenReturn(holderTag); when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().getConfig_defaultHealth()).thenReturn(defaultHealth); PowerMockito.mockStatic(TraitStore.class); Trait mock = mock(Trait.class); PowerMockito.when(TraitStore.buildTraitByName(anyString(), any(RaceContainer.class))).thenReturn(mock); RaceContainer sut = RaceContainer.generateSTDRace(); assertEquals(0, sut.getManaBonus(), 0.001); assertEquals(defaultHealth, sut.getRaceMaxHealth(), 0.001); assertEquals(raceChatColor, sut.getRaceChatColor()); assertEquals(raceChatFormat, sut.getRaceChatFormat()); assertEquals(holderTag, sut.getTag()); assertTrue(sut.getPermissions().getPermissions().isEmpty()); assertEquals(0, sut.getArmorPerms().size()); assertEquals(1, sut.getTraits().size()); assertTrue(sut.getParsingExceptionsHappened().isEmpty()); } }