about summary refs log blame commit diff
path: root/IrcTokens/Tests/FormatTests.cs
blob: a804c1d4d603f77141ab5115205666974510dd38 (plain) (tree)





















































































































































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

namespace IrcTokens.Tests
{
    [TestClass]
    public class FormatTests
    {
        [TestMethod]
        public void TestTags()
        {
            var line = new Line
            {
                Command = "PRIVMSG", 
                Params = new List<string> {"#channel", "hello"},
                Tags = new Dictionary<string, string> {{"id", "\\" + " " + ";" + "\r\n"}}
            }.Format();

            Assert.AreEqual("@id=\\\\\\s\\:\\r\\n PRIVMSG #channel hello", line);
        }

        [TestMethod]
        public void TestMissingTag()
        {
            var line = new Line
            {
                Command = "PRIVMSG", 
                Params = new List<string> {"#channel", "hello"}
            }.Format();

            Assert.AreEqual("PRIVMSG #channel hello", line);
        }

        [TestMethod]
        public void TestNullTag()
        {
            var line = new Line
            {
                Command = "PRIVMSG",
                Params = new List<string> {"#channel", "hello"},
                Tags = new Dictionary<string, string> {{"a", null}}
            }.Format();

            Assert.AreEqual("@a PRIVMSG #channel hello", line);
        }

        [TestMethod]
        public void TestEmptyTag()
        {
            var line = new Line
            {
                Command = "PRIVMSG",
                Params = new List<string> {"#channel", "hello"},
                Tags = new Dictionary<string, string> {{"a", ""}}
            }.Format();

            Assert.AreEqual("@a PRIVMSG #channel hello", line);
        }

        [TestMethod]
        public void TestSource()
        {
            var line = new Line
            {
                Command = "PRIVMSG",
                Params = new List<string> {"#channel", "hello"},
                Source = "nick!user@host"
            }.Format();

            Assert.AreEqual(":nick!user@host PRIVMSG #channel hello", line);
        }

        [TestMethod]
        public void TestCommandLowercase()
        {
            var line = new Line {Command = "privmsg"}.Format();
            Assert.AreEqual("privmsg", line);
        }

        [TestMethod]
        public void TestCommandUppercase()
        {
            var line = new Line {Command = "PRIVMSG"}.Format();
            Assert.AreEqual("PRIVMSG", line);
        }

        [TestMethod]
        public void TestTrailingSpace()
        {
            var line = new Line
            {
                Command = "PRIVMSG",
                Params = new List<string> {"#channel", "hello world"}
            }.Format();

            Assert.AreEqual("PRIVMSG #channel :hello world", line);
        }

        [TestMethod]
        public void TestTrailingNoSpace()
        {
            var line = new Line
            {
                Command = "PRIVMSG",
                Params = new List<string> {"#channel", "helloworld"}
            }.Format();

            Assert.AreEqual("PRIVMSG #channel helloworld", line);
        }

        [TestMethod]
        public void TestTrailingDoubleColon()
        {
            var line = new Line
            {
                Command = "PRIVMSG",
                Params = new List<string> {"#channel", ":helloworld"}
            }.Format();

            Assert.AreEqual("PRIVMSG #channel ::helloworld", line);
        }

        [TestMethod]
        public void TestInvalidNonLastSpace()
        {
            Assert.ThrowsException<ArgumentException>(() =>
            {
                new Line
                {
                    Command = "USER",
                    Params = new List<string> {"user", "0 *", "real name"}
                }.Format();
            });
        }

        [TestMethod]
        public void TestInvalidNonLastColon()
        {
            Assert.ThrowsException<ArgumentException>(() =>
            {
                new Line
                {
                    Command = "PRIVMSG",
                    Params = new List<string> {":#channel", "hello"}
                }.Format();
            });
        }
    }
}