about summary refs log tree commit diff
path: root/IrcTokens/Tests/StatefulDecoderTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'IrcTokens/Tests/StatefulDecoderTests.cs')
-rw-r--r--IrcTokens/Tests/StatefulDecoderTests.cs97
1 files changed, 97 insertions, 0 deletions
diff --git a/IrcTokens/Tests/StatefulDecoderTests.cs b/IrcTokens/Tests/StatefulDecoderTests.cs
new file mode 100644
index 0000000..e0c2143
--- /dev/null
+++ b/IrcTokens/Tests/StatefulDecoderTests.cs
@@ -0,0 +1,97 @@
+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"]);
+        }
+    }
+}