1
1
import asyncio
2
2
from unittest .mock import MagicMock
3
3
4
- from irclib .parser import Message , Prefix , TagList
4
+ from irclib .parser import Prefix , TagList
5
5
6
6
from cloudbot .util .func_utils import call_with_args
7
- from plugins .core import chan_track
7
+ from plugins .core import chan_track , server_info
8
8
9
9
10
10
class MockConn :
11
11
def __init__ (self , bot = None ):
12
12
self .name = "foo"
13
13
self .memory = {
14
- "server_info" : {"statuses" : {},},
15
- "server_caps" : {"userhost-in-names" : True , "multi-prefix" : True ,},
14
+ "server_info" : {
15
+ "statuses" : {},
16
+ },
17
+ "server_caps" : {
18
+ "userhost-in-names" : True ,
19
+ "multi-prefix" : True ,
20
+ },
16
21
}
17
22
self .nick = "BotFoo"
18
23
self .bot = bot
24
+ if self .bot :
25
+ self .loop = self .bot .loop
26
+ else :
27
+ self .loop = asyncio .get_event_loop ()
19
28
20
29
def get_statuses (self , chars ):
21
30
return [self .memory ["server_info" ]["statuses" ][c ] for c in chars ]
22
31
23
32
24
33
def test_replace_user_data ():
25
- from plugins .core .chan_track import UsersDict , replace_user_data , Channel
26
- from plugins .core .server_info import handle_prefixes
27
-
28
34
conn = MockConn ()
29
35
serv_info = conn .memory ["server_info" ]
30
- handle_prefixes ("(YohvV)!@%+-" , serv_info )
31
- users = UsersDict (conn )
36
+ server_info . handle_prefixes ("(YohvV)!@%+-" , serv_info )
37
+ users = chan_track . UsersDict (conn )
32
38
conn .memory ["users" ] = users
33
39
34
- chan = Channel ("#test" , conn )
40
+ chan = chan_track . Channel ("#test" , conn )
35
41
chan .data ["new_users" ] = [
36
42
"@+foo!bar@baz" ,
37
43
"@ExampleUser!bar@baz" ,
38
44
"ExampleUser2!bar@baz" ,
39
45
"!@%+-foo1!bar@baz" ,
40
46
]
41
- replace_user_data (conn , chan )
47
+ chan_track . replace_user_data (conn , chan )
42
48
43
49
assert chan .users ["foo" ].user .mask == Prefix ("foo" , "bar" , "baz" )
44
50
assert chan .users ["foo1" ].user .mask == Prefix ("foo1" , "bar" , "baz" )
@@ -52,25 +58,14 @@ def test_replace_user_data():
52
58
53
59
54
60
def test_channel_members ():
55
- from plugins .core .server_info import handle_prefixes , handle_chan_modes
56
- from plugins .core .chan_track import (
57
- get_users ,
58
- get_chans ,
59
- replace_user_data ,
60
- on_nick ,
61
- on_join ,
62
- on_mode ,
63
- on_part ,
64
- on_kick ,
65
- on_quit ,
66
- )
67
-
68
61
conn = MockConn ()
69
62
serv_info = conn .memory ["server_info" ]
70
- handle_prefixes ("(YohvV)!@%+-" , serv_info )
71
- handle_chan_modes ("IXZbegw,k,FHJLWdfjlx,ABCDKMNOPQRSTcimnprstuz" , serv_info )
72
- users = get_users (conn )
73
- chans = get_chans (conn )
63
+ server_info .handle_prefixes ("(YohvV)!@%+-" , serv_info )
64
+ server_info .handle_chan_modes (
65
+ "IXZbegw,k,FHJLWdfjlx,ABCDKMNOPQRSTcimnprstuz" , serv_info
66
+ )
67
+ users = chan_track .get_users (conn )
68
+ chans = chan_track .get_chans (conn )
74
69
75
70
chan = chans .getchan ("#foo" )
76
71
assert chan .name == "#foo"
@@ -81,12 +76,12 @@ def test_channel_members():
81
76
"-ExampleUser2!bar@baz" ,
82
77
"!@%+-foo1!bar@baz" ,
83
78
]
84
- replace_user_data (conn , chan )
79
+ chan_track . replace_user_data (conn , chan )
85
80
86
81
assert users ["exampleuser" ].host == "baz"
87
82
88
83
test_user = users ["exampleuser2" ]
89
- on_nick ("exampleuser2" , ["ExampleUserFoo" ], conn )
84
+ chan_track . on_nick ("exampleuser2" , ["ExampleUserFoo" ], conn )
90
85
91
86
assert test_user .nick == "ExampleUserFoo"
92
87
assert "exampleuserfoo" in chan .users
@@ -95,26 +90,26 @@ def test_channel_members():
95
90
96
91
assert chan .get_member (user ).status == conn .get_statuses ("-" )
97
92
98
- on_join ("nick1" , "user" , "host" , conn , ["#bar" ])
93
+ chan_track . on_join ("nick1" , "user" , "host" , conn , ["#bar" ])
99
94
100
95
assert users ["Nick1" ].host == "host"
101
96
102
97
assert chans ["#Bar" ].users ["Nick1" ].status == conn .get_statuses ("" )
103
98
104
- on_mode (chan .name , [chan .name , "+sop" , test_user .nick ], conn )
99
+ chan_track . on_mode (chan .name , [chan .name , "+sop" , test_user .nick ], conn )
105
100
106
101
assert chan .get_member (test_user ).status == conn .get_statuses ("@-" )
107
102
108
- on_part (chan .name , test_user .nick , conn )
103
+ chan_track . on_part (chan .name , test_user .nick , conn )
109
104
110
105
assert test_user .nick not in chan .users
111
106
112
107
assert "foo" in chan .users
113
- on_kick (chan .name , "foo" , conn )
108
+ chan_track . on_kick (chan .name , "foo" , conn )
114
109
assert "foo" not in chan .users
115
110
116
111
assert "foo1" in chan .users
117
- on_quit ("foo1" , conn )
112
+ chan_track . on_quit ("foo1" , conn )
118
113
assert "foo1" not in chan .users
119
114
120
115
@@ -132,54 +127,30 @@ def test_channel_members():
132
127
133
128
134
129
def test_names_handling ():
135
- from plugins .core .server_info import handle_prefixes , handle_chan_modes
136
- from plugins .core .chan_track import on_join , on_part , on_kick , on_quit , on_names
137
-
138
130
handlers = {
139
- "JOIN" : on_join ,
140
- "PART" : on_part ,
141
- "QUIT" : on_quit ,
142
- "KICK" : on_kick ,
143
- "353" : on_names ,
144
- "366" : on_names ,
145
- }
146
-
147
- chan_pos = {
148
- "JOIN" : 0 ,
149
- "PART" : 0 ,
150
- "KICK" : 0 ,
151
- "353" : 2 ,
152
- "366" : 1 ,
131
+ "JOIN" : chan_track .on_join ,
132
+ "PART" : chan_track .on_part ,
133
+ "QUIT" : chan_track .on_quit ,
134
+ "KICK" : chan_track .on_kick ,
135
+ "353" : chan_track .on_names ,
136
+ "366" : chan_track .on_names ,
153
137
}
154
138
155
139
bot = MagicMock ()
156
140
bot .loop = asyncio .get_event_loop ()
157
141
158
142
conn = MockConn (bot )
159
143
serv_info = conn .memory ["server_info" ]
160
- handle_prefixes ("(YohvV)!@%+-" , serv_info )
161
- handle_chan_modes ("IXZbegw,k,FHJLWdfjlx,ABCDKMNOPQRSTcimnprstuz" , serv_info )
144
+ server_info .handle_prefixes ("(YohvV)!@%+-" , serv_info )
145
+ server_info .handle_chan_modes (
146
+ "IXZbegw,k,FHJLWdfjlx,ABCDKMNOPQRSTcimnprstuz" , serv_info
147
+ )
162
148
163
149
for line in NAMES_MOCK_TRAFFIC :
164
- line = Message .parse (line )
165
- data = {
166
- "nick" : line .prefix .nick ,
167
- "user" : line .prefix .ident ,
168
- "host" : line .prefix .host ,
169
- "conn" : conn ,
170
- "irc_paramlist" : line .parameters ,
171
- "irc_command" : line .command ,
172
- "chan" : None ,
173
- "target" : None ,
174
- }
175
-
176
- if line .command in chan_pos :
177
- data ["chan" ] = line .parameters [chan_pos [line .command ]]
178
-
179
- if line .command == "KICK" :
180
- data ["target" ] = line .parameters [1 ]
150
+ from cloudbot .clients .irc import _IrcProtocol
181
151
182
- call_with_args (handlers [line .command ], data )
152
+ event = _IrcProtocol (conn = conn ).parse_line (line )
153
+ call_with_args (handlers [event .irc_command ], event )
183
154
184
155
185
156
def test_account_tag ():
0 commit comments