about summary refs log blame commit diff
path: root/IrcStates/Tests/Emit.cs
blob: 15e9e61059beb446357c8542fc502e2540b5d1c6 (plain) (tree)
1
2
3
4
5
6
7
8
9


                                                   





                         





                                         
                                                    




                              
                                                                       





                                                                     
                                                                









                                                                     

                                                                                 







                                                                     

                                                                           











                                                                     

                                                                              













                                                     
                                                            


                                                    
                                                         
                                                   
                                                                                          












                                                        
                                                                            














                                                      

     
using System.Collections.Generic;
using IrcTokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace IrcStates.Tests
{
    [TestClass]
    public class Emit
    {
        private Server _server;

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

        [TestMethod]
        public void EmitJoin()
        {
            var emit = _server.Parse(new Line(":nickname JOIN #chan"));

            Assert.AreEqual("JOIN", emit.Command);
            Assert.IsTrue(emit.Self);
            Assert.AreEqual(_server.Users["nickname"], emit.User);
            Assert.AreEqual(_server.Channels["#chan"], emit.Channel);

            emit = _server.Parse(new Line(":other JOIN #chan"));
            Assert.IsNotNull(emit);
            Assert.AreEqual("JOIN", emit.Command);
            Assert.IsFalse(emit.Self);
            Assert.AreEqual(_server.Users["other"], emit.User);
            Assert.AreEqual(_server.Channels["#chan"], emit.Channel);
        }

        [TestMethod]
        public void EmitPrivmsg()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            var emit = _server.Parse(new Line(":nickname PRIVMSG #chan :hello"));

            Assert.IsNotNull(emit);
            Assert.AreEqual("PRIVMSG", emit.Command);
            Assert.AreEqual("hello", emit.Text);
            Assert.IsTrue(emit.SelfSource);
            Assert.AreEqual(_server.Users["nickname"], emit.User);
            Assert.AreEqual(_server.Channels["#chan"], emit.Channel);

            _server.Parse(new Line(":other JOIN #chan"));
            emit = _server.Parse(new Line(":other PRIVMSG #chan :hello2"));

            Assert.IsNotNull(emit);
            Assert.AreEqual("PRIVMSG", emit.Command);
            Assert.AreEqual("hello2", emit.Text);
            Assert.IsFalse(emit.SelfSource);
            Assert.AreEqual(_server.Users["other"], emit.User);
            Assert.AreEqual(_server.Channels["#chan"], emit.Channel);
        }

        [TestMethod]
        public void EmitPrivmsgNoJoin()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));
            var emit = _server.Parse(new Line(":other PRIVMSG #chan :hello"));

            Assert.IsNotNull(emit);
            Assert.AreEqual("PRIVMSG", emit.Command);
            Assert.AreEqual("hello", emit.Text);
            Assert.IsFalse(emit.SelfSource);
            Assert.IsNotNull(emit.User);

            var channel = _server.Channels["#chan"];
            Assert.AreEqual(channel, emit.Channel);
        }

        [TestMethod]
        public void EmitKick()
        {
            _server.Parse(new Line(":nickname JOIN #chan"));

            var user    = _server.Users["nickname"];
            var channel = _server.Channels["#chan"];
            _server.Parse(new Line(":other JOIN #chan"));
            var userOther = _server.Users["other"];
            var emit      = _server.Parse(new Line(":nickname KICK #chan other :reason"));

            Assert.IsNotNull(emit);
            Assert.AreEqual("KICK", emit.Command);
            Assert.AreEqual("reason", emit.Text);
            Assert.IsTrue(emit.SelfSource);
            Assert.AreEqual(user, emit.UserSource);
            Assert.AreEqual(userOther, emit.UserTarget);
            Assert.AreEqual(channel, emit.Channel);
        }

        [TestMethod]
        public void EmitMode()
        {
            var emit = _server.Parse(new Line("MODE nickname x+i-i+wi-wi"));

            Assert.IsNotNull(emit);
            Assert.AreEqual("MODE", emit.Command);
            Assert.IsTrue(emit.SelfTarget);
            CollectionAssert.AreEqual(new List<string>
            {
                "+x",
                "+i",
                "-i",
                "+w",
                "+i",
                "-w",
                "-i"
            }, emit.Tokens);
        }
    }
}