Kaynağa Gözat

Pass in most dependencies to Server.

Remove all static/singleton references in the constructor so that
Servers can be instansiated sensibly without all the client existing.

Also change everything that creates a Server to use the appropriate
method in the ServerManager instead of doing it manually.

Depends-On: I3fff818d6e6694163660a36f47d60271d8f0e68e
Change-Id: I9842c20b4e4ff846c9bbf4858da794a843c3b053
Reviewed-on: http://gerrit.dmdirc.com/2655
Reviewed-by: Greg Holmes <greg@dmdirc.com>
Automatic-Compile: DMDirc Build Manager
tags/0.8rc1
Chris Smith 10 yıl önce
ebeveyn
işleme
7243ab1fba

+ 3
- 2
src/com/dmdirc/Main.java Dosyayı Görüntüle

@@ -89,7 +89,8 @@ public class Main {
89 89
     @SuppressWarnings("PMD.AvoidCatchingThrowable")
90 90
     public static void main(final String[] args) {
91 91
         try {
92
-            new Main().init(args);
92
+            mainInstance = new Main();
93
+            mainInstance.init(args);
93 94
         } catch (Throwable ex) {
94 95
             Logger.appError(ErrorLevel.FATAL, "Exception while initialising",
95 96
                     ex);
@@ -105,7 +106,7 @@ public class Main {
105 106
         Thread.setDefaultUncaughtExceptionHandler(new DMDircExceptionHandler());
106 107
 
107 108
         IdentityManager.getIdentityManager().loadVersionIdentity();
108
-        serverManager = new ServerManager(this);
109
+        serverManager = new ServerManager();
109 110
         ActionManager.initActionManager(this, serverManager, IdentityManager.getIdentityManager());
110 111
 
111 112
         final CommandLineParser clp = new CommandLineParser(this, args);

+ 31
- 13
src/com/dmdirc/Server.java Dosyayı Görüntüle

@@ -25,13 +25,13 @@ package com.dmdirc;
25 25
 import com.dmdirc.actions.ActionManager;
26 26
 import com.dmdirc.actions.CoreActionType;
27 27
 import com.dmdirc.actions.wrappers.AliasWrapper;
28
-import com.dmdirc.commandparser.CommandManager;
29 28
 import com.dmdirc.commandparser.CommandType;
30
-import com.dmdirc.commandparser.parsers.ServerCommandParser;
29
+import com.dmdirc.commandparser.parsers.CommandParser;
31 30
 import com.dmdirc.config.ConfigManager;
32 31
 import com.dmdirc.config.Identity;
33 32
 import com.dmdirc.config.IdentityManager;
34 33
 import com.dmdirc.interfaces.AwayStateListener;
34
+import com.dmdirc.interfaces.CommandController;
35 35
 import com.dmdirc.interfaces.ConfigChangeListener;
36 36
 import com.dmdirc.interfaces.Connection;
37 37
 import com.dmdirc.interfaces.InviteListener;
@@ -194,35 +194,53 @@ public class Server extends WritableFrameContainer
194 194
      * the specified profile.
195 195
      *
196 196
      * @since 0.6.3
197
-     * @param manager The servermanager that owns this server.
197
+     * @param manager The server manager that owns this server.
198
+     * @param configManager THe configuration manager to read config settings from.
199
+     * @param commandParser The parser to use for commands in this server's window.
200
+     * @param parserFactory The factory to use to generate parsers.
201
+     * @param windowManager The window manager to register this server with.
202
+     * @param aliasWrapper The actions wrapper to retrieve aliases from.
203
+     * @param commandController The controller to use to retrieve commands.
198 204
      * @param uri The address of the server to connect to
199 205
      * @param profile The profile to use
200 206
      */
201
-    public Server(final ServerManager manager, final URI uri, final Identity profile) {
202
-        super("server-disconnected", getHost(uri), getHost(uri),
203
-                new ConfigManager(uri.getScheme(), "", "", uri.getHost()),
204
-                new ServerCommandParser(
205
-                new ConfigManager(uri.getScheme(), "", "", uri.getHost())),
207
+    public Server(
208
+            final ServerManager manager,
209
+            final ConfigManager configManager,
210
+            final CommandParser commandParser,
211
+            final ParserFactory parserFactory,
212
+            final WindowManager windowManager,
213
+            final AliasWrapper aliasWrapper,
214
+            final CommandController commandController,
215
+            final URI uri,
216
+            final Identity profile) {
217
+        super("server-disconnected",
218
+                getHost(uri),
219
+                getHost(uri),
220
+                configManager,
221
+                commandParser,
206 222
                 Arrays.asList(WindowComponent.TEXTAREA.getIdentifier(),
207 223
                 WindowComponent.INPUTFIELD.getIdentifier(),
208 224
                 WindowComponent.CERTIFICATE_VIEWER.getIdentifier()));
209 225
 
210 226
         this.manager = manager;
211
-        parserFactory = new ParserFactory(manager.getMain().getPluginManager());
227
+        this.parserFactory = parserFactory;
212 228
         setConnectionDetails(uri, profile);
213 229
 
214 230
         manager.registerServer(this);
215
-        WindowManager.getWindowManager().addWindow(this);
231
+        windowManager.addWindow(this);
216 232
 
233
+        // TODO: Server shouldn't have to know about the alias wrapper.
217 234
         tabCompleter.addEntries(TabCompletionType.COMMAND,
218
-                AliasWrapper.getAliasWrapper().getAliases());
235
+                aliasWrapper.getAliases());
219 236
         tabCompleter.addEntries(TabCompletionType.COMMAND,
220
-                CommandManager.getCommandManager().getCommandNames(CommandType.TYPE_SERVER));
237
+                commandController.getCommandNames(CommandType.TYPE_SERVER));
221 238
         tabCompleter.addEntries(TabCompletionType.COMMAND,
222
-                CommandManager.getCommandManager().getCommandNames(CommandType.TYPE_GLOBAL));
239
+                commandController.getCommandNames(CommandType.TYPE_GLOBAL));
223 240
 
224 241
         updateIcon();
225 242
 
243
+        // TODO: Don't start timers in the constructor!
226 244
         whoTimer = new Timer("Server Who Timer");
227 245
         whoTimer.schedule(new TimerTask() {
228 246
             @Override

+ 21
- 22
src/com/dmdirc/ServerManager.java Dosyayı Görüntüle

@@ -22,12 +22,17 @@
22 22
 
23 23
 package com.dmdirc;
24 24
 
25
+import com.dmdirc.actions.wrappers.AliasWrapper;
26
+import com.dmdirc.commandparser.CommandManager;
27
+import com.dmdirc.commandparser.parsers.ServerCommandParser;
28
+import com.dmdirc.config.ConfigManager;
25 29
 import com.dmdirc.config.Identity;
26 30
 import com.dmdirc.config.IdentityManager;
27 31
 import com.dmdirc.interfaces.ServerFactory;
28 32
 import com.dmdirc.logger.ErrorLevel;
29 33
 import com.dmdirc.logger.Logger;
30 34
 import com.dmdirc.parser.common.ChannelJoinRequest;
35
+import com.dmdirc.ui.WindowManager;
31 36
 
32 37
 import java.net.URI;
33 38
 import java.net.URISyntaxException;
@@ -42,34 +47,30 @@ import java.util.concurrent.CopyOnWriteArraySet;
42 47
  */
43 48
 public class ServerManager implements ServerFactory {
44 49
 
45
-    /** Main that owns this ServerManager. */
46
-    private final Main main;
47
-
48 50
     /** All servers that currently exist. */
49 51
     private final Set<Server> servers = new CopyOnWriteArraySet<Server>();
50 52
 
51 53
     /**
52 54
      * Creates a new instance of ServerManager.
53 55
      */
54
-    public ServerManager(final Main main) {
55
-        this.main = main;
56
-    }
57
-
58
-    /**
59
-     * Get the Main that owns this ServerManager.
60
-     *
61
-     * @return The Main that owns this ServerManager.
62
-     * @Deprecated Global state is bad.
63
-     */
64
-    @Deprecated
65
-    public Main getMain() {
66
-        return main;
56
+    public ServerManager() {
67 57
     }
68 58
 
69 59
     /** {@inheritDoc} */
70 60
     @Override
71 61
     public Server createServer(final URI uri, final Identity profile) {
72
-        return new Server(this, uri, profile);
62
+        final ConfigManager configManager = new ConfigManager(uri.getScheme(), "", "", uri.getHost());
63
+
64
+        return new Server(
65
+                this,
66
+                configManager,
67
+                new ServerCommandParser(configManager),
68
+                new ParserFactory(Main.mainInstance.getPluginManager()),
69
+                WindowManager.getWindowManager(),
70
+                AliasWrapper.getAliasWrapper(),
71
+                CommandManager.getCommandManager(),
72
+                uri,
73
+                profile);
73 74
     }
74 75
 
75 76
     /**
@@ -212,7 +213,7 @@ public class ServerManager implements ServerFactory {
212 213
         }
213 214
 
214 215
         if (server == null) {
215
-            server = new Server(this, uri, profile);
216
+            server = createServer(uri, profile);
216 217
             server.connect();
217 218
             return server;
218 219
         }
@@ -248,10 +249,8 @@ public class ServerManager implements ServerFactory {
248 249
 
249 250
         if (connectedServer == null) {
250 251
             try {
251
-                final Server server = new Server(this, new URI("irc://irc.quakenet.org/DMDirc"),
252
-                        IdentityManager.getIdentityManager()
253
-                        .getIdentitiesByType("profile").get(0));
254
-                server.connect();
252
+                connectToAddress(new URI("irc://irc.quakenet.org/DMDirc"),
253
+                        IdentityManager.getIdentityManager().getIdentitiesByType("profile").get(0));
255 254
             } catch (URISyntaxException ex) {
256 255
                 Logger.appError(ErrorLevel.MEDIUM, "Unable to construct new server", ex);
257 256
             }

+ 1
- 1
src/com/dmdirc/actions/wrappers/AliasWrapper.java Dosyayı Görüntüle

@@ -42,7 +42,7 @@ import java.util.List;
42 42
 /**
43 43
  * Encapsulates alias actions.
44 44
  */
45
-public final class AliasWrapper extends ActionGroup {
45
+public class AliasWrapper extends ActionGroup {
46 46
 
47 47
     /** Singleton instance of the alias wrapper. */
48 48
     private static AliasWrapper me;

+ 46
- 73
test/com/dmdirc/ServerManagerTest.java Dosyayı Görüntüle

@@ -25,7 +25,7 @@ package com.dmdirc;
25 25
 import com.dmdirc.parser.common.ChannelJoinRequest;
26 26
 
27 27
 import org.junit.After;
28
-import org.junit.BeforeClass;
28
+import org.junit.Before;
29 29
 import org.junit.Ignore;
30 30
 import org.junit.Test;
31 31
 
@@ -34,66 +34,43 @@ import static org.mockito.Mockito.*;
34 34
 
35 35
 public class ServerManagerTest {
36 36
 
37
-    @BeforeClass
38
-    public static void setUp() throws Exception {
39
-        TestMain.getTestMain();
37
+    private ServerManager serverManager;
38
+
39
+    @Before
40
+    public void setUp() throws Exception {
41
+        serverManager = new ServerManager();
40 42
     }
41 43
 
42 44
     @After
43 45
     public void tearDown() {
44
-        for (Server server : TestMain.getTestMain().getServerManager().getServers()) {
45
-            TestMain.getTestMain().getServerManager().unregisterServer(server);
46
+        for (Server server : serverManager.getServers()) {
47
+            serverManager.unregisterServer(server);
46 48
         }
47 49
     }
48 50
 
49
-    @Test
50
-    public void testGetServerManager() {
51
-        final ServerManager resultA = TestMain.getTestMain().getServerManager();
52
-        final ServerManager resultB = TestMain.getTestMain().getServerManager();
53
-
54
-        assertNotNull(resultA);
55
-        assertTrue(resultA instanceof ServerManager);
56
-        assertEquals(resultA, resultB);
57
-    }
58
-
59 51
     @Test
60 52
     public void testRegisterServer() {
61 53
         final Server server = mock(Server.class);
62
-
63
-        final ServerManager instance = TestMain.getTestMain().getServerManager();
64
-
65
-        instance.registerServer(server);
66
-
67
-        assertEquals(1, instance.numServers());
54
+        serverManager.registerServer(server);
55
+        assertEquals(1, serverManager.numServers());
68 56
     }
69 57
 
70 58
     @Test
71 59
     public void testUnregisterServer() {
72 60
         final Server server = mock(Server.class);
73
-
74
-        final ServerManager instance = TestMain.getTestMain().getServerManager();
75
-
76
-        instance.registerServer(server);
77
-        instance.unregisterServer(server);
78
-
79
-        assertEquals(0, instance.numServers());
61
+        serverManager.registerServer(server);
62
+        serverManager.unregisterServer(server);
63
+        assertEquals(0, serverManager.numServers());
80 64
     }
81 65
 
82 66
     @Test
83 67
     public void testNumServers() {
84
-        final ServerManager instance = TestMain.getTestMain().getServerManager();
85
-
86
-        assertEquals(instance.getServers().size(), instance.numServers());
87
-
68
+        assertEquals(serverManager.getServers().size(), serverManager.numServers());
88 69
         final Server server = mock(Server.class);
89
-
90
-        instance.registerServer(server);
91
-
92
-        assertEquals(instance.getServers().size(), instance.numServers());
93
-
94
-        instance.unregisterServer(server);
95
-
96
-        assertEquals(instance.getServers().size(), instance.numServers());
70
+        serverManager.registerServer(server);
71
+        assertEquals(serverManager.getServers().size(), serverManager.numServers());
72
+        serverManager.unregisterServer(server);
73
+        assertEquals(serverManager.getServers().size(), serverManager.numServers());
97 74
     }
98 75
 
99 76
     @Test
@@ -103,14 +80,12 @@ public class ServerManagerTest {
103 80
         when(serverA.getAddress()).thenReturn("255.255.255.255");
104 81
         when(serverB.getAddress()).thenReturn("255.255.255.254");
105 82
 
106
-        final ServerManager sm = TestMain.getTestMain().getServerManager();
83
+        serverManager.registerServer(serverA);
84
+        serverManager.registerServer(serverB);
107 85
 
108
-        sm.registerServer(serverA);
109
-        sm.registerServer(serverB);
110
-
111
-        assertEquals(serverA, sm.getServersByAddress("255.255.255.255").get(0));
112
-        assertEquals(serverB, sm.getServersByAddress("255.255.255.254").get(0));
113
-        assertEquals(0, sm.getServersByAddress("255.255.255.253").size());
86
+        assertEquals(serverA, serverManager.getServersByAddress("255.255.255.255").get(0));
87
+        assertEquals(serverB, serverManager.getServersByAddress("255.255.255.254").get(0));
88
+        assertEquals(0, serverManager.getServersByAddress("255.255.255.253").size());
114 89
     }
115 90
 
116 91
     @Test
@@ -123,27 +98,25 @@ public class ServerManagerTest {
123 98
         when(serverB.isNetwork("Net2")).thenReturn(true);
124 99
         when(serverC.isNetwork("Net2")).thenReturn(true);
125 100
 
126
-        final ServerManager sm = TestMain.getTestMain().getServerManager();
127
-
128
-        sm.registerServer(serverA);
129
-        sm.registerServer(serverB);
130
-        sm.registerServer(serverC);
101
+        serverManager.registerServer(serverA);
102
+        serverManager.registerServer(serverB);
103
+        serverManager.registerServer(serverC);
131 104
 
132
-        assertEquals(1, sm.getServersByNetwork("Net1").size());
133
-        assertEquals(serverA, sm.getServersByNetwork("Net1").get(0));
105
+        assertEquals(1, serverManager.getServersByNetwork("Net1").size());
106
+        assertEquals(serverA, serverManager.getServersByNetwork("Net1").get(0));
134 107
 
135
-        assertEquals(2, sm.getServersByNetwork("Net2").size());
136
-        assertEquals(serverB, sm.getServersByNetwork("Net2").get(0));
137
-        assertEquals(serverC, sm.getServersByNetwork("Net2").get(1));
108
+        assertEquals(2, serverManager.getServersByNetwork("Net2").size());
109
+        assertEquals(serverB, serverManager.getServersByNetwork("Net2").get(0));
110
+        assertEquals(serverC, serverManager.getServersByNetwork("Net2").get(1));
138 111
 
139
-        assertEquals(0, sm.getServersByNetwork("Net3").size());
112
+        assertEquals(0, serverManager.getServersByNetwork("Net3").size());
140 113
     }
141 114
 
142 115
     @Test
143 116
     public void testCloseAll() {
144 117
         final Server serverA = mock(Server.class);
145
-        TestMain.getTestMain().getServerManager().registerServer(serverA);
146
-        TestMain.getTestMain().getServerManager().closeAll();
118
+        serverManager.registerServer(serverA);
119
+        serverManager.closeAll();
147 120
         verify(serverA).disconnect();
148 121
         verify(serverA).close();
149 122
     }
@@ -151,8 +124,8 @@ public class ServerManagerTest {
151 124
     @Test
152 125
     public void testCloseAllWithMessage() {
153 126
         final Server serverA = mock(Server.class);
154
-        TestMain.getTestMain().getServerManager().registerServer(serverA);
155
-        TestMain.getTestMain().getServerManager().closeAll("message here");
127
+        serverManager.registerServer(serverA);
128
+        serverManager.closeAll("message here");
156 129
         verify(serverA).disconnect("message here");
157 130
         verify(serverA).close();
158 131
     }
@@ -160,8 +133,8 @@ public class ServerManagerTest {
160 133
     @Test
161 134
     public void testDisconnectAll() {
162 135
         final Server serverA = mock(Server.class);
163
-        TestMain.getTestMain().getServerManager().registerServer(serverA);
164
-        TestMain.getTestMain().getServerManager().disconnectAll("message here");
136
+        serverManager.registerServer(serverA);
137
+        serverManager.disconnectAll("message here");
165 138
         verify(serverA).disconnect("message here");
166 139
     }
167 140
 
@@ -172,8 +145,8 @@ public class ServerManagerTest {
172 145
         when(serverA.hasChannel("#DMDirc")).thenReturn(true);
173 146
         when(serverA.getState()).thenReturn(ServerState.CONNECTED);
174 147
 
175
-        TestMain.getTestMain().getServerManager().registerServer(serverA);
176
-        TestMain.getTestMain().getServerManager().joinDevChat();
148
+        serverManager.registerServer(serverA);
149
+        serverManager.joinDevChat();
177 150
 
178 151
         verify(serverA).join(new ChannelJoinRequest("#DMDirc"));
179 152
     }
@@ -185,8 +158,8 @@ public class ServerManagerTest {
185 158
         when(serverA.hasChannel("#DMDirc")).thenReturn(false);
186 159
         when(serverA.getState()).thenReturn(ServerState.CONNECTED);
187 160
 
188
-        TestMain.getTestMain().getServerManager().registerServer(serverA);
189
-        TestMain.getTestMain().getServerManager().joinDevChat();
161
+        serverManager.registerServer(serverA);
162
+        serverManager.joinDevChat();
190 163
 
191 164
         verify(serverA).join(new ChannelJoinRequest("#DMDirc"));
192 165
     }
@@ -202,12 +175,12 @@ public class ServerManagerTest {
202 175
         when(serverB.getNetwork()).thenReturn("Foonet");
203 176
         when(serverB.getState()).thenReturn(ServerState.CONNECTED);
204 177
 
205
-        TestMain.getTestMain().getServerManager().registerServer(serverA);
206
-        TestMain.getTestMain().getServerManager().registerServer(serverB);
178
+        serverManager.registerServer(serverA);
179
+        serverManager.registerServer(serverB);
207 180
 
208
-        TestMain.getTestMain().getServerManager().joinDevChat();
181
+        serverManager.joinDevChat();
209 182
 
210
-        assertEquals(3, TestMain.getTestMain().getServerManager().numServers());
183
+        assertEquals(3, serverManager.numServers());
211 184
     }
212 185
 
213 186
 }

+ 38
- 17
test/com/dmdirc/ServerTest.java Dosyayı Görüntüle

@@ -22,27 +22,53 @@
22 22
 
23 23
 package com.dmdirc;
24 24
 
25
-import com.dmdirc.commandparser.CommandManager;
26
-import com.dmdirc.config.IdentityManager;
25
+import com.dmdirc.actions.wrappers.AliasWrapper;
26
+import com.dmdirc.commandparser.parsers.CommandParser;
27
+import com.dmdirc.config.ConfigManager;
28
+import com.dmdirc.config.Identity;
29
+import com.dmdirc.interfaces.CommandController;
30
+import com.dmdirc.ui.WindowManager;
27 31
 
28
-import com.dmdirc.plugins.PluginManager;
29 32
 import java.net.URI;
30 33
 
31
-import org.junit.BeforeClass;
34
+import org.junit.Before;
32 35
 import org.junit.Test;
36
+import org.mockito.Mock;
37
+import org.mockito.Mockito;
38
+import org.mockito.MockitoAnnotations;
33 39
 
40
+import static org.mockito.Mockito.*;
34 41
 import static org.junit.Assert.*;
35 42
 
36 43
 public class ServerTest {
37 44
 
38
-    private static Server server;
39
-
40
-    @BeforeClass
41
-    public static void setUp() throws Exception {
42
-        TestMain.getTestMain();
43
-        server = new Server(TestMain.getTestMain().getServerManager(), new URI("irc-test://255.255.255.255"),
44
-                IdentityManager.getIdentityManager()
45
-                .getIdentitiesByType("profile").get(0));
45
+    @Mock private ServerManager serverManager;
46
+    @Mock private Identity profile;
47
+    @Mock private ConfigManager configManager;
48
+    @Mock private CommandParser commandParser;
49
+    @Mock private ParserFactory parserFactory;
50
+    @Mock private WindowManager windowManager;
51
+    @Mock private AliasWrapper aliasWrapper;
52
+    @Mock private CommandController commandController;
53
+
54
+    private Server server;
55
+
56
+    @Before
57
+    public void setUp() throws Exception {
58
+        MockitoAnnotations.initMocks(this);
59
+        when(configManager.getOptionInt(anyString(), anyString()))
60
+                .thenReturn(Integer.MAX_VALUE);
61
+
62
+        server = new Server(
63
+                serverManager,
64
+                configManager,
65
+                commandParser,
66
+                parserFactory,
67
+                windowManager,
68
+                aliasWrapper,
69
+                commandController,
70
+                new URI("irc-test://255.255.255.255"),
71
+                profile);
46 72
     }
47 73
 
48 74
     @Test
@@ -64,19 +90,14 @@ public class ServerTest {
64 90
 
65 91
     @Test
66 92
     public void testDuplicateInviteRemoval() {
67
-        server.disconnect();
68
-
69 93
         server.addInvite(new Invite(server, "#chan1", "a!b@c"));
70 94
         server.addInvite(new Invite(server, "#chan1", "d!e@f"));
71 95
 
72 96
         assertEquals(1, server.getInvites().size());
73
-        server.removeInvites("#chan1");
74 97
     }
75 98
 
76 99
     @Test
77 100
     public void testRemoveInvites() {
78
-        server.disconnect();
79
-
80 101
         server.addInvite(new Invite(server, "#chan1", "a!b@c"));
81 102
         server.addInvite(new Invite(server, "#chan2", "d!e@f"));
82 103
 

+ 1
- 1
test/com/dmdirc/TestMain.java Dosyayı Görüntüle

@@ -28,7 +28,7 @@ public class TestMain extends Main {
28 28
             // DON'T do anything to the user's configuration... (so no calls
29 29
             // to handleInvalidConfigFile(); here)
30 30
         }
31
-        serverManager = new ServerManager(this);
31
+        serverManager = new ServerManager();
32 32
         ActionManager.initActionManager(this, serverManager, IdentityManager.getIdentityManager());
33 33
         pluginManager = new PluginManager(IdentityManager.getIdentityManager(), this);
34 34
         pluginManager.refreshPlugins();

Loading…
İptal
Kaydet