示例#1
0
        private static int GetLengthForStringDataNode(StringDataNode stringDataNode)
        {
            FieldInfo field = typeof(StringDataNode)
                              .GetField("length", BindingFlags.NonPublic | BindingFlags.Instance);

            return((byte)field.GetValue(stringDataNode));
        }
示例#2
0
        public void Test_Getting_Edges()
        {
            IDataNode dataNode = new StringDataNode();

            dataNode.Edges
            .Should()
            .BeEmpty();
        }
示例#3
0
        public void Test_Writing_A_Null_String()
        {
            IDataNode dataNode = new StringDataNode();

            Action action = () => dataNode.Write(binaryWriter, null);

            action.Should()
            .ThrowArgumentNullException("value");
        }
示例#4
0
        public void Test_Reading_A_String_From_A_Null_Reader()
        {
            IDataNode dataNode = new StringDataNode();

            Action action = () => dataNode.Read(null);

            action.Should()
            .ThrowArgumentNullException("binaryReader");
        }
示例#5
0
        public void Test_Writing_A_String_To_A_Null_BinaryWriter()
        {
            IDataNode dataNode = new StringDataNode();

            Action action = () => dataNode.Write(null, string.Empty);

            action.Should()
            .ThrowArgumentNullException("binaryWriter");
        }
示例#6
0
        public void Test_Writing_A_Non_String_Object()
        {
            IDataNode dataNode = new StringDataNode();
            int       value    = 1;

            Action action = () => dataNode.Write(binaryWriter, value);

            action.Should()
            .ThrowExactly <ArgumentException>()
            .WithMessage($"Cannot write value of type {value.GetType().Name} as a string.");
        }
示例#7
0
        public void Test_Writing_An_Offline_String_With_Invalid_Length()
        {
            IDataNode dataNode = new StringDataNode();
            string    value    = new string('a', StringDataNode.OFFSET_STRING_MAX_LENGTH + 1);

            Action action = () => dataNode.Write(binaryWriter, value);

            action.Should()
            .ThrowExactly <ArgumentException>()
            .WithMessage($"String length is longer than {StringDataNode.OFFSET_STRING_MAX_LENGTH}.");
        }
示例#8
0
        public void Test_Writing_An_Inline_String_Longer_Than_The_Fixed_Size()
        {
            byte      length   = 20;
            IDataNode dataNode = new StringDataNode(length);
            string    value    = new string('a', length + 1);

            Action action = () => dataNode.Write(binaryWriter, value);

            action.Should()
            .ThrowExactly <ArgumentException>()
            .WithMessage($"String length is longer than {length}.");
        }
示例#9
0
            public void VerifyTree(IDataNode dataNode)
            {
                dataNode.Should().BeOfType <UserTypeDataNode <ClassWithStringInline> >();

                dataNode.Edges.Should().HaveCount(1);

                VerifyEdge(dataNode.Edges[0], this, v => v.Value);

                StringDataNode stringDataNode = dataNode.Edges[0].ChildNode.Should().BeOfType <StringDataNode>()
                                                .Subject;

                GetLengthForStringDataNode(stringDataNode).Should().Be(LENGTH);
            }
示例#10
0
        public void Test_Writing_An_Inline_String_Of_Exactly_The_Fixed_Size()
        {
            byte      length   = 20;
            IDataNode dataNode = new StringDataNode(length);
            string    value    = new string('b', length);

            dataNode.Write(binaryWriter, value);

            Received.InOrder(() =>
            {
                binaryWriter.WriteBytes(Matcher.ForEquivalentArray(Encoding.ASCII.GetBytes(value)));
            });
        }
示例#11
0
            public void VerifyTree(IDataNode dataNode)
            {
                dataNode.Should().BeOfType <UserTypeDataNode <ClassWithStringAtOffset> >();

                dataNode.Edges.Should().HaveCount(1);

                VerifyEdge(dataNode.Edges[0], this, v => v.Value);

                StringDataNode stringDataNode = dataNode.Edges[0].ChildNode.Should().BeOfType <OffsetNode>()
                                                .Subject.ChildNode.Should().BeOfType <StringDataNode>()
                                                .Subject;

                GetLengthForStringDataNode(stringDataNode).Should().Be(StringDataNode.OFFSET_STRING_MAX_LENGTH);
            }
示例#12
0
        public void Test_Reading_An_Inline_String_Of_Exactly_The_Fixed_Size()
        {
            byte      length   = 20;
            IDataNode dataNode = new StringDataNode(length);
            string    value    = new string('d', length);

            binaryReader.ReadBytes(length).Returns(Encoding.ASCII.GetBytes(value));

            object result = dataNode.Read(binaryReader);

            result.Should().Be(value);

            binaryReader.Received().ReadBytes(length);
        }
示例#13
0
        public void Test_Writing_An_Offline_String()
        {
            IDataNode dataNode = new StringDataNode();
            string    value    = "my value";

            dataNode.Write(binaryWriter, value);

            Received.InOrder(() =>
            {
                binaryWriter.WriteByte((byte)value.Length);
                binaryWriter.WriteBytes(Matcher.ForEquivalentArray(Encoding.ASCII.GetBytes(value)));
                binaryWriter.WriteByte(0);
            });
        }
示例#14
0
        public void Test_Reading_An_Inline_String_Of_Not_Exactly_The_Fixed_Size()
        {
            byte      length   = 20;
            IDataNode dataNode = new StringDataNode(length);
            string    value    = new string('c', length / 2);

            byte[] bytes = new byte[length];

            Array.Copy(Encoding.ASCII.GetBytes(value), bytes, value.Length);
            binaryReader.ReadBytes(length).Returns(bytes);

            object result = dataNode.Read(binaryReader);

            result.Should().Be(value);

            binaryReader.Received().ReadBytes(length);
        }
示例#15
0
        public void Test_Reading_An_Offline_String()
        {
            IDataNode dataNode = new StringDataNode();
            string    value    = "value";

            binaryReader.ReadByte().Returns((byte)value.Length, (byte)0);
            binaryReader.ReadBytes(value.Length).Returns(Encoding.ASCII.GetBytes(value));

            object result = dataNode.Read(binaryReader);

            result.Should().Be(value);

            Received.InOrder(() =>
            {
                binaryReader.ReadByte();
                binaryReader.ReadBytes(value.Length);
                binaryReader.ReadByte();
            });
        }