StateMachineMessageCutterUnitTest.cs 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. using System;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using System.Linq;
  4. using Edge.Core.Parser.BinaryParser.Util;
  5. using System.Collections.Generic;
  6. using Wayne_Pump_Dart;
  7. namespace Wayne_Pump_Dart_Test
  8. {
  9. [TestClass]
  10. public class StateMachineMessageCutterUnitTest
  11. {
  12. public static bool ValueEquals(IEnumerable<byte> array1, IEnumerable<byte> array2)
  13. {
  14. if (array1 == null && array2 == null)
  15. {
  16. return true;
  17. }
  18. if ((array1 == null) || (array2 == null))
  19. {
  20. return false;
  21. }
  22. if (array1.Count() != array2.Count())
  23. {
  24. return false;
  25. }
  26. if (array1.Equals(array2))
  27. {
  28. return true;
  29. }
  30. else
  31. {
  32. for (int Index = 0; Index < array1.Count(); Index++)
  33. {
  34. if (!Equals(array1.ElementAt(Index), array2.ElementAt(Index)))
  35. {
  36. return false;
  37. }
  38. }
  39. }
  40. return true;
  41. }
  42. [TestMethod]
  43. public void ShouldCutTest1()
  44. {
  45. var cutter = new StateMachineMessageCutter();
  46. int onMsgCutCalledTimes = 0;
  47. byte[] msg = null;
  48. cutter.OnMessageCut += (s, a) =>
  49. {
  50. onMsgCutCalledTimes++;
  51. msg = cutter.Message;
  52. };
  53. string rawRealCompleteMsg = "50 20 FA";
  54. cutter.Feed(rawRealCompleteMsg.ToBytes());
  55. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  56. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  57. }
  58. [TestMethod]
  59. public void ShouldCutTest2()
  60. {
  61. StateMachineMessageCutter cutter = new StateMachineMessageCutter();
  62. int onMsgCutCalledTimes = 0;
  63. byte[] msg = null;
  64. cutter.OnMessageCut += (s, a) =>
  65. {
  66. onMsgCutCalledTimes++;
  67. msg = cutter.Message;
  68. };
  69. string rawRealCompleteMsg = "50 20 FA";
  70. string rawRealMsgWithExtraHeaderAndTail = "00 20 02 50 20 FA 00 00 00 00 00";
  71. cutter.Feed(rawRealMsgWithExtraHeaderAndTail.ToBytes());
  72. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  73. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  74. }
  75. [TestMethod]
  76. public void ShouldCutTest3()
  77. {
  78. StateMachineMessageCutter cutter = new StateMachineMessageCutter();
  79. int onMsgCutCalledTimes = 0;
  80. byte[] msg = null;
  81. cutter.OnMessageCut += (s, a) =>
  82. {
  83. onMsgCutCalledTimes++;
  84. msg = cutter.Message;
  85. };
  86. string rawRealCompleteMsg = "50 20 FA FA";
  87. string rawRealMsgWithExtraHeaderAndTail = "50 20 10 FA FA";
  88. cutter.Feed(rawRealMsgWithExtraHeaderAndTail.ToBytes());
  89. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  90. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  91. }
  92. [TestMethod]
  93. public void ShouldCutTest3_1()
  94. {
  95. StateMachineMessageCutter cutter = new StateMachineMessageCutter();
  96. int onMsgCutCalledTimes = 0;
  97. byte[] msg = null;
  98. cutter.OnMessageCut += (s, a) =>
  99. {
  100. onMsgCutCalledTimes++;
  101. msg = cutter.Message;
  102. };
  103. string rawRealCompleteMsg = "50 20 FA FA";
  104. string rawRealMsgWithExtraHeaderAndTail = "50 20 10 FA FA FA";
  105. cutter.Feed(rawRealMsgWithExtraHeaderAndTail.ToBytes());
  106. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  107. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  108. }
  109. [TestMethod]
  110. public void ShouldCutTest3_2()
  111. {
  112. StateMachineMessageCutter cutter = new StateMachineMessageCutter();
  113. int onMsgCutCalledTimes = 0;
  114. byte[] msg = null;
  115. cutter.OnMessageCut += (s, a) =>
  116. {
  117. onMsgCutCalledTimes++;
  118. msg = cutter.Message;
  119. };
  120. string rawRealCompleteMsg = "50 20 FA FA FA";
  121. string rawRealMsgWithExtraHeaderAndTail = "50 20 10 FA 10 FA FA";
  122. cutter.Feed(rawRealMsgWithExtraHeaderAndTail.ToBytes());
  123. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  124. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  125. }
  126. [TestMethod]
  127. public void ShouldCutTest3_3()
  128. {
  129. StateMachineMessageCutter cutter = new StateMachineMessageCutter();
  130. int onMsgCutCalledTimes = 0;
  131. byte[] msg = null;
  132. cutter.OnMessageCut += (s, a) =>
  133. {
  134. onMsgCutCalledTimes++;
  135. msg = cutter.Message;
  136. };
  137. string rawRealCompleteMsg = "50 20 FA FA 33 FA";
  138. string rawRealMsgWithExtraHeaderAndTail = "50 20 10 FA 10 FA 33 FA 44";
  139. cutter.Feed(rawRealMsgWithExtraHeaderAndTail.ToBytes());
  140. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  141. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  142. }
  143. [TestMethod]
  144. public void ShouldCutTest4()
  145. {
  146. StateMachineMessageCutter cutter = new StateMachineMessageCutter();
  147. int onMsgCutCalledTimes = 0;
  148. byte[] msg = null;
  149. cutter.OnMessageCut += (s, a) =>
  150. {
  151. onMsgCutCalledTimes++;
  152. msg = cutter.Message;
  153. };
  154. string rawRealCompleteMsg = "50 20 FA";
  155. string rawRealMsgWithExtraHeaderAndTail = "50 20 FA 50 20 FA";
  156. cutter.Feed(rawRealMsgWithExtraHeaderAndTail.ToBytes());
  157. Assert.AreEqual(true, onMsgCutCalledTimes == 2);
  158. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  159. }
  160. [TestMethod]
  161. public void ShouldCutTest4_1()
  162. {
  163. StateMachineMessageCutter cutter = new StateMachineMessageCutter();
  164. int onMsgCutCalledTimes = 0;
  165. byte[] msg = null;
  166. string rawRealCompleteMsg = "50 20 FA";
  167. cutter.OnMessageCut += (s, a) =>
  168. {
  169. onMsgCutCalledTimes++;
  170. msg = cutter.Message;
  171. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  172. };
  173. string rawRealMsgWithExtraHeaderAndTail = "50 20 FA 22 50 20 FA 22 50 20 FA 22 50 20 FA";
  174. cutter.Feed(rawRealMsgWithExtraHeaderAndTail.ToBytes());
  175. Assert.AreEqual(true, onMsgCutCalledTimes == 4);
  176. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  177. }
  178. [TestMethod]
  179. public void ShouldCutTest4_2()
  180. {
  181. StateMachineMessageCutter cutter = new StateMachineMessageCutter();
  182. int onMsgCutCalledTimes = 0;
  183. byte[] msg = null;
  184. string rawRealCompleteMsg = "50 20 50 20 FA";
  185. cutter.OnMessageCut += (s, a) =>
  186. {
  187. onMsgCutCalledTimes++;
  188. msg = cutter.Message;
  189. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  190. };
  191. string rawRealMsgWithExtraHeaderAndTail = "50 20 50 20 FA " +
  192. "22 50 20 50 20 FA " +
  193. "22 50 20 50 20 FA " +
  194. "22 50 20 50 20 FA" +
  195. "22 50 20 50 20 FA";
  196. cutter.Feed(rawRealMsgWithExtraHeaderAndTail.ToBytes());
  197. Assert.AreEqual(true, onMsgCutCalledTimes == 5);
  198. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  199. }
  200. [TestMethod]
  201. public void ShouldCutTest4_3()
  202. {
  203. StateMachineMessageCutter cutter = new StateMachineMessageCutter();
  204. int onMsgCutCalledTimes = 0;
  205. byte[] msg = null;
  206. string rawRealCompleteMsg = "51 39 02 08 00 00 03 97 00 00 30 64 03 04 00 07 72 00 01 01 3F 3F 05 FA E3 51 39 02 08 00 00 03 97 00 00 30 64 03 04 00 07 72 00 01 01 05 FA E3 03 FA";
  207. cutter.OnMessageCut += (s, a) =>
  208. {
  209. onMsgCutCalledTimes++;
  210. msg = cutter.Message;
  211. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  212. };
  213. string rawRealMsgWithExtraHeaderAndTail = "51 39 02 08 00 00 03 97 00 00 30 64 03 04 00 07 72 00 01 01 3F 3F 05 FA E3 51 39 02 08 00 00 03 97 00 00 30 64 03 04 00 07 72 00 01 01 05 FA E3 03 FA";
  214. cutter.Feed(rawRealMsgWithExtraHeaderAndTail.ToBytes());
  215. Assert.AreEqual(true, onMsgCutCalledTimes == 5);
  216. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.ToBytes()));
  217. }
  218. [TestMethod]
  219. public void ShouldCutTest4_4()
  220. {
  221. StateMachineMessageCutter cutter = new StateMachineMessageCutter();
  222. int onMsgCutCalledTimes = 0;
  223. List<byte[]> messagesCut = null;
  224. string rawRealCompleteMsg = "53 20 FA 53 70 FA";
  225. cutter.OnMessageCut += (s, a) =>
  226. {
  227. onMsgCutCalledTimes++;
  228. messagesCut.Add(cutter.Message);
  229. };
  230. cutter.Feed(rawRealCompleteMsg.ToBytes());
  231. Assert.AreEqual(true, onMsgCutCalledTimes == 2);
  232. Assert.AreEqual(true, ValueEquals(messagesCut[0], "53 20 FA".ToBytes()));
  233. Assert.AreEqual(true, ValueEquals(messagesCut[1], "53 70 FA".ToBytes()));
  234. }
  235. }
  236. }