protected override IStructuralNode CreateChildNode(int index) { var pair = _provider.StreamHeaderOffsets[index]; var nameLen = pair.Key.Length; var stringBytes = nameLen < 32 ? nameLen + 1 : 32; var template = new CompoundNodeTemplate() { { "Offset", StandardTemplates.UInt32 }, { "Size", StandardTemplates.UInt32 }, { "Name", StandardTemplates.Text(stringBytes, Encoding.ASCII) }, }; template.RoundWidthUpToBoundary(4); return(new TemplatedStructuralNode(_provider.Data, this, pair.Key, template, _provider.MetaDataOffset + pair.Value)); }
public void RoundToMultiple() { var mockChild1 = new Mock <IStructuralNodeTemplate>(MockBehavior.Strict); mockChild1.Setup(x => x.Width).Returns(1); var mockChild2 = new Mock <IStructuralNodeTemplate>(MockBehavior.Strict); mockChild2.Setup(x => x.Width).Returns(4); var template = new CompoundNodeTemplate() { { "A", mockChild1.Object }, { "B", mockChild2.Object }, }; template.RoundWidthUpToBoundary(4); Assert.That(template.Width, Is.EqualTo(8)); Assert.That(template.Components.Select(x => x.Name), Is.EqualTo(new[] { "A", "B" })); Assert.That(template.Components.Select(x => x.Offset), Is.EqualTo(new[] { 0, 1 })); Assert.That(template.Components.Select(x => x.Template), Is.EqualTo(new[] { mockChild1.Object, mockChild2.Object })); }