/* * Copyright or © or Copr. Amaury Carrade (2014 - 2016) * * http://amaury.carrade.eu * * This software is governed by the CeCILL-B license under French law and * abiding by the rules of distribution of free software. You can use, * modify and/ or redistribute the software under the terms of the CeCILL-B * license as circulated by CEA, CNRS and INRIA at the following URL * "http://www.cecill.info". * * As a counterpart to the access to the source code and rights to copy, * modify and redistribute granted by the license, users are provided only * with a limited warranty and the software's author, the holder of the * economic rights, and the successive licensors have only limited * liability. * * In this respect, the user's attention is drawn to the risks associated * with loading, using, modifying and/or developing or reproducing the * software by the user in light of its specific status of free software, * that may mean that it is complicated to manipulate, and that also * therefore means that it is reserved for developers and experienced * professionals having in-depth computer knowledge. Users are therefore * encouraged to load and test the software's suitability as regards their * requirements in conditions enabling the security of their systems and/or * data to be ensured and, more generally, to use and operate it in the * same conditions as regards security. * * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-B license and that you accept its terms. */ package eu.carrade.amaury.UHCReloaded.commands; import eu.carrade.amaury.UHCReloaded.TestsUtils; import eu.carrade.amaury.UHCReloaded.UHCReloaded; import eu.carrade.amaury.UHCReloaded.commands.core.AbstractCommand; import eu.carrade.amaury.UHCReloaded.commands.core.AbstractCommandExecutor; import eu.carrade.amaury.UHCReloaded.commands.core.annotations.Command; import fr.zcraft.zlib.components.i18n.I; import fr.zcraft.zlib.components.i18n.I18n; import junit.framework.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import java.util.HashSet; import java.util.Set; @RunWith(PowerMockRunner.class) @PrepareForTest({UHCReloaded.class, I18n.class, I.class}) public class TestCommandsAnnotation { @Test public void testCommandAnnotationIsPresentEverywhere() { TestsUtils.mockStaticPlugin(); TestsUtils.mockI18n(); TestsUtils.mockConfig(); // Data Set<AbstractCommandExecutor> executors = new HashSet<>(); executors.add(new UHCommandExecutor(TestsUtils.getMockedPluginInstance())); // Tests for(AbstractCommandExecutor executor : executors) for (AbstractCommand command : executor.getMainCommands().values()) testCommandAnnotationIsPresentEverywhere(command); } /** * Recursively tests if the command annotation is present on every registered class. * * @param command The command to start with. */ private void testCommandAnnotationIsPresentEverywhere(AbstractCommand command) { Assert.assertTrue("Missing command annotation for the class " + command.getClass().getCanonicalName(), command.getClass().isAnnotationPresent(Command.class)); for(AbstractCommand subCommand : command.getSubcommands().values()) { testCommandAnnotationIsPresentEverywhere(subCommand); } } }