runelite-client: fix plugin manager test
loadCorePlugins doesn't throw anymore when a plugin fails to load, just logs
This commit is contained in:
@@ -24,6 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client;
|
package net.runelite.client;
|
||||||
|
|
||||||
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
import com.google.inject.Guice;
|
import com.google.inject.Guice;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -170,6 +171,18 @@ public class RuneLite
|
|||||||
this.gui = gui;
|
this.gui = gui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
public void setClient(Client client)
|
||||||
|
{
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
public void setNotifier(Notifier notifier)
|
||||||
|
{
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
public static Injector getInjector()
|
public static Injector getInjector()
|
||||||
{
|
{
|
||||||
return injector;
|
return injector;
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins;
|
package net.runelite.client.plugins;
|
||||||
|
|
||||||
|
import com.google.common.reflect.ClassPath;
|
||||||
|
import com.google.common.reflect.ClassPath.ClassInfo;
|
||||||
import com.google.inject.Guice;
|
import com.google.inject.Guice;
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
import com.google.inject.Module;
|
import com.google.inject.Module;
|
||||||
@@ -31,13 +33,21 @@ import com.google.inject.grapher.graphviz.GraphvizGrapher;
|
|||||||
import com.google.inject.grapher.graphviz.GraphvizModule;
|
import com.google.inject.grapher.graphviz.GraphvizModule;
|
||||||
import com.google.inject.testing.fieldbinder.BoundFieldModule;
|
import com.google.inject.testing.fieldbinder.BoundFieldModule;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
import joptsimple.OptionSet;
|
import joptsimple.OptionSet;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.client.Notifier;
|
||||||
import net.runelite.client.RuneLite;
|
import net.runelite.client.RuneLite;
|
||||||
import net.runelite.client.RuneLiteModule;
|
import net.runelite.client.RuneLiteModule;
|
||||||
import net.runelite.client.ui.ClientUI;
|
import net.runelite.client.ui.ClientUI;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -50,23 +60,48 @@ import org.mockito.runners.MockitoJUnitRunner;
|
|||||||
@RunWith(MockitoJUnitRunner.class)
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class PluginManagerTest
|
public class PluginManagerTest
|
||||||
{
|
{
|
||||||
|
private static final String PLUGIN_PACKAGE = "net.runelite.client.plugins";
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public TemporaryFolder folder = new TemporaryFolder();
|
public TemporaryFolder folder = new TemporaryFolder();
|
||||||
|
|
||||||
|
private RuneLite runelite;
|
||||||
|
private Set<Class> pluginClasses;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
ClientUI clientUi;
|
ClientUI clientUi;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
Client client;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
Notifier notifier;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void before()
|
public void before() throws IOException
|
||||||
{
|
{
|
||||||
RuneLite.setOptions(mock(OptionSet.class));
|
RuneLite.setOptions(mock(OptionSet.class));
|
||||||
|
|
||||||
Injector injector = Guice.createInjector(new RuneLiteModule(),
|
Injector injector = Guice.createInjector(new RuneLiteModule(),
|
||||||
BoundFieldModule.of(this));
|
BoundFieldModule.of(this));
|
||||||
RuneLite.setInjector(injector);
|
RuneLite.setInjector(injector);
|
||||||
// test with no client bound
|
|
||||||
RuneLite runelite = injector.getInstance(RuneLite.class);
|
runelite = injector.getInstance(RuneLite.class);
|
||||||
runelite.setGui(clientUi);
|
runelite.setGui(clientUi);
|
||||||
|
runelite.setNotifier(notifier);
|
||||||
|
|
||||||
|
// Find plugins we expect to have
|
||||||
|
pluginClasses = new HashSet<>();
|
||||||
|
Set<ClassInfo> classes = ClassPath.from(getClass().getClassLoader()).getTopLevelClassesRecursive(PLUGIN_PACKAGE);
|
||||||
|
for (ClassInfo classInfo : classes)
|
||||||
|
{
|
||||||
|
Class<?> clazz = classInfo.load();
|
||||||
|
PluginDescriptor pluginDescriptor = clazz.getAnnotation(PluginDescriptor.class);
|
||||||
|
if (pluginDescriptor != null)
|
||||||
|
{
|
||||||
|
pluginClasses.add(clazz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +109,28 @@ public class PluginManagerTest
|
|||||||
public void testLoadPlugins() throws Exception
|
public void testLoadPlugins() throws Exception
|
||||||
{
|
{
|
||||||
PluginManager pluginManager = new PluginManager();
|
PluginManager pluginManager = new PluginManager();
|
||||||
|
pluginManager.setOutdated(true);
|
||||||
pluginManager.loadCorePlugins();
|
pluginManager.loadCorePlugins();
|
||||||
|
Collection<Plugin> plugins = pluginManager.getPlugins();
|
||||||
|
long expected = pluginClasses.stream()
|
||||||
|
.map(cl -> (PluginDescriptor) cl.getAnnotation(PluginDescriptor.class))
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.filter(pd -> pd.loadWhenOutdated())
|
||||||
|
.count();
|
||||||
|
assertEquals(expected, plugins.size());
|
||||||
|
|
||||||
|
runelite.setClient(client);
|
||||||
|
|
||||||
|
pluginManager = new PluginManager();
|
||||||
|
pluginManager.loadCorePlugins();
|
||||||
|
plugins = pluginManager.getPlugins();
|
||||||
|
|
||||||
|
expected = pluginClasses.stream()
|
||||||
|
.map(cl -> (PluginDescriptor) cl.getAnnotation(PluginDescriptor.class))
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.filter(pd -> !pd.developerPlugin())
|
||||||
|
.count();
|
||||||
|
assertEquals(expected, plugins.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -84,6 +140,8 @@ public class PluginManagerTest
|
|||||||
modules.add(new GraphvizModule());
|
modules.add(new GraphvizModule());
|
||||||
modules.add(new RuneLiteModule());
|
modules.add(new RuneLiteModule());
|
||||||
|
|
||||||
|
runelite.setClient(client);
|
||||||
|
|
||||||
PluginManager pluginManager = new PluginManager();
|
PluginManager pluginManager = new PluginManager();
|
||||||
pluginManager.loadCorePlugins();
|
pluginManager.loadCorePlugins();
|
||||||
for (Plugin p : pluginManager.getPlugins())
|
for (Plugin p : pluginManager.getPlugins())
|
||||||
|
|||||||
Reference in New Issue
Block a user