소스 검색

Add tests for process001

pull/48/head
Chris Smith 9 년 전
부모
커밋
b86fd69c11
1개의 변경된 파일107개의 추가작업 그리고 17개의 파일을 삭제
  1. 107
    17
      irc/test/com/dmdirc/parser/irc/processors/Process001Test.java

+ 107
- 17
irc/test/com/dmdirc/parser/irc/processors/Process001Test.java 파일 보기

@@ -22,27 +22,117 @@
22 22
 
23 23
 package com.dmdirc.parser.irc.processors;
24 24
 
25
-import com.dmdirc.harness.parser.TestParser;
25
+import com.dmdirc.parser.common.ParserError;
26
+import com.dmdirc.parser.irc.IRCClientInfo;
27
+import com.dmdirc.parser.irc.IRCParser;
28
+import com.dmdirc.parser.irc.ProcessingManager;
29
+
30
+import org.junit.Before;
26 31
 import org.junit.Test;
27
-import static org.junit.Assert.*;
32
+import org.junit.runner.RunWith;
33
+import org.mockito.ArgumentCaptor;
34
+import org.mockito.Mock;
35
+import org.mockito.runners.MockitoJUnitRunner;
36
+
37
+import static org.junit.Assert.assertEquals;
38
+import static org.junit.Assert.assertTrue;
39
+import static org.junit.Assume.assumeFalse;
40
+import static org.mockito.Matchers.any;
41
+import static org.mockito.Matchers.anyBoolean;
42
+import static org.mockito.Matchers.anyString;
43
+import static org.mockito.Matchers.eq;
44
+import static org.mockito.Mockito.doAnswer;
45
+import static org.mockito.Mockito.mock;
46
+import static org.mockito.Mockito.never;
47
+import static org.mockito.Mockito.verify;
48
+import static org.mockito.Mockito.when;
28 49
 
50
+@RunWith(MockitoJUnitRunner.class)
29 51
 public class Process001Test {
30
-       
52
+
53
+    @Mock private IRCParser parser;
54
+    @Mock private ProcessingManager processingManager;
55
+    @Mock private IRCClientInfo localClient;
56
+    private Process001 processor;
57
+
58
+    @Before
59
+    public void setup() {
60
+        when(parser.getLocalClient()).thenReturn(localClient);
61
+        processor = new Process001(parser, processingManager);
62
+    }
63
+
64
+    @Test
65
+    public void testSets001Received() {
66
+        when(localClient.isFake()).thenReturn(true);
67
+        assumeFalse(parser.got001);
68
+        processor.process("001", ":test.server.com", "001", "userName", "Hello!");
69
+        assertTrue(parser.got001);
70
+    }
71
+
72
+    @Test
73
+    public void testUpdatesServerName() {
74
+        when(localClient.isFake()).thenReturn(true);
75
+        processor.process("001", ":test.server.com", "001", "userName", "Hello!");
76
+        verify(parser).updateServerName("test.server.com");
77
+    }
78
+
79
+    @Test
80
+    public void testAddsLocalClientIfFake() {
81
+        when(localClient.isFake()).thenReturn(true);
82
+        processor.process("001", ":test.server.com", "001", "userName", "Hello!");
83
+        verify(parser).addClient(localClient);
84
+    }
85
+
31 86
     @Test
32
-    public void testDuplicate001() {
33
-        final TestParser tp = new TestParser();
34
-        
35
-        assertTrue(tp.getLocalClient().isFake());
36
-        
37
-        tp.injectConnectionStrings();
38
-        
39
-        assertEquals("nick", tp.getLocalClient().getNickname());
40
-        assertFalse(tp.getLocalClient().isFake());
41
-        
42
-        tp.injectLine(":server 001 nick2 :Crazy second 001 for you, nick2");
43
-        
44
-        assertEquals("nick2", tp.getLocalClient().getNickname());
45
-        assertFalse(tp.getLocalClient().isFake());
87
+    public void testUpdatesLocalClientIfFake() {
88
+        when(localClient.isFake()).thenReturn(true);
89
+        processor.process("001", ":test.server.com", "001", "userName", "Hello!");
90
+        verify(localClient).setUserBits(eq("userName"), eq(true), anyBoolean());
91
+        verify(localClient).setFake(false);
92
+    }
93
+
94
+    @Test
95
+    public void testIgnoresDuplicate001WithSameNick() {
96
+        when(localClient.getNickname()).thenReturn("UsernaME");
97
+        processor.process("001", ":test.server.com", "001", "userName", "Hello!");
98
+        verify(parser, never()).addClient(any());
99
+        verify(parser, never()).forceRemoveClient(any());
100
+    }
101
+
102
+    @Test
103
+    public void testReplacesLocalUserOnDuplicate001() {
104
+        when(localClient.getNickname()).thenReturn("UsernaME");
105
+        processor.process("001", ":test.server.com", "001", "newName", "Hello!");
106
+        verify(parser).forceRemoveClient(localClient);
107
+        verify(localClient).setUserBits(eq("newName"), eq(true), anyBoolean());
108
+        verify(parser).addClient(localClient);
109
+    }
110
+
111
+    @Test
112
+    public void testRaisesFatalErrorIfDuplicate001CausesNicknameCollision() {
113
+        setupLocalClientToTrackNicknameChanges();
114
+
115
+        when(parser.isKnownClient("newName")).thenReturn(true);
116
+        when(parser.getClient("newName")).thenReturn(mock(IRCClientInfo.class));
117
+
118
+        processor.process("001", ":test.server.com", "001", "newName", "Hello!");
119
+
120
+        final ArgumentCaptor<ParserError> errorCaptor = ArgumentCaptor.forClass(ParserError.class);
121
+        verify(parser).callErrorInfo(errorCaptor.capture());
122
+        assertEquals(ParserError.ERROR_FATAL, errorCaptor.getValue().getLevel());
123
+    }
124
+
125
+    /**
126
+     * Ensures that the local client mock returns new nicknames after setUserBits is called.
127
+     */
128
+    private void setupLocalClientToTrackNicknameChanges() {
129
+        final StringBuilder nickname = new StringBuilder("UserName");
130
+        when(localClient.getNickname()).thenAnswer(invocation -> nickname.toString());
131
+        doAnswer(invocation -> {
132
+            nickname.setLength(0);
133
+            nickname.append(invocation.getArgumentAt(0, String.class));
134
+            return null;
135
+        }).when(localClient).setUserBits(anyString(), eq(true), anyBoolean());
46 136
     }
47 137
 
48 138
 }

Loading…
취소
저장