InnerStateMachineTests.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. using FuRen_Sinopec_IcCardReader;
  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. using System.Threading.Tasks;
  9. namespace MessageParserTest
  10. {
  11. [TestClass()]
  12. public class InnerStateMachineTests
  13. {
  14. [TestMethod()]
  15. public void FeedTest1()
  16. {
  17. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 5, 6, 7, 0, 8, 1, 2, 3, 4, 5, 6, 7, 8, 0xA0, 0xB0 };
  18. List<byte> result = null;
  19. //ComPortProcessor.
  20. var stateMachine = new StateMachineMessageCutter();
  21. stateMachine.OnMessageCut += (r, _) =>
  22. {
  23. result = stateMachine.Message.ToList();
  24. };
  25. bool invalidMessageCutCalled = false;
  26. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  27. stateMachine.Feed(source.ToArray());
  28. Assert.AreEqual(true, result != null);
  29. Assert.AreEqual(true, invalidMessageCutCalled != true);
  30. Assert.AreEqual(true, result.Any());
  31. Assert.AreEqual(true, result[0] == 0xFA);
  32. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 8);
  33. Assert.AreEqual(true, result.Count == 16);
  34. Assert.AreEqual(true, result.Last() == 0xB0);
  35. }
  36. [TestMethod()]
  37. public void FeedTest2()
  38. {
  39. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 5, 6, 7, 0, 8, 1, 2, 3, 4, 5, 6, 7, 8, 0xA0, 0xB0 };
  40. List<byte> result = null;
  41. var stateMachine = new StateMachineMessageCutter();
  42. stateMachine.OnMessageCut += (r, _) =>
  43. {
  44. result = stateMachine.Message.ToList();
  45. };
  46. bool invalidMessageCutCalled = false;
  47. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  48. stateMachine.Feed(source.ToArray());
  49. //}
  50. Assert.AreEqual(true, result != null);
  51. Assert.AreEqual(true, invalidMessageCutCalled != true);
  52. Assert.AreEqual(true, result.Any());
  53. Assert.AreEqual(true, result[0] == 0xFA);
  54. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 8);
  55. Assert.AreEqual(true, result.Count == 16);
  56. Assert.AreEqual(true, result.Last() == 0xB0);
  57. result = null;
  58. stateMachine.Feed(source.ToArray());
  59. Assert.AreEqual(true, result != null);
  60. Assert.AreEqual(true, invalidMessageCutCalled != true);
  61. Assert.AreEqual(true, result.Any());
  62. Assert.AreEqual(true, result[0] == 0xFA);
  63. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 8);
  64. Assert.AreEqual(true, result.Count == 16);
  65. Assert.AreEqual(true, result.Last() == 0xB0);
  66. }
  67. [TestMethod()]
  68. public void FeedTest3()
  69. {
  70. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 0xFA, 5, 6, 7, 0, 8, 1, 2, 3, 4, 5, 6, 7, 8, 0xA0, 0xB0 };
  71. List<byte> result = null;
  72. var stateMachine = new StateMachineMessageCutter();
  73. stateMachine.OnMessageCut += (r, _) =>
  74. {
  75. result = stateMachine.Message.ToList();
  76. };
  77. bool invalidMessageCutCalled = false;
  78. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  79. stateMachine.Feed(source.ToArray());
  80. //}
  81. Assert.AreEqual(true, invalidMessageCutCalled != true);
  82. Assert.AreEqual(true, result == null);
  83. }
  84. [TestMethod()]
  85. public void FeedTest4()
  86. {
  87. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 5, 6, 7, 0, 8, 1, 2, 3, 4, 5, 6, 7, 8, 0xA0, 0xB0 };
  88. List<byte> result = null;
  89. var stateMachine = new StateMachineMessageCutter();
  90. stateMachine.OnMessageCut += (r, _) =>
  91. {
  92. result = stateMachine.Message.ToList();
  93. };
  94. bool invalidMessageCutCalled = false;
  95. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  96. stateMachine.Feed(source.ToArray());
  97. //}
  98. Assert.AreEqual(true, result != null);
  99. Assert.AreEqual(true, invalidMessageCutCalled != true);
  100. Assert.AreEqual(true, result.Any());
  101. Assert.AreEqual(true, result[0] == 0xFA);
  102. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 8);
  103. Assert.AreEqual(true, result.Count == 16);
  104. Assert.AreEqual(true, result.Last() == 0xB0);
  105. }
  106. [TestMethod()]
  107. public void FeedTest5()
  108. {
  109. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 5, 6, 7, 0, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA0, 0xB0 };
  110. List<byte> result = null;
  111. var stateMachine = new StateMachineMessageCutter();
  112. stateMachine.OnMessageCut += (r, _) =>
  113. {
  114. result = stateMachine.Message.ToList();
  115. };
  116. bool invalidMessageCutCalled = false;
  117. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  118. stateMachine.Feed(source.ToArray());
  119. //}
  120. Assert.AreEqual(true, result != null);
  121. Assert.AreEqual(true, invalidMessageCutCalled != true);
  122. Assert.AreEqual(true, result.Any());
  123. Assert.AreEqual(true, result[0] == 0xFA);
  124. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 9);
  125. Assert.AreEqual(true, result.Count == 17);
  126. Assert.AreEqual(true, result.Last() == 0xB0);
  127. }
  128. [TestMethod()]
  129. public void FeedTest6()
  130. {
  131. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 9, 0xA0, 0xB0 };
  132. List<byte> result = null;
  133. var stateMachine = new StateMachineMessageCutter();
  134. stateMachine.OnMessageCut += (r, _) =>
  135. {
  136. result = stateMachine.Message.ToList();
  137. };
  138. bool invalidMessageCutCalled = false;
  139. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  140. stateMachine.Feed(source.ToArray());
  141. //}
  142. Assert.AreEqual(true, result != null);
  143. Assert.AreEqual(true, invalidMessageCutCalled != true);
  144. Assert.AreEqual(true, result.Any());
  145. Assert.AreEqual(true, result[0] == 0xFA);
  146. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 9);
  147. Assert.AreEqual(true, result.Count == 17);
  148. Assert.AreEqual(true, result[6] == 0xFA);
  149. Assert.AreEqual(true, result[7] == 2);
  150. Assert.AreEqual(true, result.Last() == 0xB0);
  151. }
  152. [TestMethod()]
  153. public void FeedTest7()
  154. {
  155. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xA0, 0xB0 };
  156. List<byte> result = null;
  157. var stateMachine = new StateMachineMessageCutter();
  158. stateMachine.OnMessageCut += (r, _) =>
  159. {
  160. result = stateMachine.Message.ToList();
  161. };
  162. bool invalidMessageCutCalled = false;
  163. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  164. stateMachine.Feed(source.ToArray());
  165. //}
  166. Assert.AreEqual(true, result != null);
  167. Assert.AreEqual(true, invalidMessageCutCalled != true);
  168. Assert.AreEqual(true, result.Any());
  169. Assert.AreEqual(true, result[0] == 0xFA);
  170. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 9);
  171. Assert.AreEqual(true, result.Count == 17);
  172. Assert.AreEqual(true, result[6] == 0xFA);
  173. Assert.AreEqual(true, result[7] == 2);
  174. Assert.AreEqual(true, result[14] == 0xFA);
  175. Assert.AreEqual(true, result[15] == 0xA0);
  176. Assert.AreEqual(true, result.Last() == 0xB0);
  177. }
  178. [TestMethod()]
  179. public void FeedTest8()
  180. {
  181. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 0xFA, 0xFA, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xA0, 0xB0 };
  182. List<byte> result = null;
  183. var stateMachine = new StateMachineMessageCutter();
  184. stateMachine.OnMessageCut += (r, _) =>
  185. {
  186. result = stateMachine.Message.ToList();
  187. };
  188. bool invalidMessageCutCalled = false;
  189. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  190. stateMachine.Feed(source.ToArray());
  191. //}
  192. Assert.AreEqual(true, result != null);
  193. Assert.AreEqual(true, invalidMessageCutCalled != true);
  194. Assert.AreEqual(true, result.Any());
  195. Assert.AreEqual(true, result[0] == 0xFA);
  196. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 9);
  197. Assert.AreEqual(true, result.Count == 17);
  198. Assert.AreEqual(true, result[6] == 0xFA);
  199. Assert.AreEqual(true, result[7] == 0xFA);
  200. Assert.AreEqual(true, result[8] == 3);
  201. Assert.AreEqual(true, result[14] == 0xFA);
  202. Assert.AreEqual(true, result[15] == 0xA0);
  203. Assert.AreEqual(true, result.Last() == 0xB0);
  204. result = null;
  205. stateMachine.Feed(source.ToArray());
  206. Assert.AreEqual(true, result != null);
  207. Assert.AreEqual(true, invalidMessageCutCalled != true);
  208. Assert.AreEqual(true, result.Any());
  209. Assert.AreEqual(true, result[0] == 0xFA);
  210. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 9);
  211. Assert.AreEqual(true, result.Count == 17);
  212. Assert.AreEqual(true, result[6] == 0xFA);
  213. Assert.AreEqual(true, result[7] == 0xFA);
  214. Assert.AreEqual(true, result[8] == 3);
  215. Assert.AreEqual(true, result[14] == 0xFA);
  216. Assert.AreEqual(true, result[15] == 0xA0);
  217. Assert.AreEqual(true, result.Last() == 0xB0);
  218. result = null;
  219. stateMachine.Feed(source.ToArray());
  220. Assert.AreEqual(true, result != null);
  221. Assert.AreEqual(true, invalidMessageCutCalled != true);
  222. Assert.AreEqual(true, result.Any());
  223. Assert.AreEqual(true, result[0] == 0xFA);
  224. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 9);
  225. Assert.AreEqual(true, result.Count == 17);
  226. Assert.AreEqual(true, result[6] == 0xFA);
  227. Assert.AreEqual(true, result[7] == 0xFA);
  228. Assert.AreEqual(true, result[8] == 3);
  229. Assert.AreEqual(true, result[14] == 0xFA);
  230. Assert.AreEqual(true, result[15] == 0xA0);
  231. Assert.AreEqual(true, result.Last() == 0xB0);
  232. }
  233. [TestMethod()]
  234. public void FeedTest9()
  235. {
  236. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xFA, 0xFA, 0xB0 };
  237. List<byte> result = null;
  238. var stateMachine = new StateMachineMessageCutter();
  239. stateMachine.OnMessageCut += (r, _) =>
  240. {
  241. result = stateMachine.Message.ToList();
  242. };
  243. bool invalidMessageCutCalled = false;
  244. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  245. stateMachine.Feed(source.ToArray());
  246. //}
  247. Assert.AreEqual(true, result != null);
  248. Assert.AreEqual(true, invalidMessageCutCalled != true);
  249. Assert.AreEqual(true, result.Any());
  250. Assert.AreEqual(true, result[0] == 0xFA);
  251. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 9);
  252. Assert.AreEqual(true, result.Count == 17);
  253. Assert.AreEqual(true, result[6] == 0xFA);
  254. Assert.AreEqual(true, result[7] == 2);
  255. Assert.AreEqual(true, result[14] == 0xFA);
  256. Assert.AreEqual(true, result[15] == 0xFA);
  257. Assert.AreEqual(true, result.Last() == 0xB0);
  258. }
  259. [TestMethod()]
  260. public void FeedTest10()
  261. {
  262. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0x00, 0xFA, 0xFA };
  263. List<byte> result = null;
  264. var stateMachine = new StateMachineMessageCutter();
  265. stateMachine.OnMessageCut += (r, _) =>
  266. {
  267. result = stateMachine.Message.ToList();
  268. };
  269. bool invalidMessageCutCalled = false;
  270. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  271. stateMachine.Feed(source.ToArray());
  272. //}
  273. Assert.AreEqual(true, result != null);
  274. Assert.AreEqual(true, invalidMessageCutCalled != true);
  275. Assert.AreEqual(true, result.Any());
  276. Assert.AreEqual(true, result[0] == 0xFA);
  277. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 9);
  278. Assert.AreEqual(true, result.Count == 17);
  279. Assert.AreEqual(true, result[6] == 0xFA);
  280. Assert.AreEqual(true, result[7] == 2);
  281. Assert.AreEqual(true, result[14] == 0xFA);
  282. Assert.AreEqual(true, result[15] == 0x00);
  283. Assert.AreEqual(true, result.Last() == 0xFA);
  284. }
  285. [TestMethod()]
  286. public void FeedTest11()
  287. {
  288. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA };
  289. List<byte> result = null;
  290. var stateMachine = new StateMachineMessageCutter();
  291. stateMachine.OnMessageCut += (r, _) =>
  292. {
  293. result = stateMachine.Message.ToList();
  294. };
  295. bool invalidMessageCutCalled = false;
  296. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  297. stateMachine.Feed(source.ToArray());
  298. //}
  299. Assert.AreEqual(true, result != null);
  300. Assert.AreEqual(true, invalidMessageCutCalled != true);
  301. Assert.AreEqual(true, result.Any());
  302. Assert.AreEqual(true, result[0] == 0xFA);
  303. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 9);
  304. Assert.AreEqual(true, result.Count == 17);
  305. Assert.AreEqual(true, result[6] == 0xFA);
  306. Assert.AreEqual(true, result[7] == 2);
  307. Assert.AreEqual(true, result[14] == 0xFA);
  308. Assert.AreEqual(true, result[15] == 0xFA);
  309. Assert.AreEqual(true, result.Last() == 0xFA);
  310. }
  311. [TestMethod()]
  312. public void FeedTest12()
  313. {
  314. var source = new List<byte>() { 11,22, 0xFA,0xFA,
  315. 0xFA, 5, 6, 7, 0, 8, 1, 2, 3, 4, 5, 6, 7,8, 0xFA, 0xFA,0x02, };
  316. List<byte> result = null;
  317. var stateMachine = new StateMachineMessageCutter();
  318. stateMachine.OnMessageCut += (r, _) =>
  319. {
  320. result = stateMachine.Message.ToList();
  321. };
  322. bool invalidMessageCutCalled = false;
  323. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  324. stateMachine.Feed(source.ToArray());
  325. //}
  326. Assert.AreEqual(true, result != null);
  327. Assert.AreEqual(true, invalidMessageCutCalled != true);
  328. Assert.AreEqual(true, result.Any());
  329. Assert.AreEqual(true, result[0] == 0xFA);
  330. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 8);
  331. Assert.AreEqual(true, result.Count == 16);
  332. }
  333. [TestMethod()]
  334. public void FeedTest15()
  335. {
  336. var source = new List<byte>() { 1, 2, 3, 4, 0xFA, 0xFA, 0xFA, 0xFA,
  337. 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
  338. 11,22,
  339. 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
  340. 55,66,
  341. 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
  342. 99,88,77,66,};
  343. List<List<byte>> results = new List<List<byte>>();
  344. var stateMachine = new StateMachineMessageCutter();
  345. stateMachine.OnMessageCut += (r, _) =>
  346. {
  347. results.Add(stateMachine.Message.ToList());
  348. };
  349. bool invalidMessageCutCalled = false;
  350. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  351. stateMachine.Feed(source.ToArray());
  352. //}
  353. Assert.AreEqual(true, results.Count == 3);
  354. foreach (var result in results)
  355. {
  356. Assert.AreEqual(true, result != null);
  357. Assert.AreEqual(true, invalidMessageCutCalled != true);
  358. Assert.AreEqual(true, result.Any());
  359. Assert.AreEqual(true, result[0] == 0xFA);
  360. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == 9);
  361. Assert.AreEqual(true, result.Count == 17);
  362. Assert.AreEqual(true, result[6] == 0xFA);
  363. Assert.AreEqual(true, result[7] == 2);
  364. Assert.AreEqual(true, result[14] == 0xFA);
  365. Assert.AreEqual(true, result[15] == 0xFA);
  366. Assert.AreEqual(true, result.Last() == 0xFA);
  367. }
  368. }
  369. [TestMethod()]
  370. public void FeedTest30()
  371. {
  372. var source = new List<byte>() { 1, 2, 3, 4,
  373. 0xFA, 5, 6, 7, 0, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0x0A, 0x0A,
  374. 0xFA, 5, 6, 7, 0, 8, 1, 2, 3, 4, 5, 6, 7, 8, 0x0A, 0x0A,
  375. 0xFA, 5, 6, 7, 0, 7, 1, 2, 3, 4, 5, 6, 7, 0x0A, 0x0A,
  376. 6,7,8,9, 0xFA, 0xFA,
  377. 0xFA, 5, 6, 7, 0, 7, 1, 2, 3, 4, 5, 6, 7, 0x0A, 0xFA,0xFA,
  378. 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
  379. 11,22, 0xFA,0xFA,
  380. 0xFA, 5, 6, 7, 0, 8, 1, 2, 3, 4, 5, 6, 7,8, 0xFA, 0xFA,0x02,
  381. 0xFA, 5, 6, 7, 0, 6, 0xFA, 0xFA, 2, 3, 4, 5, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
  382. 55,66,
  383. 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
  384. 99,88,77,66,};
  385. List<List<byte>> results = new List<List<byte>>();
  386. var stateMachine = new StateMachineMessageCutter();
  387. stateMachine.OnMessageCut += (r, _) =>
  388. {
  389. results.Add(stateMachine.Message.ToList());
  390. };
  391. bool invalidMessageCutCalled = false;
  392. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalled = true;
  393. stateMachine.Feed(source.ToArray());
  394. Assert.AreEqual(true, results.Count == 8, "but actual is " + results.Count);
  395. foreach (var result in results)
  396. {
  397. Assert.AreEqual(true, result != null);
  398. Assert.AreEqual(true, invalidMessageCutCalled != true);
  399. Assert.AreEqual(true, result.Any());
  400. Assert.AreEqual(true, result[0] == 0xFA);
  401. Assert.AreEqual(true, result[1] != 0xFA);
  402. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == (result.Count - 6 - 2));
  403. }
  404. }
  405. [TestMethod()]
  406. public void FeedTest33()
  407. {
  408. var source = new List<byte>() { 1, 2, 3, 4,
  409. 0xFA, 5, 6, 7, 0, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0x0A, 0x0A,
  410. //crc invalid case 1
  411. 0xFA, 5, 6, 7, 0, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0xFA, 0x0D,0x11,
  412. 0xFA, 5, 6, 7, 0, 7, 1, 2, 3, 4, 5, 6, 7, 0x0A, 0x0A,
  413. 6,7,8,9, 0xFA, 0xFA,
  414. //crc invalid case 2
  415. 0xFA, 5, 6, 7, 0, 7, 1, 2, 3, 4, 5, 6, 7, 0xFA,0xFA, 0xFA,0x0B,
  416. 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
  417. 11,22, 0xFA,0xFA,
  418. 0xFA, 5, 6, 7, 0, 8, 1, 2, 3, 4, 5, 6, 7,8, 0xFA, 0xFA,0x02,
  419. 0xFA, 5, 6, 7, 0, 6, 0xFA, 0xFA, 2, 3, 4, 5, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
  420. 55,66,
  421. 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
  422. 99,88,77,66,};
  423. List<List<byte>> results = new List<List<byte>>();
  424. var stateMachine = new StateMachineMessageCutter();
  425. stateMachine.OnMessageCut += (r, _) =>
  426. {
  427. results.Add(stateMachine.Message.ToList());
  428. };
  429. int invalidMessageCutCalledTimes = 0;
  430. stateMachine.OnInvalidMessageRead += (__, ___) => invalidMessageCutCalledTimes++;
  431. stateMachine.Feed(source.ToArray());
  432. Assert.AreEqual(true, results.Count == 6, "but actual is " + results.Count);
  433. Assert.AreEqual(true, invalidMessageCutCalledTimes == 2);
  434. foreach (var result in results)
  435. {
  436. Assert.AreEqual(true, result != null);
  437. Assert.AreEqual(true, result.Any());
  438. Assert.AreEqual(true, result[0] == 0xFA);
  439. Assert.AreEqual(true, result[1] != 0xFA);
  440. Assert.AreEqual(true, ((new List<byte>() { result[4], result[5] }).ToArray()).GetBCD() == (result.Count - 6 - 2));
  441. }
  442. }
  443. [TestMethod()]
  444. public void Reduce0xFAPair_Test0()
  445. {
  446. var stateMachine = new StateMachineMessageCutter();
  447. var source = new List<byte>() { 0xFA, 0xFA, 3 };
  448. stateMachine.Reduce0xFAPair(source, 0);
  449. Assert.AreEqual(true, source.Count == 2);
  450. Assert.AreEqual(true, source[0] == 0xFA);
  451. Assert.AreEqual(true, source[1] == 3);
  452. }
  453. [TestMethod()]
  454. public void Reduce0xFAPair_Test1()
  455. {
  456. var stateMachine = new StateMachineMessageCutter();
  457. var source = new List<byte>() { 0xFA, 0xFA, 0xFA, 0xFA, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xA0, 0xB0 };
  458. stateMachine.Reduce0xFAPair(source, 0);
  459. Assert.AreEqual(true, source.Count == 11);
  460. Assert.AreEqual(true, source[0] == 0xFA);
  461. Assert.AreEqual(true, source[1] == 0xFA);
  462. Assert.AreEqual(true, source[2] == 3);
  463. }
  464. [TestMethod()]
  465. public void Reduce0xFAPair_Test2()
  466. {
  467. var stateMachine = new StateMachineMessageCutter();
  468. var source = new List<byte>() { 0xFA, 0xFA, 0xFA, 0xFA, 2, 3, 4, 5, 6, 7, 0xFA, 0xFA, 0xA0, 0xB0 };
  469. stateMachine.Reduce0xFAPair(source, 2);
  470. Assert.AreEqual(true, source.Count == 12);
  471. Assert.AreEqual(true, source[0] == 0xFA);
  472. Assert.AreEqual(true, source[1] == 0xFA);
  473. Assert.AreEqual(true, source[2] == 0xFA);
  474. Assert.AreEqual(true, source[3] == 2);
  475. }
  476. [TestMethod()]
  477. public void Reduce0xFAPair_Test3()
  478. {
  479. var stateMachine = new StateMachineMessageCutter();
  480. var source = new List<byte>() { 0xFA, 0xFA, 0xFA, 3, 4, 5, 6, 7, 0xFA, 0xFA, 0xA0, 0xB0 };
  481. stateMachine.Reduce0xFAPair(source, 0);
  482. Assert.AreEqual(true, source.Count == 10);
  483. Assert.AreEqual(true, source[0] == 0xFA);
  484. Assert.AreEqual(true, source[1] == 0xFA);
  485. Assert.AreEqual(true, source[2] == 3);
  486. Assert.AreEqual(true, source[3] == 4);
  487. }
  488. [TestMethod()]
  489. public void Reduce0xFAPair_Test3_0()
  490. {
  491. var stateMachine = new StateMachineMessageCutter();
  492. var source = new List<byte>() { 0xFA, 5, 6, 7, 0, 9, 0xFA, 0xFA, 0xFA, 0xFA, 3, 4, 5, 6, 7, 8, 0xFA, 0xFA, 0xA0, 0xB0 };
  493. stateMachine.Reduce0xFAPair(source, 0);
  494. Assert.AreEqual(true, source.Count == 17);
  495. Assert.AreEqual(true, source[0] == 0xFA);
  496. Assert.AreEqual(true, source[1] == 5);
  497. Assert.AreEqual(true, source[6] == 0xFA);
  498. Assert.AreEqual(true, source[7] == 0xFA);
  499. Assert.AreEqual(true, source[8] == 3);
  500. Assert.AreEqual(true, source[16] == 0xB0);
  501. Assert.AreEqual(true, source[15] == 0xA0);
  502. Assert.AreEqual(true, source[14] == 0xFA);
  503. Assert.AreEqual(true, source[13] == 8);
  504. }
  505. [TestMethod()]
  506. public void Reduce0xFAPair_Test4()
  507. {
  508. var stateMachine = new StateMachineMessageCutter();
  509. var source = new List<byte>() { 0xFA, 0xFA, 0xFA, 4, 5, 6, 7, 0xFA, 0xFA, 0xA0, 0xB0 };
  510. stateMachine.Reduce0xFAPair(source, 2);
  511. Assert.AreEqual(true, source.Count == 10);
  512. Assert.AreEqual(true, source[0] == 0xFA);
  513. Assert.AreEqual(true, source[1] == 0xFA);
  514. Assert.AreEqual(true, source[2] == 0xFA);
  515. Assert.AreEqual(true, source[3] == 4);
  516. Assert.AreEqual(true, source[9] == 0xB0);
  517. Assert.AreEqual(true, source[8] == 0xA0);
  518. Assert.AreEqual(true, source[7] == 0xFA);
  519. }
  520. [TestMethod()]
  521. public void Reduce0xFAPair_Test5()
  522. {
  523. var stateMachine = new StateMachineMessageCutter();
  524. var source = new List<byte>() { 0xFA, 0xFA, 0xFA, 4, 5, 6, 7, 0xFA, 0xFA, 0xFA, 0xFA };
  525. stateMachine.Reduce0xFAPair(source, 2);
  526. Assert.AreEqual(true, source.Count == 9);
  527. Assert.AreEqual(true, source[0] == 0xFA);
  528. Assert.AreEqual(true, source[1] == 0xFA);
  529. Assert.AreEqual(true, source[2] == 0xFA);
  530. Assert.AreEqual(true, source[3] == 4);
  531. Assert.AreEqual(true, source[6] == 7);
  532. Assert.AreEqual(true, source[7] == 0xFA);
  533. Assert.AreEqual(true, source[8] == 0xFA);
  534. }
  535. [TestMethod()]
  536. public void Reduce0xFAPair_Test6()
  537. {
  538. var stateMachine = new StateMachineMessageCutter();
  539. var source = new List<byte>() { 0xFA, 0xFA, 0xFA, 4, 5, 6, 7, 0xFA, 0xFA };
  540. stateMachine.Reduce0xFAPair(source, 2);
  541. Assert.AreEqual(true, source.Count == 8);
  542. Assert.AreEqual(true, source[0] == 0xFA);
  543. Assert.AreEqual(true, source[1] == 0xFA);
  544. Assert.AreEqual(true, source[2] == 0xFA);
  545. Assert.AreEqual(true, source[3] == 4);
  546. Assert.AreEqual(true, source[6] == 7);
  547. Assert.AreEqual(true, source[7] == 0xFA);
  548. }
  549. [TestMethod()]
  550. public void Reduce0xFAPair_Test7()
  551. {
  552. var stateMachine = new StateMachineMessageCutter();
  553. var source = new List<byte>() { 0xFA, 0xFA, 0xFA, 4, 5, 6, 7, 0xFA };
  554. stateMachine.Reduce0xFAPair(source, 2);
  555. Assert.AreEqual(true, source.Count == 8);
  556. Assert.AreEqual(true, source[0] == 0xFA);
  557. Assert.AreEqual(true, source[1] == 0xFA);
  558. Assert.AreEqual(true, source[2] == 0xFA);
  559. Assert.AreEqual(true, source[3] == 4);
  560. Assert.AreEqual(true, source[6] == 7);
  561. Assert.AreEqual(true, source[7] == 0xFA);
  562. }
  563. }
  564. }