diff options
Diffstat (limited to 'src/System.Reflection.Metadata/tests/Utilities/BlobReaderTests.cs')
-rw-r--r-- | src/System.Reflection.Metadata/tests/Utilities/BlobReaderTests.cs | 207 |
1 files changed, 145 insertions, 62 deletions
diff --git a/src/System.Reflection.Metadata/tests/Utilities/BlobReaderTests.cs b/src/System.Reflection.Metadata/tests/Utilities/BlobReaderTests.cs index 71a2c95d5b..5a1f0bae3c 100644 --- a/src/System.Reflection.Metadata/tests/Utilities/BlobReaderTests.cs +++ b/src/System.Reflection.Metadata/tests/Utilities/BlobReaderTests.cs @@ -11,6 +11,100 @@ namespace System.Reflection.Metadata.Tests public class BlobReaderTests { [Fact] + public unsafe void Properties() + { + byte[] buffer = new byte[] { 0, 1, 0, 2, 5, 6 }; + + fixed (byte* bufferPtr = buffer) + { + var reader = new BlobReader(bufferPtr, 4); + Assert.True(reader.StartPointer == bufferPtr); + Assert.True(reader.CurrentPointer == bufferPtr); + Assert.Equal(0, reader.Offset); + Assert.Equal(4, reader.RemainingBytes); + Assert.Equal(4, reader.Length); + + Assert.Equal(0, reader.ReadByte()); + Assert.True(reader.StartPointer == bufferPtr); + Assert.True(reader.CurrentPointer == bufferPtr + 1); + Assert.Equal(1, reader.Offset); + Assert.Equal(3, reader.RemainingBytes); + Assert.Equal(4, reader.Length); + + Assert.Equal(1, reader.ReadInt16()); + Assert.True(reader.StartPointer == bufferPtr); + Assert.True(reader.CurrentPointer == bufferPtr + 3); + Assert.Equal(3, reader.Offset); + Assert.Equal(1, reader.RemainingBytes); + Assert.Equal(4, reader.Length); + + Assert.Throws<BadImageFormatException>(() => reader.ReadInt16()); + Assert.True(reader.StartPointer == bufferPtr); + Assert.True(reader.CurrentPointer == bufferPtr + 3); + Assert.Equal(3, reader.Offset); + Assert.Equal(1, reader.RemainingBytes); + Assert.Equal(4, reader.Length); + + Assert.Equal(2, reader.ReadByte()); + Assert.True(reader.StartPointer == bufferPtr); + Assert.True(reader.CurrentPointer == bufferPtr + 4); + Assert.Equal(4, reader.Offset); + Assert.Equal(0, reader.RemainingBytes); + Assert.Equal(4, reader.Length); + } + } + + [Fact] + public unsafe void Offset() + { + byte[] buffer = new byte[] { 0, 1, 0, 2, 5, 6 }; + + fixed (byte* bufferPtr = buffer) + { + var reader = new BlobReader(bufferPtr, 4); + Assert.Equal(0, reader.Offset); + + reader.Offset = 0; + Assert.Equal(0, reader.Offset); + Assert.Equal(4, reader.RemainingBytes); + Assert.True(reader.CurrentPointer == bufferPtr); + + reader.Offset = 3; + Assert.Equal(3, reader.Offset); + Assert.Equal(1, reader.RemainingBytes); + Assert.True(reader.CurrentPointer == bufferPtr + 3); + + reader.Offset = 1; + Assert.Equal(1, reader.Offset); + Assert.Equal(3, reader.RemainingBytes); + Assert.True(reader.CurrentPointer == bufferPtr + 1); + + Assert.Equal(1, reader.ReadByte()); + Assert.Equal(2, reader.Offset); + Assert.Equal(2, reader.RemainingBytes); + Assert.True(reader.CurrentPointer == bufferPtr + 2); + + reader.Offset = 4; + Assert.Equal(4, reader.Offset); + Assert.Equal(0, reader.RemainingBytes); + Assert.True(reader.CurrentPointer == bufferPtr + 4); + + Assert.Throws<BadImageFormatException>(() => reader.Offset = 5); + Assert.Equal(4, reader.Offset); + Assert.Equal(0, reader.RemainingBytes); + Assert.True(reader.CurrentPointer == bufferPtr + 4); + + Assert.Throws<BadImageFormatException>(() => reader.Offset = -1); + Assert.Equal(4, reader.Offset); + Assert.Equal(0, reader.RemainingBytes); + Assert.True(reader.CurrentPointer == bufferPtr + 4); + + Assert.Throws<BadImageFormatException>(() => reader.Offset = int.MaxValue); + Assert.Throws<BadImageFormatException>(() => reader.Offset = int.MinValue); + } + } + + [Fact] public unsafe void PublicBlobReaderCtorValidatesArgs() { byte* bufferPtrForLambda; @@ -52,163 +146,152 @@ namespace System.Reflection.Metadata.Tests { var reader = new BlobReader(new MemoryBlock(bufferPtr, buffer.Length)); - Assert.False(reader.TrySeekOffset(-1)); - Assert.False(reader.TrySeekOffset(Int32.MaxValue)); - Assert.False(reader.TrySeekOffset(Int32.MinValue)); - Assert.False(reader.TrySeekOffset(buffer.Length)); - Assert.True(reader.TrySeekOffset(buffer.Length - 1)); - - Assert.True(reader.TrySeekOffset(0)); Assert.Equal(0, reader.Offset); Assert.Throws<BadImageFormatException>(() => reader.ReadUInt64()); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(1)); - Assert.Equal(1, reader.Offset); + reader.Offset = 1; Assert.Throws<BadImageFormatException>(() => reader.ReadDouble()); Assert.Equal(1, reader.Offset); - Assert.True(reader.TrySeekOffset(2)); - Assert.Equal(2, reader.Offset); + reader.Offset = 2; Assert.Throws<BadImageFormatException>(() => reader.ReadUInt32()); Assert.Equal((ushort)0x0200, reader.ReadUInt16()); Assert.Equal(4, reader.Offset); - Assert.True(reader.TrySeekOffset(2)); - Assert.Equal(2, reader.Offset); + reader.Offset = 2; Assert.Throws<BadImageFormatException>(() => reader.ReadSingle()); Assert.Equal(2, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Equal(9.404242E-38F, reader.ReadSingle()); Assert.Equal(4, reader.Offset); - Assert.True(reader.TrySeekOffset(3)); - Assert.Equal(3, reader.Offset); + reader.Offset = 3; Assert.Throws<BadImageFormatException>(() => reader.ReadUInt16()); Assert.Equal((byte)0x02, reader.ReadByte()); Assert.Equal(4, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Equal("\u0000\u0001\u0000\u0002", reader.ReadUTF8(4)); Assert.Equal(4, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Throws<BadImageFormatException>(() => reader.ReadUTF8(5)); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Throws<BadImageFormatException>(() => reader.ReadUTF8(-1)); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Equal("\u0100\u0200", reader.ReadUTF16(4)); Assert.Equal(4, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Throws<BadImageFormatException>(() => reader.ReadUTF16(5)); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Throws<BadImageFormatException>(() => reader.ReadUTF16(-1)); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Throws<BadImageFormatException>(() => reader.ReadUTF16(6)); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Equal(buffer, reader.ReadBytes(4)); Assert.Equal(4, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); - Assert.Same(String.Empty, reader.ReadUtf8NullTerminated()); + reader.Offset = 0; + Assert.Same(string.Empty, reader.ReadUtf8NullTerminated()); Assert.Equal(1, reader.Offset); - Assert.True(reader.TrySeekOffset(1)); + reader.Offset = 1; Assert.Equal("\u0001", reader.ReadUtf8NullTerminated()); Assert.Equal(3, reader.Offset); - Assert.True(reader.TrySeekOffset(3)); + reader.Offset = 3; Assert.Equal("\u0002", reader.ReadUtf8NullTerminated()); Assert.Equal(4, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); - Assert.Same(String.Empty, reader.ReadUtf8NullTerminated()); + reader.Offset = 0; + Assert.Same(string.Empty, reader.ReadUtf8NullTerminated()); Assert.Equal(1, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Throws<BadImageFormatException>(() => reader.ReadBytes(5)); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); - Assert.Throws<BadImageFormatException>(() => reader.ReadBytes(Int32.MinValue)); + reader.Offset = 0; + Assert.Throws<BadImageFormatException>(() => reader.ReadBytes(int.MinValue)); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Throws<BadImageFormatException>(() => reader.GetMemoryBlockAt(-1, 1)); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Throws<BadImageFormatException>(() => reader.GetMemoryBlockAt(1, -1)); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(0)); + reader.Offset = 0; Assert.Equal(3, reader.GetMemoryBlockAt(1, 3).Length); Assert.Equal(0, reader.Offset); - Assert.True(reader.TrySeekOffset(3)); + reader.Offset = 3; reader.ReadByte(); Assert.Equal(4, reader.Offset); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Equal(0, reader.ReadBytes(0).Length); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; int value; Assert.False(reader.TryReadCompressedInteger(out value)); Assert.Equal(BlobReader.InvalidCompressedInteger, value); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Throws<BadImageFormatException>(() => reader.ReadCompressedInteger()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Equal(SerializationTypeCode.Invalid, reader.ReadSerializationTypeCode()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Equal(SignatureTypeCode.Invalid, reader.ReadSignatureTypeCode()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Equal(default(EntityHandle), reader.ReadTypeHandle()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Throws<BadImageFormatException>(() => reader.ReadBoolean()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Throws<BadImageFormatException>(() => reader.ReadByte()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Throws<BadImageFormatException>(() => reader.ReadSByte()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Throws<BadImageFormatException>(() => reader.ReadUInt32()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Throws<BadImageFormatException>(() => reader.ReadInt32()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Throws<BadImageFormatException>(() => reader.ReadUInt64()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Throws<BadImageFormatException>(() => reader.ReadInt64()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Throws<BadImageFormatException>(() => reader.ReadSingle()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; Assert.Throws<BadImageFormatException>(() => reader.ReadDouble()); - Assert.Equal(4, reader.Offset); + reader.Offset = 4; } byte[] buffer2 = new byte[8] { 1, 2, 3, 4, 5, 6, 7, 8 }; @@ -266,34 +349,34 @@ namespace System.Reflection.Metadata.Tests { var block = new MemoryBlock(bufferPtr, buffer.Length); - Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(Int32.MaxValue)); + Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(int.MaxValue)); Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(-1)); - Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(Int32.MinValue)); + Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(int.MinValue)); Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(4)); Assert.Throws<BadImageFormatException>(() => block.PeekUInt32(1)); Assert.Equal(0x02000100U, block.PeekUInt32(0)); - Assert.Throws<BadImageFormatException>(() => block.PeekUInt16(Int32.MaxValue)); + Assert.Throws<BadImageFormatException>(() => block.PeekUInt16(int.MaxValue)); Assert.Throws<BadImageFormatException>(() => block.PeekUInt16(-1)); - Assert.Throws<BadImageFormatException>(() => block.PeekUInt16(Int32.MinValue)); + Assert.Throws<BadImageFormatException>(() => block.PeekUInt16(int.MinValue)); Assert.Throws<BadImageFormatException>(() => block.PeekUInt16(4)); Assert.Equal(0x0200, block.PeekUInt16(2)); int bytesRead; MetadataStringDecoder stringDecoder = MetadataStringDecoder.DefaultUTF8; - Assert.Throws<BadImageFormatException>(() => block.PeekUtf8NullTerminated(Int32.MaxValue, null, stringDecoder, out bytesRead)); + Assert.Throws<BadImageFormatException>(() => block.PeekUtf8NullTerminated(int.MaxValue, null, stringDecoder, out bytesRead)); Assert.Throws<BadImageFormatException>(() => block.PeekUtf8NullTerminated(-1, null, stringDecoder, out bytesRead)); - Assert.Throws<BadImageFormatException>(() => block.PeekUtf8NullTerminated(Int32.MinValue, null, stringDecoder, out bytesRead)); + Assert.Throws<BadImageFormatException>(() => block.PeekUtf8NullTerminated(int.MinValue, null, stringDecoder, out bytesRead)); Assert.Throws<BadImageFormatException>(() => block.PeekUtf8NullTerminated(5, null, stringDecoder, out bytesRead)); Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(-1, 1)); Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(1, -1)); Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(0, -1)); Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(-1, 0)); - Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(-Int32.MaxValue, Int32.MaxValue)); - Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(Int32.MaxValue, -Int32.MaxValue)); - Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(Int32.MaxValue, Int32.MaxValue)); + Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(-int.MaxValue, int.MaxValue)); + Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(int.MaxValue, -int.MaxValue)); + Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(int.MaxValue, int.MaxValue)); Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(block.Length, -1)); Assert.Throws<BadImageFormatException>(() => block.GetMemoryBlockAt(-1, block.Length)); |