using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using System.Text; namespace IrcTokens.Tests { [TestClass] public class StatefulDecoder { private IrcTokens.StatefulDecoder _decoder; [TestInitialize] public void TestInitialize() { _decoder = new IrcTokens.StatefulDecoder(); } [TestMethod] public void TestPartial() { 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 TestMultiple() { 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 TestEncoding() { var iso8859 = Encoding.GetEncoding("iso-8859-1"); _decoder = new IrcTokens.StatefulDecoder { Encoding = iso8859 }; var lines = _decoder.Push(iso8859.GetBytes("PRIVMSG #channel :hello Ç\r\n")); var line = new Line("PRIVMSG #channel :hello Ç"); Assert.IsTrue(line.Equals(lines[0])); } [TestMethod] public void TestEncodingFallback() { var latin1 = Encoding.GetEncoding("iso-8859-1"); _decoder = new IrcTokens.StatefulDecoder { Encoding = null, Fallback = latin1 }; var lines = _decoder.Push(latin1.GetBytes("PRIVMSG #channel hélló\r\n")); Assert.AreEqual(1, lines.Count); Assert.IsTrue(new Line("PRIVMSG #channel hélló").Equals(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); } } }