UnitTest1.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. using Edge.Core.Parser.BinaryParser.Util;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using SuZhouSuAnXin_BatteryEMS;
  4. using SuZhouSuAnXin_BatteryEMS.MessageEntity;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. namespace SuZhouSuAnXin_BatteryEMS_Test
  8. {
  9. [TestClass]
  10. public class UnitTest1
  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 SuZhouSuAnXin_BatteryEMS.MessageCutter();
  46. int onMsgCutCalledTimes = 0;
  47. int onInvalidMsgCalledTimes = 0;
  48. List<byte[]> messages = new List<byte[]>();
  49. cutter.OnMessageCut += (s, a) =>
  50. {
  51. onMsgCutCalledTimes++;
  52. messages.Add(cutter.Message);
  53. };
  54. cutter.OnInvalidMessageRead += (e, f) =>
  55. {
  56. onInvalidMsgCalledTimes++;
  57. };
  58. var rawDataStr = "00 00 00 00 00 06 20 03 00 00 00 0A";
  59. var rawValid = rawDataStr.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 SuZhouSuAnXin_BatteryEMS.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 rawDataStr = "00 00 00 00 00 17 20 03 14 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00";
  83. var rawValid = rawDataStr.ToBytes();
  84. cutter.Feed(rawValid);
  85. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  86. Assert.AreEqual(true, messages.Count == 1);
  87. Assert.AreEqual(true, ValueEquals(messages[0], rawValid));
  88. Assert.AreEqual(true, onInvalidMsgCalledTimes == 0);
  89. }
  90. [TestMethod]
  91. public void ShouldCutTest3()
  92. {
  93. var cutter = new SuZhouSuAnXin_BatteryEMS.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 rawDataStr = "00 00 00 00 00 06 20 03 00 00 00 0A " +
  107. "CC DD " +
  108. "00 00 00 00 00 17 20 03 14 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00";
  109. var rawValid = rawDataStr.ToBytes();
  110. cutter.Feed(rawValid);
  111. Assert.AreEqual(true, onMsgCutCalledTimes == 2);
  112. Assert.AreEqual(true, messages.Count == 2);
  113. Assert.AreEqual(true, ValueEquals(messages[0], rawValid.Take(12)));
  114. Assert.AreEqual(true, onInvalidMsgCalledTimes == 2);
  115. }
  116. [TestMethod]
  117. public void OutgoingQueryMessageTest1()
  118. {
  119. var msg = new OutgoingQueryMessage(0, 10);
  120. var parser = new Parser();
  121. var actual = parser.Serialize(msg);
  122. var expect = new byte[] { 0x00,0x00,0x00,0x00,
  123. 0x00,0x06,
  124. 0x20,
  125. 0x03,
  126. 0x00,0x00,
  127. 0x00,0x0A};
  128. Assert.AreEqual(true, ValueEquals(actual, expect), $"actual is: 0x{actual.ToHexLogString()}");
  129. }
  130. [TestMethod]
  131. public void OutgoingQueryMessageTest2()
  132. {
  133. var msg = new OutgoingQueryMessage(1, 10);
  134. var parser = new Parser();
  135. var actual = parser.Serialize(msg);
  136. var expect = new byte[] { 0x00,0x00,0x00,0x00,
  137. 0x00,0x06,
  138. 0x20,
  139. 0x03,
  140. 0x00,0x01,
  141. 0x00,0x0A};
  142. Assert.AreEqual(true, ValueEquals(actual, expect), $"actual is: 0x{actual.ToHexLogString()}");
  143. }
  144. [TestMethod]
  145. public void OutgoingQueryMessageTest3()
  146. {
  147. var msg = new OutgoingQueryMessage(0x16, 1);
  148. var parser = new Parser();
  149. var actual = parser.Serialize(msg);
  150. var expect = new byte[] { 0x00,0x00,0x00,0x00,
  151. 0x00,0x06,
  152. 0x20,
  153. 0x03,
  154. 0x00,0x16,
  155. 0x00,0x01};
  156. Assert.AreEqual(true, ValueEquals(actual, expect), $"actual is: 0x{actual.ToHexLogString()}");
  157. }
  158. [TestMethod]
  159. public void OutgoingQueryMessageTest4()
  160. {
  161. var msg = new OutgoingQueryMessage(0x0230, 1);
  162. var parser = new Parser();
  163. var actual = parser.Serialize(msg);
  164. var expect = new byte[] { 0x00,0x00,0x00,0x00,
  165. 0x00,0x06,
  166. 0x20,
  167. 0x03,
  168. 0x02,0x30,
  169. 0x00,0x01};
  170. Assert.AreEqual(true, ValueEquals(actual, expect), $"actual is: 0x{actual.ToHexLogString()}");
  171. }
  172. [TestMethod]
  173. public void IncomingMessageTest1()
  174. {
  175. var raw_prefix = "00 00 00 00" +
  176. "00 17" +
  177. "20" +
  178. "03" +
  179. "14";
  180. var raw_data = "11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00";
  181. var raw_full = raw_prefix + raw_data;
  182. var parser = new Parser();
  183. var actual = parser.Deserialize(raw_full.ToBytes()) as IncomingMessage;
  184. Assert.AreEqual(true, actual != null);
  185. Assert.AreEqual(true, actual.SlaveAddress == 0x20);
  186. Assert.AreEqual(true, actual.FunctionCode == FunctionCodeEnum.读多个寄存器);
  187. Assert.AreEqual(true, actual.InnerDataLength == 0x14);
  188. Assert.AreEqual(true, ValueEquals(actual.InnerRawData, raw_data.ToBytes()));
  189. }
  190. }
  191. }