using LanTian_Pump_664_Or_886; using Microsoft.VisualStudio.TestTools.UnitTesting; using Edge.Core.Parser.BinaryParser.Util; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LanTian_Pump_664_Or_886_Test { [TestClass] public class MessageCutterTest { public static bool ValueEquals(IEnumerable array1, IEnumerable array2) { if (array1 == null && array2 == null) { return true; } if ((array1 == null) || (array2 == null)) { return false; } if (array1.Count() != array2.Count()) { return false; } if (array1.Equals(array2)) { return true; } else { for (int Index = 0; Index < array1.Count(); Index++) { if (!Equals(array1.ElementAt(Index), array2.ElementAt(Index))) { return false; } } } return true; } [TestMethod] public void ShouldCutTest1() { var cutter = new MessageCutter(); int onMsgCutCalledTimes = 0; int onInvalidMsgCalledTimes = 0; List messages = new List(); cutter.OnMessageCut += (s, a) => { onMsgCutCalledTimes++; messages.Add(cutter.Message); }; cutter.OnInvalidMessageRead += (e, f) => { onInvalidMsgCalledTimes++; }; var rawValid = "F5 01 A3 59 B2 3C".ToBytes(); cutter.Feed(rawValid); Assert.AreEqual(true, onMsgCutCalledTimes == 1); Assert.AreEqual(true, messages.Count == 1); Assert.AreEqual(true, ValueEquals(messages[0], rawValid)); Assert.AreEqual(true, onInvalidMsgCalledTimes == 0); } [TestMethod] public void ShouldCutTest2() { var cutter = new MessageCutter(); int onMsgCutCalledTimes = 0; int onInvalidMsgCalledTimes = 0; List messages = new List(); cutter.OnMessageCut += (s, a) => { onMsgCutCalledTimes++; messages.Add(cutter.Message); }; cutter.OnInvalidMessageRead += (e, f) => { onInvalidMsgCalledTimes++; }; var rawValid = "F5 01 A3 59 B2 3C"; var raw = "11 22 33 44 " + rawValid + " 55 66 77"; cutter.Feed(raw.ToBytes()); Assert.AreEqual(true, onMsgCutCalledTimes == 1); Assert.AreEqual(true, messages.Count == 1); Assert.AreEqual(true, ValueEquals(messages[0], rawValid.ToBytes())); Assert.AreEqual(true, onInvalidMsgCalledTimes > 0); } [TestMethod] public void ShouldCutTest3() { var cutter = new MessageCutter(); int onMsgCutCalledTimes = 0; int onInvalidMsgCalledTimes = 0; List messages = new List(); cutter.OnMessageCut += (s, a) => { onMsgCutCalledTimes++; messages.Add(cutter.Message); }; cutter.OnInvalidMessageRead += (e, f) => { onInvalidMsgCalledTimes++; }; var rawValid = "F5 01 A3 59 B2 3C"; var raw = "11 22 33 44 F5 FF" + rawValid + " 55 66 77"; cutter.Feed(raw.ToBytes()); Assert.AreEqual(true, onMsgCutCalledTimes == 1); Assert.AreEqual(true, messages.Count == 1); Assert.AreEqual(true, ValueEquals(messages[0], rawValid.ToBytes())); Assert.AreEqual(true, onInvalidMsgCalledTimes > 0); } [TestMethod] public void ShouldCutTest4() { var cutter = new MessageCutter(); int onMsgCutCalledTimes = 0; int onInvalidMsgCalledTimes = 0; List messages = new List(); cutter.OnMessageCut += (s, a) => { onMsgCutCalledTimes++; messages.Add(cutter.Message); }; cutter.OnInvalidMessageRead += (e, f) => { onInvalidMsgCalledTimes++; }; var rawValid = "F5 01 A3 59 B2 3C"; var raw = "11 22 33 44 F5 FF" + rawValid + " 55 66 77" + rawValid + "AA" + rawValid; cutter.Feed(raw.ToBytes()); Assert.AreEqual(true, onMsgCutCalledTimes == 3); Assert.AreEqual(true, messages.Count == 3); Assert.AreEqual(true, ValueEquals(messages[0], rawValid.ToBytes())); Assert.AreEqual(true, onInvalidMsgCalledTimes > 0); } [TestMethod] public void ShouldNotCutTest1() { var cutter = new MessageCutter(); int onMsgCutCalledTimes = 0; int onInvalidMsgCalledTimes = 0; List messages = new List(); cutter.OnMessageCut += (s, a) => { onMsgCutCalledTimes++; messages.Add(cutter.Message); }; cutter.OnInvalidMessageRead += (e, f) => { onInvalidMsgCalledTimes++; }; //below give a wrong length, the correct length byte should be A3, but i make it to A4. var rawInvalid = "F5 01 A4 59 B2 3C"; cutter.Feed(rawInvalid.ToBytes()); Assert.AreEqual(true, onMsgCutCalledTimes == 0); Assert.AreEqual(true, messages.Count == 0); //Assert.AreEqual(true, ValueEquals(messages[0], rawInvalid.ToBytes())); Assert.AreEqual(true, onInvalidMsgCalledTimes == 0); } } }