public unsafe void DecoderIsUsedCorrectly() { byte *ptr = null; byte[] buffer = null; int bytesRead; bool prefixed = false; var decoder = new CustomDecoder( Encoding.UTF8, (bytes, byteCount) => { Assert.True(ptr != null); Assert.True(prefixed != (ptr == bytes)); Assert.Equal(prefixed ? "PrefixTest".Length : "Test".Length, byteCount); string s = Encoding.UTF8.GetString(bytes, byteCount); Assert.Equal(s, prefixed ? "PrefixTest" : "Test"); return("Intercepted"); } ); fixed(byte *fixedPtr = (buffer = Encoding.UTF8.GetBytes("Test"))) { ptr = fixedPtr; Assert.Equal("Intercepted", new MemoryBlock(ptr, buffer.Length).PeekUtf8NullTerminated(0, null, decoder, out bytesRead)); Assert.Equal(buffer.Length, bytesRead); prefixed = true; Assert.Equal("Intercepted", new MemoryBlock(ptr, buffer.Length).PeekUtf8NullTerminated(0, Encoding.UTF8.GetBytes("Prefix"), decoder, out bytesRead)); Assert.Equal(buffer.Length, bytesRead); } // decoder will fail to intercept because we don't bother calling it for empty strings. Assert.Same(String.Empty, new MemoryBlock(null, 0).PeekUtf8NullTerminated(0, null, decoder, out bytesRead)); Assert.Equal(0, bytesRead); Assert.Same(String.Empty, new MemoryBlock(null, 0).PeekUtf8NullTerminated(0, new byte[0], decoder, out bytesRead)); Assert.Equal(0, bytesRead); }
public unsafe void DecoderIsUsedCorrectly() { byte* ptr = null; byte[] buffer = null; int bytesRead; bool prefixed = false; var decoder = new CustomDecoder( Encoding.UTF8, (bytes, byteCount) => { Assert.True(ptr != null); Assert.True(prefixed != (ptr == bytes)); Assert.Equal(prefixed ? "PrefixTest".Length : "Test".Length, byteCount); string s = Encoding.UTF8.GetString(bytes, byteCount); Assert.Equal(s, prefixed ? "PrefixTest" : "Test"); return "Intercepted"; } ); fixed (byte* fixedPtr = (buffer = Encoding.UTF8.GetBytes("Test"))) { ptr = fixedPtr; Assert.Equal("Intercepted", new MemoryBlock(ptr, buffer.Length).PeekUtf8NullTerminated(0, null, decoder, out bytesRead)); Assert.Equal(buffer.Length, bytesRead); prefixed = true; Assert.Equal("Intercepted", new MemoryBlock(ptr, buffer.Length).PeekUtf8NullTerminated(0, Encoding.UTF8.GetBytes("Prefix"), decoder, out bytesRead)); Assert.Equal(buffer.Length, bytesRead); } // decoder will fail to intercept because we don't bother calling it for empty strings. Assert.Same(String.Empty, new MemoryBlock(null, 0).PeekUtf8NullTerminated(0, null, decoder, out bytesRead)); Assert.Equal(0, bytesRead); Assert.Same(String.Empty, new MemoryBlock(null, 0).PeekUtf8NullTerminated(0, new byte[0], decoder, out bytesRead)); Assert.Equal(0, bytesRead); }
public CustomDecoderFallbackBuffer(CustomDecoder fallback) { this.fb = fallback; }