From e5e2abebbd160260285ab8560b4ee2dd5893563e Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Wed, 22 May 2019 23:39:57 -0700 Subject: [PATCH] PluginManagerTest: Ensure config keyNames are not duplicated This adds a new test to ensure plugin configurations do not duplicate the keyName annotation argument to prevent runtime errors. --- .../client/plugins/PluginManagerTest.java | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java index 8f63169574..23196ff1cf 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java @@ -38,6 +38,7 @@ import java.applet.Applet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; @@ -48,6 +49,8 @@ import net.runelite.api.Client; import net.runelite.client.RuneLite; import net.runelite.client.RuneLiteModule; import net.runelite.client.eventbus.EventBus; +import net.runelite.client.config.Config; +import net.runelite.client.config.ConfigItem; import net.runelite.client.rs.ClientUpdateCheckMode; import static org.junit.Assert.assertEquals; import org.junit.Before; @@ -75,6 +78,7 @@ public class PluginManagerTest public Client client; private Set pluginClasses; + private Set configClasses; @Before public void before() throws IOException @@ -85,8 +89,9 @@ public class PluginManagerTest RuneLite.setInjector(injector); - // Find plugins we expect to have + // Find plugins and configs we expect to have pluginClasses = new HashSet<>(); + configClasses = new HashSet<>(); Set classes = ClassPath.from(getClass().getClassLoader()).getTopLevelClassesRecursive(PLUGIN_PACKAGE); for (ClassInfo classInfo : classes) { @@ -95,6 +100,12 @@ public class PluginManagerTest if (pluginDescriptor != null) { pluginClasses.add(clazz); + continue; + } + + if (Config.class.isAssignableFrom(clazz)) + { + configClasses.add(clazz); } } @@ -155,4 +166,37 @@ public class PluginManagerTest } } + @Test + public void ensureNoDuplicateConfigKeyNames() + { + for (final Class clazz : configClasses) + { + final Set configKeyNames = new HashSet<>(); + + for (final Method method : clazz.getMethods()) + { + if (!method.isDefault()) + { + continue; + } + + final ConfigItem annotation = method.getAnnotation(ConfigItem.class); + + if (annotation == null) + { + continue; + } + + final String configKeyName = annotation.keyName(); + + if (configKeyNames.contains(configKeyName)) + { + throw new IllegalArgumentException("keyName " + configKeyName + " is duplicated in " + clazz); + } + + configKeyNames.add(configKeyName); + } + } + } + }