MessageCutterTest.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. using LanTian_Pump_664_Or_886;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using Edge.Core.Parser.BinaryParser.Util;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. namespace LanTian_Pump_664_Or_886_Test
  9. {
  10. [TestClass]
  11. public class MessageCutterTest
  12. {
  13. public static bool ValueEquals(IEnumerable<byte> array1, IEnumerable<byte> array2)
  14. {
  15. if (array1 == null && array2 == null)
  16. {
  17. return true;
  18. }
  19. if ((array1 == null) || (array2 == null))
  20. {
  21. return false;
  22. }
  23. if (array1.Count() != array2.Count())
  24. {
  25. return false;
  26. }
  27. if (array1.Equals(array2))
  28. {
  29. return true;
  30. }
  31. else
  32. {
  33. for (int Index = 0; Index < array1.Count(); Index++)
  34. {
  35. if (!Equals(array1.ElementAt(Index), array2.ElementAt(Index)))
  36. {
  37. return false;
  38. }
  39. }
  40. }
  41. return true;
  42. }
  43. [TestMethod]
  44. public void ShouldCutTest1()
  45. {
  46. var cutter = new MessageCutter();
  47. int onMsgCutCalledTimes = 0;
  48. int onInvalidMsgCalledTimes = 0;
  49. List<byte[]> messages = new List<byte[]>();
  50. cutter.OnMessageCut += (s, a) =>
  51. {
  52. onMsgCutCalledTimes++;
  53. messages.Add(cutter.Message);
  54. };
  55. cutter.OnInvalidMessageRead += (e, f) =>
  56. {
  57. onInvalidMsgCalledTimes++;
  58. };
  59. var rawValid = "F5 01 A3 59 B2 3C".ToBytes();
  60. cutter.Feed(rawValid);
  61. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  62. Assert.AreEqual(true, messages.Count == 1);
  63. Assert.AreEqual(true, ValueEquals(messages[0], rawValid));
  64. Assert.AreEqual(true, onInvalidMsgCalledTimes == 0);
  65. }
  66. [TestMethod]
  67. public void ShouldCutTest2()
  68. {
  69. var cutter = new MessageCutter();
  70. int onMsgCutCalledTimes = 0;
  71. int onInvalidMsgCalledTimes = 0;
  72. List<byte[]> messages = new List<byte[]>();
  73. cutter.OnMessageCut += (s, a) =>
  74. {
  75. onMsgCutCalledTimes++;
  76. messages.Add(cutter.Message);
  77. };
  78. cutter.OnInvalidMessageRead += (e, f) =>
  79. {
  80. onInvalidMsgCalledTimes++;
  81. };
  82. var rawValid = "F5 01 A3 59 B2 3C";
  83. var raw = "11 22 33 44 " + rawValid + " 55 66 77";
  84. cutter.Feed(raw.ToBytes());
  85. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  86. Assert.AreEqual(true, messages.Count == 1);
  87. Assert.AreEqual(true, ValueEquals(messages[0], rawValid.ToBytes()));
  88. Assert.AreEqual(true, onInvalidMsgCalledTimes > 0);
  89. }
  90. [TestMethod]
  91. public void ShouldCutTest3()
  92. {
  93. var cutter = new MessageCutter();
  94. int onMsgCutCalledTimes = 0;
  95. int onInvalidMsgCalledTimes = 0;
  96. List<byte[]> messages = new List<byte[]>();
  97. cutter.OnMessageCut += (s, a) =>
  98. {
  99. onMsgCutCalledTimes++;
  100. messages.Add(cutter.Message);
  101. };
  102. cutter.OnInvalidMessageRead += (e, f) =>
  103. {
  104. onInvalidMsgCalledTimes++;
  105. };
  106. var rawValid = "F5 01 A3 59 B2 3C";
  107. var raw = "11 22 33 44 F5 FF" + rawValid + " 55 66 77";
  108. cutter.Feed(raw.ToBytes());
  109. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  110. Assert.AreEqual(true, messages.Count == 1);
  111. Assert.AreEqual(true, ValueEquals(messages[0], rawValid.ToBytes()));
  112. Assert.AreEqual(true, onInvalidMsgCalledTimes > 0);
  113. }
  114. [TestMethod]
  115. public void ShouldCutTest4()
  116. {
  117. var cutter = new MessageCutter();
  118. int onMsgCutCalledTimes = 0;
  119. int onInvalidMsgCalledTimes = 0;
  120. List<byte[]> messages = new List<byte[]>();
  121. cutter.OnMessageCut += (s, a) =>
  122. {
  123. onMsgCutCalledTimes++;
  124. messages.Add(cutter.Message);
  125. };
  126. cutter.OnInvalidMessageRead += (e, f) =>
  127. {
  128. onInvalidMsgCalledTimes++;
  129. };
  130. var rawValid = "F5 01 A3 59 B2 3C";
  131. var raw = "11 22 33 44 F5 FF" + rawValid + " 55 66 77" + rawValid + "AA" + rawValid;
  132. cutter.Feed(raw.ToBytes());
  133. Assert.AreEqual(true, onMsgCutCalledTimes == 3);
  134. Assert.AreEqual(true, messages.Count == 3);
  135. Assert.AreEqual(true, ValueEquals(messages[0], rawValid.ToBytes()));
  136. Assert.AreEqual(true, onInvalidMsgCalledTimes > 0);
  137. }
  138. [TestMethod]
  139. public void ShouldNotCutTest1()
  140. {
  141. var cutter = new MessageCutter();
  142. int onMsgCutCalledTimes = 0;
  143. int onInvalidMsgCalledTimes = 0;
  144. List<byte[]> messages = new List<byte[]>();
  145. cutter.OnMessageCut += (s, a) =>
  146. {
  147. onMsgCutCalledTimes++;
  148. messages.Add(cutter.Message);
  149. };
  150. cutter.OnInvalidMessageRead += (e, f) =>
  151. {
  152. onInvalidMsgCalledTimes++;
  153. };
  154. //below give a wrong length, the correct length byte should be A3, but i make it to A4.
  155. var rawInvalid = "F5 01 A4 59 B2 3C";
  156. cutter.Feed(rawInvalid.ToBytes());
  157. Assert.AreEqual(true, onMsgCutCalledTimes == 0);
  158. Assert.AreEqual(true, messages.Count == 0);
  159. //Assert.AreEqual(true, ValueEquals(messages[0], rawInvalid.ToBytes()));
  160. Assert.AreEqual(true, onInvalidMsgCalledTimes == 0);
  161. }
  162. }
  163. }