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
































































































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

namespace IrcTokens.Tests
{
    [TestClass]
    public class StatefulDecoderTests
    {
        private StatefulDecoder _decoder;

        [TestInitialize]
        public void TestInitialize()
        {
            _decoder = new StatefulDecoder();
        }

        [TestMethod]
        public void TestPartial()
        {
            var lines = _decoder.Push("PRIVMSG ");
            Assert.AreEqual(new List<string>(), lines);

            lines = _decoder.Push("#channel hello\r\n");
            Assert.AreEqual(1, lines.Count);

            var line = new Line("PRIVMSG #channel hello");
            CollectionAssert.AreEqual(new List<Line> {line}, lines);
        }

        [TestMethod]
        public void TestMultiple()
        {
            _decoder.Push("PRIVMSG #channel1 hello\r\n");
            var lines = _decoder.Push("PRIVMSG #channel2 hello\r\n");
            Assert.AreEqual(2, lines.Count);

            var line1 = new Line("PRIVMSG #channel1 hello");
            var line2 = new Line("PRIVMSG #channel2 hello");
            Assert.AreEqual(line1, lines[0]);
            Assert.AreEqual(line2, lines[1]);
        }

        [TestMethod]
        public void TestEncoding()
        {
            var iso8859 = Encoding.GetEncodings().Single(ei => ei.Name == "iso-8859-1");
            _decoder = new StatefulDecoder {Encoding = iso8859};
            var lines = _decoder.Push("PRIVMSG #channel :hello Č\r\n");
            var line = new Line("PRIVMSG #channel :hello Č");
            Assert.AreEqual(line, lines[0]);
        }

        [TestMethod]
        public void TestEncodingFallback()
        {
            var latin1 = Encoding.GetEncodings().Single(ei => ei.Name == "latin-1");
            _decoder = new StatefulDecoder {Fallback = latin1};
            var lines = _decoder.Push("PRIVMSG #channel hélló\r\n");
            Assert.AreEqual(1, lines.Count);
            Assert.AreEqual(new Line("PRIVMSG #channel hélló"), lines[0]);
        }

        [TestMethod]
        public void TestEmpty()
        {
            var lines = _decoder.Push(string.Empty);
            Assert.IsNull(lines);
        }

        [TestMethod]
        public void TestBufferUnfinished()
        {
            _decoder.Push("PRIVMSG #channel hello");
            var lines = _decoder.Push(string.Empty);
            Assert.IsNull(lines);
        }

        [TestMethod]
        public void TestClear()
        {
            _decoder.Push("PRIVMSG ");
            _decoder.Clear();
            Assert.AreEqual(string.Empty, _decoder.Pending);
        }

        [TestMethod]
        public void TestTagEncodingMismatch()
        {
            _decoder.Push("@asd=á ");
            var lines = _decoder.Push("PRIVMSG #chan :á\r\n");
            Assert.AreEqual("á", lines[0].Params[0]);
            Assert.AreEqual("á", lines[0].Tags["asd"]);
        }
    }
}