diff --git a/src/MIDTesters.Core/Job/TestMid0038.cs b/src/MIDTesters.Core/Job/TestMid0038.cs index 901cdc2..bc412f1 100644 --- a/src/MIDTesters.Core/Job/TestMid0038.cs +++ b/src/MIDTesters.Core/Job/TestMid0038.cs @@ -14,7 +14,7 @@ public void Mid0038Revision1() string package = "00220038001 01"; var mid = _midInterpreter.Parse(package); - Assert.IsNotNull(mid.JobId); + Assert.AreEqual(1, mid.JobId); AssertEqualPackages(package, mid); } @@ -26,7 +26,7 @@ public void Mid0038ByteRevision1() byte[] bytes = GetAsciiBytes(package); var mid = _midInterpreter.Parse(bytes); - Assert.IsNotNull(mid.JobId); + Assert.AreEqual(1, mid.JobId); AssertEqualPackages(bytes, mid); } @@ -37,7 +37,7 @@ public void Mid0038Revision2() string package = "00240038002 0001"; var mid = _midInterpreter.Parse(package); - Assert.IsNotNull(mid.JobId); + Assert.AreEqual(1, mid.JobId); AssertEqualPackages(package, mid); } @@ -49,8 +49,20 @@ public void Mid0038ByteRevision2() byte[] bytes = GetAsciiBytes(package); var mid = _midInterpreter.Parse(bytes); - Assert.IsNotNull(mid.JobId); + Assert.AreEqual(1, mid.JobId); AssertEqualPackages(bytes, mid); } + + [TestMethod] + [TestCategory("Revision 2"), TestCategory("ByteArray")] + public void Mid0038PackRevision2() + { + var mid = new Mid0038(2); + mid.JobId = 1; + var actual = mid.PackBytes(); + var package = "00240038002 0001"; + + CollectionAssert.AreEqual(GetAsciiBytes(package), actual); + } } } diff --git a/src/MIDTesters.Core/MidTester.cs b/src/MIDTesters.Core/MidTester.cs index 4c34234..2737c9e 100644 --- a/src/MIDTesters.Core/MidTester.cs +++ b/src/MIDTesters.Core/MidTester.cs @@ -35,7 +35,7 @@ protected void AssertEqualPackages(string expected, Mid mid, bool useEmptyRevisi Assert.AreEqual(expected, mid.Pack()); } - protected void AssertEqualPackages(IEnumerable expected, Mid mid, bool useEmptyRevision = false) + protected void AssertEqualPackages(IReadOnlyCollection expected, Mid mid, bool useEmptyRevision = false) { if (useEmptyRevision) { @@ -43,7 +43,7 @@ protected void AssertEqualPackages(IEnumerable expected, Mid mid, bool use } mid.Header.StationId = mid.Header.SpindleId = null; - Assert.IsTrue(mid.PackBytes().SequenceEqual(expected)); + CollectionAssert.AreEqual(expected.ToArray(), mid.PackBytes()); } } } diff --git a/src/OpenProtocolInterpreter/Job/Mid0038.cs b/src/OpenProtocolInterpreter/Job/Mid0038.cs index 7666569..1963ffb 100644 --- a/src/OpenProtocolInterpreter/Job/Mid0038.cs +++ b/src/OpenProtocolInterpreter/Job/Mid0038.cs @@ -58,23 +58,26 @@ protected override Dictionary> RegisterDatafields() { { 1, new List() - { - DataField.Number(DataFields.JobId, 20, 2, false), - } + { + DataField.Number(DataFields.JobId, 20, GetJobIdSize(), false), + } } }; } private void HandleRevision() { - if (Header.Revision > 1) - { - GetField(1, DataFields.JobId).Size = 4; - } - else + var dataField = GetField(1, DataFields.JobId); + dataField.Size = GetJobIdSize(); + } + + private int GetJobIdSize() + { + return Header.StandardizedRevision switch { - GetField(1, DataFields.JobId).Size = 2; - } + <= 1 => 2, + _ => 4 + }; } protected enum DataFields diff --git a/src/OpenProtocolInterpreter/MID.cs b/src/OpenProtocolInterpreter/MID.cs index 8bc55ee..69fe328 100644 --- a/src/OpenProtocolInterpreter/MID.cs +++ b/src/OpenProtocolInterpreter/MID.cs @@ -38,8 +38,8 @@ protected virtual string BuildHeader() { if (RevisionsByFields.Any()) { - Header.Length = 20; - for (int i = 1; i <= (Header.Revision > 0 ? Header.Revision : 1); i++) + Header.Length = Header.DefaultSize; + for (int i = 1; i <= Header.StandardizedRevision; i++) { if (RevisionsByFields.TryGetValue(i, out var dataFields)) { @@ -59,7 +59,7 @@ public virtual string Pack() var builder = new StringBuilder(header); int prefixIndex = 1; - var revision = (Header.Revision > 0 ? Header.Revision : 1); + var revision = Header.StandardizedRevision; for (int i = 1; i <= revision; i++) { builder.Append(Pack(i, ref prefixIndex));