From 40311a634de77790147d3d9de8558562b16c7ea7 Mon Sep 17 00:00:00 2001 From: Patrick Grote Date: Wed, 25 Sep 2024 18:11:08 +0200 Subject: [PATCH] MOOOOOOR TESTS --- .../Metadata/JSON/OneOfTypes/BitFieldType.cs | 2 +- .../Metadata/JSON/TestBitFieldType.cs | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/RDMSharp/Metadata/JSON/OneOfTypes/BitFieldType.cs b/RDMSharp/Metadata/JSON/OneOfTypes/BitFieldType.cs index b4cc648..426428d 100644 --- a/RDMSharp/Metadata/JSON/OneOfTypes/BitFieldType.cs +++ b/RDMSharp/Metadata/JSON/OneOfTypes/BitFieldType.cs @@ -100,7 +100,7 @@ public override byte[] ParsePayloadToData(DataTree dataTree) BitType bit = Bits.FirstOrDefault(b=>b.Name== bitDataTree.Name); if (bit == null) throw new ArithmeticException($"Can't find matching BitType {bitDataTree.Name}"); - if (Bits[bitDataTree.Index] != bit) + if (Bits.Length <= bitDataTree.Index || Bits[bitDataTree.Index] != bit) throw new ArithmeticException($"The given DataTree {nameof(bitDataTree.Index)}({bitDataTree.Index}) not match BitType {nameof(bit.Index)}({bit.Index})"); if (bitDataTree.Value is not bool value) throw new ArithmeticException($"DataTree Value is not bool"); diff --git a/RDMSharpTests/Metadata/JSON/TestBitFieldType.cs b/RDMSharpTests/Metadata/JSON/TestBitFieldType.cs index 076eceb..f95bf1b 100644 --- a/RDMSharpTests/Metadata/JSON/TestBitFieldType.cs +++ b/RDMSharpTests/Metadata/JSON/TestBitFieldType.cs @@ -66,7 +66,24 @@ private void DoParseDataTest(BitFieldType bitFieldType, DataTree dataTree, byte[ Assert.That(parsedDataTree.Value, Is.Null); Assert.That(parsedDataTree.Children, Is.Not.Null); - Assert.Throws(typeof(ArithmeticException), () => data = bitFieldType.ParsePayloadToData(new DataTree("Different Name", dataTree.Index, dataTree.Value)), message); + Assert.Throws(typeof(ArithmeticException), () => data = bitFieldType.ParsePayloadToData(new DataTree("Different Name", dataTree.Index, children: dataTree.Children)), message); + Assert.Throws(typeof(ArithmeticException), () => data = bitFieldType.ParsePayloadToData(new DataTree(dataTree.Name, dataTree.Index, children: dataTree.Children?.Take(2).ToArray())), message); + + var children = dataTree.Children!.ToArray(); + children[1] = new DataTree("Other Name", children[1].Index, children[1].Value); + Assert.Throws(typeof(ArithmeticException), () => data = bitFieldType.ParsePayloadToData(new DataTree(dataTree.Name, dataTree.Index, children: children)), message); + + children = dataTree.Children!.ToArray(); + children[1] = new DataTree(children[1].Name, 3, children[1].Value); + Assert.Throws(typeof(ArithmeticException), () => data = bitFieldType.ParsePayloadToData(new DataTree(dataTree.Name, dataTree.Index, children: children)), message); + + children = dataTree.Children!.ToArray(); + children[1] = new DataTree(children[1].Name, 0, children[1].Value); + Assert.Throws(typeof(ArithmeticException), () => data = bitFieldType.ParsePayloadToData(new DataTree(dataTree.Name, dataTree.Index, children: children)), message); + + children = dataTree.Children!.ToArray(); + children[1] = new DataTree(children[1].Name, children[1].Index, 3); + Assert.Throws(typeof(ArithmeticException), () => data = bitFieldType.ParsePayloadToData(new DataTree(dataTree.Name, dataTree.Index, children: children)), message); }); } }