diff options
Diffstat (limited to 'IrcTokens/Tests/StatefulDecoder.cs')
-rw-r--r-- | IrcTokens/Tests/StatefulDecoder.cs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/IrcTokens/Tests/StatefulDecoder.cs b/IrcTokens/Tests/StatefulDecoder.cs new file mode 100644 index 0000000..209a6cf --- /dev/null +++ b/IrcTokens/Tests/StatefulDecoder.cs @@ -0,0 +1,86 @@ +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> { 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); + } + } +} |