You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TestMain.java 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package com.dmdirc;
  2. import com.dmdirc.actions.ActionManager;
  3. import com.dmdirc.commandline.CommandLineParser;
  4. import com.dmdirc.commandparser.CommandManager;
  5. import com.dmdirc.config.IdentityManager;
  6. import com.dmdirc.config.InvalidIdentityFileException;
  7. import com.dmdirc.plugins.PluginManager;
  8. import java.io.File;
  9. import java.io.IOException;
  10. import static org.mockito.Mockito.*;
  11. /**
  12. * Main subclass to init things needed for testing.
  13. */
  14. public class TestMain extends Main {
  15. private static Main instance;
  16. private final IdentityManager identityManager;
  17. private final ServerManager serverManager;
  18. private final ActionManager actionManager;
  19. private final PluginManager pluginManager;
  20. private final String configdir;
  21. public TestMain(final IdentityManager identityManager,
  22. final ServerManager serverManager,
  23. final ActionManager actionManager,
  24. final CommandLineParser commandLineParser,
  25. final PluginManager pluginManager,
  26. final String configDir) {
  27. super(identityManager, serverManager, actionManager, commandLineParser,
  28. pluginManager, null, configDir);
  29. this.identityManager = identityManager;
  30. this.serverManager = serverManager;
  31. this.actionManager = actionManager;
  32. this.pluginManager = pluginManager;
  33. this.configdir = configDir;
  34. }
  35. /** {@inheritDoc} */
  36. @Override
  37. public void init() {
  38. try {
  39. IdentityManager.getIdentityManager().initialise(configdir);
  40. } catch (InvalidIdentityFileException ex) {
  41. // If a bad config dir exists, try to continue anyway, maybe the
  42. // test doesn't need it.
  43. // DON'T do anything to the user's configuration... (so no calls
  44. // to handleInvalidConfigFile(); here)
  45. }
  46. pluginManager.refreshPlugins();
  47. CommandManager.initCommandManager(IdentityManager.getIdentityManager(), serverManager);
  48. ActionManager.getActionManager().initialise();
  49. }
  50. /**
  51. * Singleton method for convenience so that we don't need to init a billion
  52. * TestMain instances to run tests.
  53. *
  54. * Separate instances of TestMain are available, but probably pointless as
  55. * long as IdentityManager, PluginManager and ConfigManater are still
  56. * singletons.
  57. *
  58. * @return A Singleton instance of TestMain
  59. */
  60. public static Main getTestMain() {
  61. if (instance == null) {
  62. // TODO: Tests probably shouldn't rely on a config dir... Who knows
  63. // what the user has done with their config.
  64. final IdentityManager identityManager = new IdentityManager();
  65. IdentityManager.setIdentityManager(identityManager);
  66. IdentityManager.getIdentityManager().loadVersionIdentity();
  67. final ServerManager serverManager = mock(ServerManager.class);
  68. final ActionManager actionManager = new ActionManager(serverManager, identityManager);
  69. ActionManager.setActionManager(actionManager);
  70. try {
  71. File tempFile = File.createTempFile("dmdirc", "test");
  72. tempFile.delete();
  73. tempFile.mkdir();
  74. tempFile.deleteOnExit();
  75. final String configDirectory = tempFile.getAbsolutePath() + File.separator;
  76. final String pluginDirectory = configDirectory + "plugins" + File.separator;
  77. final PluginManager pluginManager = new PluginManager(identityManager, actionManager, pluginDirectory);
  78. instance = new TestMain(identityManager, serverManager, actionManager, null, pluginManager, configDirectory);
  79. instance.init();
  80. } catch (IOException ex) {
  81. // Blargh.
  82. }
  83. }
  84. return instance;
  85. }
  86. }