using System.Collections.Generic; using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCStates.Tests { [TestClass] public class Cap { private Server _server; [TestInitialize] public void TestInitialize() { _server = new Server("test"); } [TestMethod] public void LSOneLine() { Assert.IsFalse(_server.HasCap); CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps); _server.Parse(new Line("CAP * LS :a b")); CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}}, _server.AvailableCaps); } [TestMethod] public void LSTwoLines() { _server.Parse(new Line("CAP * LS * :a b")); CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps); _server.Parse(new Line("CAP * LS :c")); Assert.IsTrue(_server.AvailableCaps.ContainsKey("a")); Assert.IsTrue(_server.AvailableCaps.ContainsKey("b")); Assert.IsTrue(_server.AvailableCaps.ContainsKey("c")); } [TestMethod] public void LSValues() { _server.Parse(new Line("CAP * LS :a b= c=1")); CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}, {"c", "1"}}, _server.AvailableCaps); } [TestMethod] public void ACKOneLine() { _server.Parse(new Line("CAP * LS :a b")); _server.Parse(new Line("CAP * ACK :a b")); CollectionAssert.AreEqual(new List {"a", "b"}, _server.AgreedCaps); } [TestMethod] public void ACKTwoLines() { _server.Parse(new Line("CAP * LS :a b c")); _server.Parse(new Line("CAP * ACK * :a b")); _server.Parse(new Line("CAP * ACK :c")); CollectionAssert.AreEqual(new List {"a", "b", "c"}, _server.AgreedCaps); } [TestMethod] public void ACKNotLS() { _server.Parse(new Line("CAP * LS a")); _server.Parse(new Line("CAP * ACK b")); CollectionAssert.AreEqual(new List(), _server.AgreedCaps); } [TestMethod] public void NEWNoLS() { _server.Parse(new Line("CAP * NEW :a")); CollectionAssert.AreEqual(new Dictionary {{"a", ""}}, _server.AvailableCaps); } [TestMethod] public void NEWOneLine() { _server.Parse(new Line("CAP * LS :a")); _server.Parse(new Line("CAP * NEW :b")); CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}}, _server.AvailableCaps); } [TestMethod] public void NEWTwoLines() { _server.Parse(new Line("CAP * LS :a")); _server.Parse(new Line("CAP * NEW :b c")); CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}, {"c", ""}}, _server.AvailableCaps); } [TestMethod] public void DELNotAcked() { _server.Parse(new Line("CAP * DEL a")); } [TestMethod] public void DELOneLS() { _server.Parse(new Line("CAP * LS :a")); _server.Parse(new Line("CAP * ACK :a")); _server.Parse(new Line("CAP * DEL :a")); CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps); CollectionAssert.AreEqual(new List(), _server.AgreedCaps); } [TestMethod] public void DELTwoLS() { _server.Parse(new Line("CAP * LS :a b")); _server.Parse(new Line("CAP * ACK :a b")); _server.Parse(new Line("CAP * DEL :a")); CollectionAssert.AreEqual(new Dictionary {{"b", ""}}, _server.AvailableCaps); CollectionAssert.AreEqual(new List {"b"}, _server.AgreedCaps); } [TestMethod] public void DELTwoDEL() { _server.Parse(new Line("CAP * LS :a b")); _server.Parse(new Line("CAP * ACK :a b")); _server.Parse(new Line("CAP * DEL :a b")); CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps); CollectionAssert.AreEqual(new List(), _server.AgreedCaps); } } }