Ejemplo n.º 1
0
        protected override IList <IStructuralNode> CreateChildNodes()
        {
            var data   = _provider.Data;
            var offset = _provider.MetaDataOffset;
            var length = data.Read <int>(offset + 12);

            var headerTemplate = new CompoundNodeTemplate()
            {
                { "Signature", StandardTemplates.UInt32 },
                { "Major Version", StandardTemplates.UInt16 },
                { "Minor Version", StandardTemplates.UInt16 },
                { "Reserved", StandardTemplates.UInt32 },
                { "Length", StandardTemplates.UInt32 },
                { "Version", StandardTemplates.Text(length, Encoding.UTF8) },
                { "Flags", StandardTemplates.UInt16 },
                { "Streams", StandardTemplates.UInt16 },
            };

            return(new IStructuralNode[]
            {
                new TemplatedStructuralNode(_provider.Data, this, "Header", headerTemplate, _provider.MetaDataOffset),
                new StreamHeaderListNode(_provider, this),
                new StreamListNode(_provider, this),
            });
        }
Ejemplo n.º 2
0
        public void PositionOverride()
        {
            var mockChild1 = new Mock <IStructuralNodeTemplate>(MockBehavior.Strict);

            mockChild1.Setup(x => x.Width).Returns(4);

            var mockChild2 = new Mock <IStructuralNodeTemplate>(MockBehavior.Strict);

            mockChild2.Setup(x => x.Width).Returns(2);

            var mockChild3 = new Mock <IStructuralNodeTemplate>(MockBehavior.Strict);

            mockChild3.Setup(x => x.Width).Returns(2);

            var template = new CompoundNodeTemplate()
            {
                { "A", mockChild1.Object },
                { PositionMode.RelativeToParent, 16, "B", mockChild2.Object },
                { PositionMode.RelativeToLast, 2, "C", mockChild3.Object },
            };

            Assert.That(template.Width, Is.EqualTo(22));
            Assert.That(template.Components.Select(x => x.Name), Is.EqualTo(new[] { "A", "B", "C" }));
            Assert.That(template.Components.Select(x => x.Offset), Is.EqualTo(new[] { 0, 16, 20 }));
            Assert.That(template.Components.Select(x => x.Template), Is.EqualTo(new[] { mockChild1.Object, mockChild2.Object, mockChild3.Object }));
        }
Ejemplo n.º 3
0
        IStructuralNodeTemplate CreateTableListNode(MetaDataTableCodes[] codes, HeapSizeFlags heapSizes)
        {
            var tables     = new CompoundNodeTemplate();
            var statistics = new MetaDataTableStatistics(GetRowCounts(codes), heapSizes);

            for (var i = 0; i < codes.Length; i++)
            {
                var code     = codes[i];
                var rowCount = statistics.GetRowCount(code);

                if (rowCount <= 0)
                {
                    continue;
                }

                var rowTemplate = CreateRowTemplate(statistics, code);

                if (rowTemplate == null)
                {
                    tables.Add(code + " Not Yet Implemented", StandardTemplates.UInt8);
                    return(tables);
                }

                tables.Add(code.ToString(), new RepeatingNodeTemplate(rowTemplate, rowCount, GetMetaDataTokenFormatter(code)));
            }

            return(tables);
        }
Ejemplo n.º 4
0
        public void Children()
        {
            var mockChild1 = new Mock <IStructuralNodeTemplate>(MockBehavior.Strict);

            mockChild1.Setup(x => x.Width).Returns(4);

            var mockChild2 = new Mock <IStructuralNodeTemplate>(MockBehavior.Strict);

            mockChild2.Setup(x => x.Width).Returns(2);

            var mockChild3 = new Mock <IStructuralNodeTemplate>(MockBehavior.Strict);

            mockChild3.Setup(x => x.Width).Returns(2);

            var template = new CompoundNodeTemplate()
            {
                { "A", mockChild1.Object },
                { "B", mockChild2.Object },
                { "C", mockChild3.Object },
            };

            Assert.That(template.Width, Is.EqualTo(8));
            Assert.That(template.Components.Select(x => x.Name), Is.EqualTo(new[] { "A", "B", "C" }));
            Assert.That(template.Components.Select(x => x.Offset), Is.EqualTo(new[] { 0, 4, 6 }));
            Assert.That(template.Components.Select(x => x.Template), Is.EqualTo(new[] { mockChild1.Object, mockChild2.Object, mockChild3.Object }));
        }
Ejemplo n.º 5
0
        static IStructuralNodeTemplate CreateRowHeader(MetaDataTableCodes[] codes)
        {
            var result = new CompoundNodeTemplate();

            for (var i = 0; i < codes.Length; i++)
            {
                result.Add(codes[i].ToString(), StandardTemplates.UInt32);
            }

            return(result);
        }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        public void GetValue()
        {
            var mockData = new Mock <IDataSource>(MockBehavior.Strict);

            var mockChild = new Mock <IStructuralNodeTemplate>(MockBehavior.Strict);

            mockChild.Setup(x => x.Width).Returns(1);

            var template = new CompoundNodeTemplate()
            {
                { "A", mockChild.Object },
            };

            template.OverrideWidth(4);

            Assert.That(template.GetValue(mockData.Object, 100), Is.Null);
        }
Ejemplo n.º 8
0
        public void OverrideWidth()
        {
            var mockChild1 = new Mock <IStructuralNodeTemplate>(MockBehavior.Strict);

            mockChild1.Setup(x => x.Width).Returns(1);

            var template = new CompoundNodeTemplate()
            {
                { "A", mockChild1.Object },
            };

            template.OverrideWidth(4);

            Assert.That(template.Width, Is.EqualTo(4));
            Assert.That(template.Components.Select(x => x.Name), Is.EqualTo(new[] { "A" }));
            Assert.That(template.Components.Select(x => x.Offset), Is.EqualTo(new[] { 0 }));
            Assert.That(template.Components.Select(x => x.Template), Is.EqualTo(new[] { mockChild1.Object }));
        }
Ejemplo n.º 9
0
        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 }));
        }