using System.Collections.Generic; using System.Text; using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.Tokenization { [TestClass] public class StatefulDecoder { private IRCTokens.StatefulDecoder _decoder; [TestInitialize] public void Initialize() { _decoder = new IRCTokens.StatefulDecoder(); } [TestMethod] public void Partial() { var lines = _decoder.Push("PRIVMSG "); Assert.AreEqual(0, lines.Count); lines = _decoder.Push("#channel hello\r\n"); Assert.AreEqual(1, lines.Count); var line = new Line("PRIVMSG #channel hello"); CollectionAssert.AreEqual(new List {line}, lines); } [TestMethod] public void Multiple() { var lines = _decoder.Push("PRIVMSG #channel1 hello\r\nPRIVMSG #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 EncodingIso8859() { var iso8859 = Encoding.GetEncoding("iso-8859-1"); _decoder = new IRCTokens.StatefulDecoder {Encoding = iso8859}; var bytes = iso8859.GetBytes("PRIVMSG #channel :hello Ç\r\n"); var lines = _decoder.Push(bytes, bytes.Length); var line = new Line("PRIVMSG #channel :hello Ç"); Assert.IsTrue(line.Equals(lines[0])); } [TestMethod] public void EncodingFallback() { var latin1 = Encoding.GetEncoding("iso-8859-1"); _decoder = new IRCTokens.StatefulDecoder {Encoding = null, Fallback = latin1}; var bytes = latin1.GetBytes("PRIVMSG #channel hélló\r\n"); var lines = _decoder.Push(bytes, bytes.Length); Assert.AreEqual(1, lines.Count); Assert.IsTrue(new Line("PRIVMSG #channel hélló").Equals(lines[0])); } [TestMethod] public void Empty() { var lines = _decoder.Push(string.Empty); Assert.AreEqual(0, lines.Count); } [TestMethod] public void BufferUnfinished() { _decoder.Push("PRIVMSG #channel hello"); var lines = _decoder.Push(string.Empty); Assert.AreEqual(0, lines.Count); } [TestMethod] public void Clear() { _decoder.Push("PRIVMSG "); _decoder.Clear(); Assert.AreEqual(string.Empty, _decoder.Pending); } } }