]> gitweb.factorcode.org Git - factor.git/commitdiff
irc.client: nick command parsing, namelist notification after join, tests. Make ...
authorBruno Deferrari <utizoc@gmail.com>
Fri, 1 Aug 2008 00:35:09 +0000 (21:35 -0300)
committerBruno Deferrari <utizoc@gmail.com>
Fri, 1 Aug 2008 00:45:35 +0000 (21:45 -0300)
extra/irc/client/client-tests.factor
extra/irc/client/client.factor
extra/irc/messages/messages-tests.factor
extra/irc/messages/messages.factor

index 08307a2d5c59b36d5d06990e43f4c2f073fc664b..e021ff4ff4397683c9cdedc6d7b71242da54dd82 100644 (file)
@@ -103,7 +103,7 @@ IN: irc.client.tests
     ] unit-test
 
 ! Participants lists tests
-{ H{ { "somedude" f } } } [
+{ H{ { "somedude" +normal+ } } } [
     { ":somedude!n=user@isp.net JOIN :#factortest" } make-client
     { [ "factorbot" set-nick ]
       [ listeners>>
@@ -115,13 +115,13 @@ IN: irc.client.tests
     } cleave
     ] unit-test
 
-{ H{ { "somedude2" f } } } [
+{ H{ { "somedude2" +normal+ } } } [
     { ":somedude!n=user@isp.net PART #factortest" } make-client
     { [ "factorbot" set-nick ]
       [ listeners>>
         [ "#factortest" [ <irc-channel-listener>
-                          H{ { "somedude2" f }
-                             { "somedude" f } } clone >>participants ] keep
+                          H{ { "somedude2" +normal+ }
+                             { "somedude" +normal+ } } clone >>participants ] keep
         ] dip set-at ]
       [ connect-irc ]
       [ drop 0.1 seconds sleep ]
@@ -130,13 +130,13 @@ IN: irc.client.tests
     } cleave
     ] unit-test
 
-{ H{ { "somedude2" f } } } [
+{ H{ { "somedude2" +normal+ } } } [
     { ":somedude!n=user@isp.net QUIT" } make-client
     { [ "factorbot" set-nick ]
       [ listeners>>
         [ "#factortest" [ <irc-channel-listener>
-                          H{ { "somedude2" f }
-                             { "somedude" f } } clone >>participants ] keep
+                          H{ { "somedude2" +normal+ }
+                             { "somedude" +normal+ } } clone >>participants ] keep
         ] dip set-at ]
       [ connect-irc ]
       [ drop 0.1 seconds sleep ]
@@ -145,13 +145,13 @@ IN: irc.client.tests
     } cleave
     ] unit-test
 
-{ H{ { "somedude2" f } } } [
+{ H{ { "somedude2" +normal+ } } } [
     { ":somedude2!n=user2@isp.net KICK #factortest somedude" } make-client
     { [ "factorbot" set-nick ]
       [ listeners>>
         [ "#factortest" [ <irc-channel-listener>
-                          H{ { "somedude2" f }
-                             { "somedude" f } } clone >>participants ] keep
+                          H{ { "somedude2" +normal+ }
+                             { "somedude" +normal+ } } clone >>participants ] keep
         ] dip set-at ]
       [ connect-irc ]
       [ drop 0.1 seconds sleep ]
@@ -159,3 +159,17 @@ IN: irc.client.tests
       [ terminate-irc ]
     } cleave
     ] 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
\ No newline at end of file
index 89286f630317148a72b0ed652af09ce331eb6afc..813de0f57c44455e18eb0d0d471ce7c38f6ee8bc 100644 (file)
@@ -220,7 +220,7 @@ M: privmsg handle-incoming-irc ( privmsg -- )
 M: join handle-incoming-irc ( join -- )
     { [ maybe-forward-join ]
       [ 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 ]
     } cleave ;
 
@@ -252,8 +252,10 @@ M: quit handle-incoming-irc ( quit -- )
     [ >nick/mode 2array ] map >hashtable ;
 
 M: names-reply handle-incoming-irc ( names-reply -- )
-    [ names-reply>participants ] [ channel>> listener> ] bi
-    [ (>>participants) ] [ drop ] if* ;
+    [ names-reply>participants ] [ channel>> listener> ] bi [
+        [ (>>participants) ]
+        [ [ f f <participant-changed> ] dip name>> to-listener ] bi
+    ] [ drop ] if* ;
 
 M: irc-broadcasted-message handle-incoming-irc ( irc-broadcasted-message -- )
     broadcast-message-to-listeners ;
index 876841abb70634c4402c3c4f099ac64adc9322ee..7ee0f41ab050813ada8d72ef3a3606399660b7f2 100644 (file)
@@ -40,8 +40,18 @@ mode new
                           "ircserver.net" >>prefix
                                    "MODE" >>command
                   { "#factortest" "+ns" } >>parameters
-                             "#factortest" >>channel
+                            "#factortest" >>channel
                                     "+ns" >>mode
 1array
 [ ":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
\ No newline at end of file
index a5f82a5ae1b6612054602f7ed119d43c83cfe134..3b9cf0af2cee79f04347339df2c958df276c4d40 100644 (file)
@@ -12,6 +12,7 @@ TUPLE: ping < irc-message ;
 TUPLE: join < irc-message ;
 TUPLE: part < irc-message channel ;
 TUPLE: quit < irc-message ;
+TUPLE: nick < irc-message ;
 TUPLE: privmsg < irc-message name ;
 TUPLE: kick < irc-message channel who ;
 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: part        irc-command-string ( part -- string )    drop "PART" ;
 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: notice      irc-command-string ( notice -- string )  drop "NOTICE" ;
 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: part        irc-command-parameters ( part -- seq )    name>> 1array ;
 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: notice      irc-command-parameters ( norice -- seq )  type>> 1array ;
 M: kick irc-command-parameters ( kick -- seq )
@@ -110,6 +113,7 @@ PRIVATE>
         { "353" [ names-reply ] }
         { "JOIN" [ join ] }
         { "PART" [ part ] }
+        { "NICK" [ nick ] }
         { "PRIVMSG" [ privmsg ] }
         { "QUIT" [ quit ] }
         { "MODE" [ mode ] }