IRC parsing, tokenization, and state handling in C#
at a1df2ed6b496cfac5770a6bd7e4806ca18bf39a5 126 lines 3.9 kB view raw
1namespace IRCSharp.Tests.State; 2 3[TestClass] 4public class Cap 5{ 6 private Server _server; 7 8 [TestInitialize] 9 public void TestInitialize() 10 { 11 _server = new("test"); 12 } 13 14 [TestMethod] 15 public void LSOneLine() 16 { 17 Assert.IsFalse(_server.HasCap); 18 CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps); 19 _server.Parse(new("CAP * LS :a b")); 20 CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}}, _server.AvailableCaps); 21 } 22 23 [TestMethod] 24 public void LsTwoLines() 25 { 26 _server.Parse(new("CAP * LS * :a b")); 27 CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps); 28 _server.Parse(new("CAP * LS :c")); 29 Assert.IsTrue(_server.AvailableCaps.ContainsKey("a")); 30 Assert.IsTrue(_server.AvailableCaps.ContainsKey("b")); 31 Assert.IsTrue(_server.AvailableCaps.ContainsKey("c")); 32 } 33 34 [TestMethod] 35 public void LsValues() 36 { 37 _server.Parse(new("CAP * LS :a b= c=1")); 38 CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}, {"c", "1"}}, 39 _server.AvailableCaps); 40 } 41 42 [TestMethod] 43 public void ACKOneLine() 44 { 45 _server.Parse(new("CAP * LS :a b")); 46 _server.Parse(new("CAP * ACK :a b")); 47 CollectionAssert.AreEqual(new List<string> {"a", "b"}, _server.AgreedCaps); 48 } 49 50 [TestMethod] 51 public void ACKTwoLines() 52 { 53 _server.Parse(new("CAP * LS :a b c")); 54 _server.Parse(new("CAP * ACK * :a b")); 55 _server.Parse(new("CAP * ACK :c")); 56 CollectionAssert.AreEqual(new List<string> {"a", "b", "c"}, _server.AgreedCaps); 57 } 58 59 [TestMethod] 60 public void ACKNotLs() 61 { 62 _server.Parse(new("CAP * LS a")); 63 _server.Parse(new("CAP * ACK b")); 64 CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps); 65 } 66 67 [TestMethod] 68 public void NewNoLs() 69 { 70 _server.Parse(new("CAP * NEW :a")); 71 CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}}, _server.AvailableCaps); 72 } 73 74 [TestMethod] 75 public void NewOneLine() 76 { 77 _server.Parse(new("CAP * LS :a")); 78 _server.Parse(new("CAP * NEW :b")); 79 CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}}, _server.AvailableCaps); 80 } 81 82 [TestMethod] 83 public void NewTwoLines() 84 { 85 _server.Parse(new("CAP * LS :a")); 86 _server.Parse(new("CAP * NEW :b c")); 87 CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}, {"c", ""}}, 88 _server.AvailableCaps); 89 } 90 91 [TestMethod] 92 public void DelNotAcked() 93 { 94 _server.Parse(new("CAP * DEL a")); 95 } 96 97 [TestMethod] 98 public void DELOneLS() 99 { 100 _server.Parse(new("CAP * LS :a")); 101 _server.Parse(new("CAP * ACK :a")); 102 _server.Parse(new("CAP * DEL :a")); 103 CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps); 104 CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps); 105 } 106 107 [TestMethod] 108 public void DelTwoLs() 109 { 110 _server.Parse(new("CAP * LS :a b")); 111 _server.Parse(new("CAP * ACK :a b")); 112 _server.Parse(new("CAP * DEL :a")); 113 CollectionAssert.AreEqual(new Dictionary<string, string> {{"b", ""}}, _server.AvailableCaps); 114 CollectionAssert.AreEqual(new List<string> {"b"}, _server.AgreedCaps); 115 } 116 117 [TestMethod] 118 public void DelTwoDel() 119 { 120 _server.Parse(new("CAP * LS :a b")); 121 _server.Parse(new("CAP * ACK :a b")); 122 _server.Parse(new("CAP * DEL :a b")); 123 CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps); 124 CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps); 125 } 126}