StateMachineMessageCutterUnitTest.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. using System;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using System.Linq;
  4. using System.Collections.Generic;
  5. using Wayne_VaporRecoveryDataCollectorBoard;
  6. using Edge.Core.Parser.BinaryParser.Util;
  7. namespace Wayne_VaporRecoveryDataCollectorBoard_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. var rawRealCompleteMsg = new byte[] { 1, 0x68, 3, 4, 3, 5, 0, 8, 0xA0, 0x16 };
  54. cutter.Feed(rawRealCompleteMsg);
  55. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  56. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.Skip(1)));
  57. }
  58. [TestMethod]
  59. public void ShouldCutTest2()
  60. {
  61. var 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. var rawRealCompleteMsg = new byte[] { 1, 0x68, 3, 4, 3, 5, 0, 8, 0xA0, 0x16 };
  70. cutter.Feed(rawRealCompleteMsg);
  71. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  72. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.Skip(1)));
  73. // feed again
  74. cutter.Feed(rawRealCompleteMsg);
  75. Assert.AreEqual(true, onMsgCutCalledTimes == 2);
  76. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.Skip(1)));
  77. }
  78. [TestMethod]
  79. public void ShouldCutTest3()
  80. {
  81. var cutter = new StateMachineMessageCutter();
  82. int onMsgCutCalledTimes = 0;
  83. byte[] msg = null;
  84. cutter.OnMessageCut += (s, a) =>
  85. {
  86. onMsgCutCalledTimes++;
  87. msg = cutter.Message;
  88. };
  89. var rawRealCompleteMsg = new byte[] { 1, 2, 3, 4, 0xFA, 0xFA, 5, 0, 8, 1, 2, 3, 4, 5, 6, 7, 8, 0xA0, 0xB0 };
  90. cutter.Feed(rawRealCompleteMsg);
  91. Assert.AreEqual(true, onMsgCutCalledTimes == 0);
  92. Assert.AreEqual(true, msg == null);
  93. }
  94. [TestMethod]
  95. public void ShouldCutTest4()
  96. {
  97. var cutter = new StateMachineMessageCutter();
  98. int onMsgCutCalledTimes = 0;
  99. byte[] msg = null;
  100. cutter.OnMessageCut += (s, a) =>
  101. {
  102. onMsgCutCalledTimes++;
  103. msg = cutter.Message;
  104. };
  105. var rawRealCompleteMsg = new byte[] { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0x68, 3, 4, 3, 5, 0, 8, 0xA0, 0x16 };
  106. cutter.Feed(rawRealCompleteMsg);
  107. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  108. Assert.AreEqual(true, ValueEquals(msg, rawRealCompleteMsg.Skip(7)));
  109. }
  110. [TestMethod]
  111. public void ShouldCutTest6()
  112. {
  113. var cutter = new StateMachineMessageCutter();
  114. int onMsgCutCalledTimes = 0;
  115. byte[] msg = null;
  116. cutter.OnMessageCut += (s, a) =>
  117. {
  118. onMsgCutCalledTimes++;
  119. msg = cutter.Message;
  120. };
  121. var rawRealCompleteMsg = new byte[] { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0x68, 3, 4, 3, 5, 0, 8, 0xA0, 17 };
  122. cutter.Feed(rawRealCompleteMsg);
  123. Assert.AreEqual(true, onMsgCutCalledTimes == 0);
  124. }
  125. [TestMethod]
  126. public void ShouldCutTest7()
  127. {
  128. var cutter = new StateMachineMessageCutter();
  129. int onMsgCutCalledTimes = 0;
  130. List<byte[]> msg = new List<byte[]>();
  131. cutter.OnMessageCut += (s, a) =>
  132. {
  133. onMsgCutCalledTimes++;
  134. msg.Add(cutter.Message);
  135. };
  136. var rawRealCompleteMsg = new byte[] { 11, 22, 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0x68, 3, 4, 3, 5, 0, 8, 0xA0, 0x16,
  137. 0xFA, 0x68, 3, 4, 3, 5, 0, 11, 0xA0, 0x16, };
  138. var validMsg0 = new byte[] { 0x68, 3, 4, 3, 5, 0, 8, 0xA0, 0x16 };
  139. var validMsg1 = new byte[] { 0x68, 3, 4, 3, 5, 0, 11, 0xA0, 0x16, };
  140. cutter.Feed(rawRealCompleteMsg);
  141. Assert.AreEqual(true, onMsgCutCalledTimes == 2);
  142. Assert.AreEqual(true, ValueEquals(msg[0], validMsg0));
  143. Assert.AreEqual(true, ValueEquals(msg[1], validMsg1));
  144. }
  145. [TestMethod]
  146. public void ShouldCutTest8()
  147. {
  148. var cutter = new StateMachineMessageCutter();
  149. int onMsgCutCalledTimes = 0;
  150. byte[] msg = null;
  151. cutter.OnMessageCut += (s, a) =>
  152. {
  153. onMsgCutCalledTimes++;
  154. msg = cutter.Message;
  155. };
  156. var rawRealCompleteMsg = "68 06 00 00 16".ToBytes();
  157. cutter.Feed(rawRealCompleteMsg);
  158. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  159. }
  160. }
  161. }