package org.royaldev.royalcommands; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.royaldev.royalcommands.opencsv.CSVReader; import java.io.File; import java.io.FileReader; import java.io.Reader; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.powermock.api.mockito.PowerMockito.mock; import static org.powermock.api.mockito.PowerMockito.when; @RunWith(PowerMockRunner.class) @PrepareForTest({RoyalCommands.class}) public class TestAliases { private YamlConfiguration pluginYml = null; private YamlConfiguration getPluginYml() { if (this.pluginYml == null) { final File pluginFile = new File("src/main/resources/plugin.yml"); assertTrue("No plugin.yml found!", pluginFile.exists()); this.pluginYml = YamlConfiguration.loadConfiguration(pluginFile); } return this.pluginYml; } @Test public void testAliases() throws Throwable { final Logger l = Logger.getLogger("org.royaldev.royalcommands"); final File csv = new File("src/main/resources/items.csv"); assertTrue("No items.csv found!", csv.exists()); final Reader in = new FileReader(csv); final ItemNameManager inm = new ItemNameManager(new CSVReader(in).readAll()); boolean allAliasesExist = true; for (final Material m : Material.values()) { if (inm.aliasExists(m)) continue; if (allAliasesExist) allAliasesExist = false; l.warning("Missing alias for Material " + m.name() + "."); } assertTrue("Missing aliases!", allAliasesExist); } private RoyalCommands makeRoyalCommands() { final RoyalCommands rc = mock(RoyalCommands.class); when(rc.getLogger()).thenReturn(Logger.getAnonymousLogger()); return rc; } @Before public void setUp() throws Throwable { TestHelpers.setInstance(this.makeRoyalCommands()); } @After public void tearDown() throws Throwable { TestHelpers.clearInstance(); } @Test public void testCommandAliases() throws Throwable { final ConfigurationSection reflectCommands = this.getPluginYml().getConfigurationSection("reflectcommands"); final List<String> usedAliases = new ArrayList<>(); for (final String key : reflectCommands.getKeys(false)) { final ConfigurationSection cs = reflectCommands.getConfigurationSection(key); final List<String> aliases = cs.getStringList("aliases"); for (final String alias : aliases) { assertFalse("Alias " + alias + " is reused in command " + key + ".", usedAliases.contains(alias)); } usedAliases.addAll(aliases); } } }