Fix diff state sending.
authorJelmer Vernooij <jelmer@samba.org>
Mon, 13 Apr 2009 12:01:25 +0000 (14:01 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Mon, 13 Apr 2009 12:01:25 +0000 (14:01 +0200)
libirc/client.c
python/tests/test_irc.py

index 5c70cefcd1f744c25b3cb17b52dc663b3676d5e9..7106ae8e0694bf2fdc51c6ca5c5527cdc8d65397 100644 (file)
@@ -500,7 +500,7 @@ gboolean client_send_channel_state_diff(struct irc_client *client,
                nn = find_channel_nick_hostmask(new_state, on->global_nick->hostmask);
                if (nn == NULL)
                        client_send_args_ex(client, on->global_nick->hostmask, 
-                                                               "PART", on->global_nick->nick, NULL);
+                                                               "PART", new_state->name, NULL);
                else
                        client_send_args_ex(client, on->global_nick->hostmask,
                                                                "NICK", nn->global_nick->nick, NULL);
@@ -514,7 +514,7 @@ gboolean client_send_channel_state_diff(struct irc_client *client,
                on = find_channel_nick(old_state, nn->global_nick->nick);
                if (on == NULL)
                        client_send_args_ex(client, nn->global_nick->hostmask, "JOIN", 
-                                                               on->channel->name, NULL);
+                                                               nn->channel->name, NULL);
        }
 
        /* Send TOPIC if the topic is different */
index e24bb28f99a53c32770e1bdb90d4a92733a5ab41..bde8c3daebdd2b85f49a17705d83cf6612f66899 100644 (file)
@@ -554,3 +554,21 @@ class ChannelStateDiffTests(unittest.TestCase):
         self.channel1.topic = "bla la"
         self.client.send_state_diff(self.state1, self.state2)
         self.assertLines(['TOPIC #foo'])
+
+    def test_diff_nicks_leave(self):
+        self.channel1.nicks.add(irc.Nick("me!foo@bar"))
+        self.channel1.nicks.add(irc.Nick("you!foo@bar"))
+        self.client.send_state_diff(self.state1, self.state2)
+        self.assertLines([':me!foo@bar PART #foo', ':you!foo@bar PART #foo'])
+
+    def test_diff_nicks_join(self):
+        self.channel2.nicks.add(irc.Nick("me!foo@bar"))
+        self.channel2.nicks.add(irc.Nick("you!foo@bar"))
+        self.client.send_state_diff(self.state1, self.state2)
+        self.assertLines([':me!foo@bar JOIN #foo', ':you!foo@bar JOIN #foo'])
+
+    def test_diff_nick_change(self):
+        self.channel1.nicks.add(irc.Nick("me!foo@bar"))
+        self.channel2.nicks.add(irc.Nick("you!foo@bar"))
+        self.client.send_state_diff(self.state1, self.state2)
+        # FIXME: self.assertLines([':me!foo@bar NICK you'])