about summary refs log blame commit diff
path: root/IRCSharp.Tests/State/User.cs
blob: b1c1caf8c196d70d9e7b25e46b0659429b742c06 (plain) (tree)
1
2
3
4
5
6
7
8
9

                   
                                                   
 
                              



                     





                                         
                                                    


                    






                                                          

                                    
                                                                

                                                           

                                                             

                                                              
                                                          

                                                               




                                      
                                                                      


                                                      
                                                                   


                                                   




                                      
                                                                 


                                                      
                                                              


                                                   




                                      
                                                                 


                                                      
                                                              


                                                   




                                                     
                                                            


                                            
                                                         


                                              




                                             
                                                                          


                                                          
                                                                         


                                                        




                                                
                                                                        


                                                          
                                                                      


                                                        




                                              

                                                             

                                                    

                                                           

                                                  




                                                 

                                                            

                                                 

                                                         

                                              




                                         

                                                                             


                                                      
                                                                          


                                                   




                                         

                                                                        


                                                      
                                                                     


                                                   




                                         

                                                                        


                                                      
                                                                     


                                                   




                                                
                                                      

                                                          




                                             
                                                               

                                                          




                         



                                                                                  








                                                      




                             

                                                                      


                                                   

                                                                     


                                                 




                           

                                                               



                                                   


                                                               



                                                 




                             

                                                            



                                              

                                                                

                                                      




                               





                                                                



                                              




                             

                                                            



                                              

                                                                           

                                                                  
         

     
using IRCStates;
using IRCTokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace IRCSharp.Tests.State
{
    [TestClass]
    public class User
    {
        private Server _server;

        [TestInitialize]
        public void TestInitialize()
        {
            _server = new Server("test");
            _server.Parse(new Line("001 nickname"));
        }

        [TestMethod]
        public void Welcome()
        {
            Assert.AreEqual("test", _server.Name);
            Assert.AreEqual("nickname", _server.NickName);
        }

        [TestMethod]
        public void NicknameChange()
        {
            _server.Parse(new Line(":nickname NICK nickname2"));
            Assert.AreEqual("nickname2", _server.NickName);

            _server.Parse(new Line(":nickname2 JOIN #chan"));
            _server.Parse(new Line(":other JOIN #chan"));
            Assert.IsTrue(_server.Users.ContainsKey("other"));

            _server.Parse(new Line(":other NICK other2"));
            Assert.IsFalse(_server.Users.ContainsKey("other"));
            Assert.IsTrue(_server.Users.ContainsKey("other2"));
        }

        [TestMethod]
        public void HostmaskJoinBoth()
        {
            _server.Parse(new Line(":nickname!user@host JOIN #chan"));
            Assert.AreEqual("user", _server.UserName);
            Assert.AreEqual("host", _server.HostName);

            _server.Parse(new Line(":other!user@host JOIN #chan"));
            var user = _server.Users["other"];
            Assert.AreEqual("user", user.UserName);
            Assert.AreEqual("host", user.HostName);
        }

        [TestMethod]
        public void HostmaskJoinUser()
        {
            _server.Parse(new Line(":nickname!user JOIN #chan"));
            Assert.AreEqual("user", _server.UserName);
            Assert.IsNull(_server.HostName);

            _server.Parse(new Line(":other!user JOIN #chan"));
            var user = _server.Users["other"];
            Assert.AreEqual("user", user.UserName);
            Assert.IsNull(user.HostName);
        }

        [TestMethod]
        public void HostmaskJoinHost()
        {
            _server.Parse(new Line(":nickname@host JOIN #chan"));
            Assert.IsNull(_server.UserName);
            Assert.AreEqual("host", _server.HostName);

            _server.Parse(new Line(":other@host JOIN #chan"));
            var user = _server.Users["other"];
            Assert.IsNull(user.UserName);
            Assert.AreEqual("host", user.HostName);
        }

        [TestMethod]
        public void ExtendedJoinWithoutExtendedJoin()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            Assert.IsNull(_server.Account);
            Assert.IsNull(_server.RealName);

            _server.Parse(new Line(":other JOIN #chan"));
            var user = _server.Users["other"];
            Assert.IsNull(user.Account);
            Assert.IsNull(user.RealName);
        }

        [TestMethod]
        public void ExtendedJoinWithAccount()
        {
            _server.Parse(new Line(":nickname JOIN #chan acc :realname"));
            Assert.AreEqual("acc", _server.Account);
            Assert.AreEqual("realname", _server.RealName);

            _server.Parse(new Line(":other JOIN #chan acc2 :realname2"));
            var user = _server.Users["other"];
            Assert.AreEqual("acc2", user.Account);
            Assert.AreEqual("realname2", user.RealName);
        }

        [TestMethod]
        public void ExtendedJoinWithoutAccount()
        {
            _server.Parse(new Line(":nickname JOIN #chan * :realname"));
            Assert.AreEqual("", _server.Account);
            Assert.AreEqual("realname", _server.RealName);

            _server.Parse(new Line(":other JOIN #chan * :realname2"));
            var user = _server.Users["other"];
            Assert.AreEqual("", user.Account);
            Assert.AreEqual("realname2", user.RealName);
        }

        [TestMethod]
        public void AccountNotifyWithAccount()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            _server.Parse(new Line(":nickname ACCOUNT acc"));
            Assert.AreEqual("acc", _server.Account);

            _server.Parse(new Line(":other JOIN #chan"));
            _server.Parse(new Line(":other ACCOUNT acc2"));
            var user = _server.Users["other"];
            Assert.AreEqual("acc2", user.Account);
        }

        [TestMethod]
        public void AccountNotifyWithoutAccount()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            _server.Parse(new Line(":nickname ACCOUNT *"));
            Assert.AreEqual("", _server.Account);

            _server.Parse(new Line(":other JOIN #chan"));
            _server.Parse(new Line(":other ACCOUNT *"));
            var user = _server.Users["other"];
            Assert.AreEqual("", user.Account);
        }

        [TestMethod]
        public void HostmaskPrivmsgBoth()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            _server.Parse(new Line(":nickname!user@host PRIVMSG #chan :hi"));
            Assert.AreEqual("user", _server.UserName);
            Assert.AreEqual("host", _server.HostName);

            _server.Parse(new Line(":other!user@host PRIVMSG #chan :hi"));
            var user = _server.Users["other"];
            Assert.AreEqual("user", user.UserName);
            Assert.AreEqual("host", user.HostName);
        }

        [TestMethod]
        public void HostmaskPrivmsgUser()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            _server.Parse(new Line(":nickname!user PRIVMSG #chan :hi"));
            Assert.AreEqual("user", _server.UserName);
            Assert.IsNull(_server.HostName);

            _server.Parse(new Line(":other!user PRIVMSG #chan :hi"));
            var user = _server.Users["other"];
            Assert.AreEqual("user", user.UserName);
            Assert.IsNull(user.HostName);
        }

        [TestMethod]
        public void HostmaskPrivmsgHost()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            _server.Parse(new Line(":nickname@host PRIVMSG #chan :hi"));
            Assert.IsNull(_server.UserName);
            Assert.AreEqual("host", _server.HostName);

            _server.Parse(new Line(":other@host PRIVMSG #chan :hi"));
            var user = _server.Users["other"];
            Assert.IsNull(user.UserName);
            Assert.AreEqual("host", user.HostName);
        }

        [TestMethod]
        public void VisibleHostWithoutUsername()
        {
            _server.Parse(new Line("396 * hostname"));
            Assert.IsNull(_server.UserName);
            Assert.AreEqual("hostname", _server.HostName);
        }

        [TestMethod]
        public void VisibleHostWithUsername()
        {
            _server.Parse(new Line("396 * username@hostname"));
            Assert.AreEqual("username", _server.UserName);
            Assert.AreEqual("hostname", _server.HostName);
        }

        [TestMethod]
        public void Who()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            _server.Parse(new Line(":other JOIN #chan"));
            _server.Parse(new Line("352 * #chan user host * nickname * :0 real"));
            _server.Parse(new Line("352 * #chan user2 host2 * other * :0 real2"));

            Assert.AreEqual("user", _server.UserName);
            Assert.AreEqual("host", _server.HostName);
            Assert.AreEqual("real", _server.RealName);

            var user = _server.Users["other"];
            Assert.AreEqual("user2", user.UserName);
            Assert.AreEqual("host2", user.HostName);
            Assert.AreEqual("real2", user.RealName);
        }

        [TestMethod]
        public void Chghost()
        {
            _server.Parse(new Line(":nickname!user@host JOIN #chan"));
            _server.Parse(new Line(":nickname CHGHOST u h"));
            Assert.AreEqual("u", _server.UserName);
            Assert.AreEqual("h", _server.HostName);

            _server.Parse(new Line(":other!user2@host2 JOIN #chan"));
            _server.Parse(new Line(":other CHGHOST u2 h2"));
            var user = _server.Users["other"];
            Assert.AreEqual("u2", user.UserName);
            Assert.AreEqual("h2", user.HostName);
        }

        [TestMethod]
        public void Whois()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            _server.Parse(new Line("311 * nickname u h * :r"));
            Assert.AreEqual("u", _server.UserName);
            Assert.AreEqual("h", _server.HostName);
            Assert.AreEqual("r", _server.RealName);

            _server.Parse(new Line(":other JOIN #chan"));
            _server.Parse(new Line(":other CHGHOST u2 h2"));
            _server.Parse(new Line("311 * other u2 h2 * :r2"));
            var user = _server.Users["other"];
            Assert.AreEqual("u2", user.UserName);
            Assert.AreEqual("h2", user.HostName);
            Assert.AreEqual("r2", user.RealName);
        }

        [TestMethod]
        public void AwaySet()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            _server.Parse(new Line(":other JOIN #chan"));
            var user = _server.Users["other"];
            Assert.IsNull(_server.Away);
            Assert.IsNull(user.Away);

            _server.Parse(new Line(":nickname AWAY :bye bye"));
            _server.Parse(new Line(":other AWAY :ich geh weg"));
            Assert.AreEqual("bye bye", _server.Away);
            Assert.AreEqual("ich geh weg", user.Away);
        }

        [TestMethod]
        public void AwayUnset()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            _server.Parse(new Line(":other JOIN #chan"));
            _server.Parse(new Line(":nickname AWAY :bye bye"));
            _server.Parse(new Line(":nickname AWAY"));
            _server.Parse(new Line(":other AWAY :ich geh weg"));
            _server.Parse(new Line(":other AWAY"));

            var user = _server.Users["other"];
            Assert.IsNull(_server.Away);
            Assert.IsNull(user.Away);
        }

        [TestMethod]
        public void Setname()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            _server.Parse(new Line(":other JOIN #chan"));
            var user = _server.Users["other"];
            Assert.IsNull(user.RealName);
            Assert.IsNull(_server.RealName);

            _server.Parse(new Line(":nickname SETNAME :new now know how"));
            _server.Parse(new Line(":other SETNAME :tyrannosaurus hex"));
            Assert.AreEqual("new now know how", _server.RealName);
            Assert.AreEqual("tyrannosaurus hex", user.RealName);
        }
    }
}