irc.client: nick command parsing, namelist notification after join, tests. Make +normal+ the default state for participants, not 'f'

db4
Bruno Deferrari 2008-07-31 21:35:09 -03:00
parent 5fd42c4e54
commit fcc1ee9cdd
4 changed files with 44 additions and 14 deletions

View File

@ -103,7 +103,7 @@ IN: irc.client.tests
] unit-test ] unit-test
! Participants lists tests ! Participants lists tests
{ H{ { "somedude" f } } } [ { H{ { "somedude" +normal+ } } } [
{ ":somedude!n=user@isp.net JOIN :#factortest" } make-client { ":somedude!n=user@isp.net JOIN :#factortest" } make-client
{ [ "factorbot" set-nick ] { [ "factorbot" set-nick ]
[ listeners>> [ listeners>>
@ -115,13 +115,13 @@ IN: irc.client.tests
} cleave } cleave
] unit-test ] unit-test
{ H{ { "somedude2" f } } } [ { H{ { "somedude2" +normal+ } } } [
{ ":somedude!n=user@isp.net PART #factortest" } make-client { ":somedude!n=user@isp.net PART #factortest" } make-client
{ [ "factorbot" set-nick ] { [ "factorbot" set-nick ]
[ listeners>> [ listeners>>
[ "#factortest" [ <irc-channel-listener> [ "#factortest" [ <irc-channel-listener>
H{ { "somedude2" f } H{ { "somedude2" +normal+ }
{ "somedude" f } } clone >>participants ] keep { "somedude" +normal+ } } clone >>participants ] keep
] dip set-at ] ] dip set-at ]
[ connect-irc ] [ connect-irc ]
[ drop 0.1 seconds sleep ] [ drop 0.1 seconds sleep ]
@ -130,13 +130,13 @@ IN: irc.client.tests
} cleave } cleave
] unit-test ] unit-test
{ H{ { "somedude2" f } } } [ { H{ { "somedude2" +normal+ } } } [
{ ":somedude!n=user@isp.net QUIT" } make-client { ":somedude!n=user@isp.net QUIT" } make-client
{ [ "factorbot" set-nick ] { [ "factorbot" set-nick ]
[ listeners>> [ listeners>>
[ "#factortest" [ <irc-channel-listener> [ "#factortest" [ <irc-channel-listener>
H{ { "somedude2" f } H{ { "somedude2" +normal+ }
{ "somedude" f } } clone >>participants ] keep { "somedude" +normal+ } } clone >>participants ] keep
] dip set-at ] ] dip set-at ]
[ connect-irc ] [ connect-irc ]
[ drop 0.1 seconds sleep ] [ drop 0.1 seconds sleep ]
@ -145,13 +145,13 @@ IN: irc.client.tests
} cleave } cleave
] unit-test ] unit-test
{ H{ { "somedude2" f } } } [ { H{ { "somedude2" +normal+ } } } [
{ ":somedude2!n=user2@isp.net KICK #factortest somedude" } make-client { ":somedude2!n=user2@isp.net KICK #factortest somedude" } make-client
{ [ "factorbot" set-nick ] { [ "factorbot" set-nick ]
[ listeners>> [ listeners>>
[ "#factortest" [ <irc-channel-listener> [ "#factortest" [ <irc-channel-listener>
H{ { "somedude2" f } H{ { "somedude2" +normal+ }
{ "somedude" f } } clone >>participants ] keep { "somedude" +normal+ } } clone >>participants ] keep
] dip set-at ] ] dip set-at ]
[ connect-irc ] [ connect-irc ]
[ drop 0.1 seconds sleep ] [ drop 0.1 seconds sleep ]
@ -159,3 +159,17 @@ IN: irc.client.tests
[ terminate-irc ] [ terminate-irc ]
} cleave } cleave
] unit-test ] unit-test
! Namelist notification
{ T{ participant-changed f f f } } [
{ ":ircserver.net 353 factorbot @ #factortest :@factorbot "
":ircserver.net 366 factorbot #factortest :End of /NAMES list." } make-client
{ [ "factorbot" set-nick ]
[ listeners>>
[ "#factortest" [ <irc-channel-listener> ] keep ] dip set-at ]
[ connect-irc ]
[ drop 0.1 seconds sleep ]
[ listeners>> [ "#factortest" ] dip at [ read-message drop ] [ read-message ] bi ]
[ terminate-irc ]
} cleave
] unit-test

View File

@ -220,7 +220,7 @@ M: privmsg handle-incoming-irc ( privmsg -- )
M: join handle-incoming-irc ( join -- ) M: join handle-incoming-irc ( join -- )
{ [ maybe-forward-join ] { [ maybe-forward-join ]
[ dup trailing>> to-listener ] [ dup trailing>> to-listener ]
[ [ drop f ] [ prefix>> parse-name ] [ trailing>> ] tri add-participant ] [ [ drop +normal+ ] [ prefix>> parse-name ] [ trailing>> ] tri add-participant ]
[ handle-participant-change ] [ handle-participant-change ]
} cleave ; } cleave ;
@ -252,8 +252,10 @@ M: quit handle-incoming-irc ( quit -- )
[ >nick/mode 2array ] map >hashtable ; [ >nick/mode 2array ] map >hashtable ;
M: names-reply handle-incoming-irc ( names-reply -- ) M: names-reply handle-incoming-irc ( names-reply -- )
[ names-reply>participants ] [ channel>> listener> ] bi [ names-reply>participants ] [ channel>> listener> ] bi [
[ (>>participants) ] [ drop ] if* ; [ (>>participants) ]
[ [ f f <participant-changed> ] dip name>> to-listener ] bi
] [ drop ] if* ;
M: irc-broadcasted-message handle-incoming-irc ( irc-broadcasted-message -- ) M: irc-broadcasted-message handle-incoming-irc ( irc-broadcasted-message -- )
broadcast-message-to-listeners ; broadcast-message-to-listeners ;

View File

@ -40,8 +40,18 @@ mode new
"ircserver.net" >>prefix "ircserver.net" >>prefix
"MODE" >>command "MODE" >>command
{ "#factortest" "+ns" } >>parameters { "#factortest" "+ns" } >>parameters
"#factortest" >>channel "#factortest" >>channel
"+ns" >>mode "+ns" >>mode
1array 1array
[ ":ircserver.net MODE #factortest +ns" [ ":ircserver.net MODE #factortest +ns"
parse-irc-line f >>timestamp ] unit-test
nick new
":someuser!n=user@some.where NICK :someuser2" >>line
"someuser!n=user@some.where" >>prefix
"NICK" >>command
{ } >>parameters
"someuser2" >>trailing
1array
[ ":someuser!n=user@some.where NICK :someuser2"
parse-irc-line f >>timestamp ] unit-test parse-irc-line f >>timestamp ] unit-test

View File

@ -12,6 +12,7 @@ TUPLE: ping < irc-message ;
TUPLE: join < irc-message ; TUPLE: join < irc-message ;
TUPLE: part < irc-message channel ; TUPLE: part < irc-message channel ;
TUPLE: quit < irc-message ; TUPLE: quit < irc-message ;
TUPLE: nick < irc-message ;
TUPLE: privmsg < irc-message name ; TUPLE: privmsg < irc-message name ;
TUPLE: kick < irc-message channel who ; TUPLE: kick < irc-message channel who ;
TUPLE: roomlist < irc-message channel names ; TUPLE: roomlist < irc-message channel names ;
@ -34,6 +35,7 @@ M: ping irc-command-string ( ping -- string ) drop "PING" ;
M: join irc-command-string ( join -- string ) drop "JOIN" ; M: join irc-command-string ( join -- string ) drop "JOIN" ;
M: part irc-command-string ( part -- string ) drop "PART" ; M: part irc-command-string ( part -- string ) drop "PART" ;
M: quit irc-command-string ( quit -- string ) drop "QUIT" ; M: quit irc-command-string ( quit -- string ) drop "QUIT" ;
M: nick irc-command-string ( nick -- string ) drop "NICK" ;
M: privmsg irc-command-string ( privmsg -- string ) drop "PRIVMSG" ; M: privmsg irc-command-string ( privmsg -- string ) drop "PRIVMSG" ;
M: notice irc-command-string ( notice -- string ) drop "NOTICE" ; M: notice irc-command-string ( notice -- string ) drop "NOTICE" ;
M: mode irc-command-string ( mode -- string ) drop "MODE" ; M: mode irc-command-string ( mode -- string ) drop "MODE" ;
@ -46,6 +48,7 @@ M: ping irc-command-parameters ( ping -- seq ) drop { } ;
M: join irc-command-parameters ( join -- seq ) drop { } ; M: join irc-command-parameters ( join -- seq ) drop { } ;
M: part irc-command-parameters ( part -- seq ) name>> 1array ; M: part irc-command-parameters ( part -- seq ) name>> 1array ;
M: quit irc-command-parameters ( quit -- seq ) drop { } ; M: quit irc-command-parameters ( quit -- seq ) drop { } ;
M: nick irc-command-parameters ( nick -- seq ) drop { } ;
M: privmsg irc-command-parameters ( privmsg -- seq ) name>> 1array ; M: privmsg irc-command-parameters ( privmsg -- seq ) name>> 1array ;
M: notice irc-command-parameters ( norice -- seq ) type>> 1array ; M: notice irc-command-parameters ( norice -- seq ) type>> 1array ;
M: kick irc-command-parameters ( kick -- seq ) M: kick irc-command-parameters ( kick -- seq )
@ -110,6 +113,7 @@ PRIVATE>
{ "353" [ names-reply ] } { "353" [ names-reply ] }
{ "JOIN" [ join ] } { "JOIN" [ join ] }
{ "PART" [ part ] } { "PART" [ part ] }
{ "NICK" [ nick ] }
{ "PRIVMSG" [ privmsg ] } { "PRIVMSG" [ privmsg ] }
{ "QUIT" [ quit ] } { "QUIT" [ quit ] }
{ "MODE" [ mode ] } { "MODE" [ mode ] }