//[InlineData(TextEncoderTestHelper.SupportedEncoding.FromUtf32)] // Open issue: https://github.com/dotnet/corefxlab/issues/1513 public void InputBufferContainsSomeInvalidData(TextEncoderTestHelper.SupportedEncoding from) { string inputStringEndsWithLow = TextEncoderTestHelper.GenerateInvalidStringEndsWithLow(TextEncoderConstants.DataLength); string inputStringInvalid = TextEncoderTestHelper.GenerateStringWithInvalidChars(TextEncoderConstants.DataLength); byte[] inputUtf8Bytes = TextEncoderTestHelper.GenerateUtf8BytesWithInvalidBytes(TextEncoderConstants.DataLength); byte[] expectedBytes; Span <byte> encodedBytes; int expectedBytesWritten; int bytesWritten; switch (from) { case TextEncoderTestHelper.SupportedEncoding.FromUtf8: expectedBytes = Text.Encoding.Convert(testEncoder, testEncoder, inputUtf8Bytes); ReadOnlySpan <byte> inputUtf8 = inputUtf8Bytes; expectedBytesWritten = TextEncoderTestHelper.GetUtf8ByteCount(inputUtf8); encodedBytes = new Span <byte>(new byte[expectedBytesWritten]); Assert.False(utf8.TryEncode(inputUtf8, encodedBytes, out int charactersConsumed, out bytesWritten)); Assert.True(charactersConsumed < inputUtf8Bytes.Length); break; case TextEncoderTestHelper.SupportedEncoding.FromUtf16: byte[] inputStringUtf16 = testEncoderUnicode.GetBytes(inputStringEndsWithLow); expectedBytes = Text.Encoding.Convert(testEncoderUnicode, testEncoder, inputStringUtf16); ReadOnlySpan <char> inputUtf16 = inputStringEndsWithLow.AsSpan(); expectedBytesWritten = TextEncoderTestHelper.GetUtf8ByteCount(inputUtf16); encodedBytes = new Span <byte>(new byte[expectedBytesWritten + 10]); Assert.False(utf8.TryEncode(inputUtf16, encodedBytes, out charactersConsumed, out bytesWritten)); Assert.True(charactersConsumed < inputStringEndsWithLow.Length); inputStringUtf16 = testEncoderUnicode.GetBytes(inputStringInvalid); expectedBytes = Text.Encoding.Convert(testEncoderUnicode, testEncoder, inputStringUtf16); inputUtf16 = inputStringInvalid.AsSpan(); expectedBytesWritten = TextEncoderTestHelper.GetUtf8ByteCount(inputUtf16); encodedBytes = new Span <byte>(new byte[expectedBytesWritten]); Assert.False(utf8.TryEncode(inputUtf16, encodedBytes, out charactersConsumed, out bytesWritten)); Assert.True(charactersConsumed < inputStringInvalid.Length); break; case TextEncoderTestHelper.SupportedEncoding.FromString: inputStringUtf16 = testEncoderUnicode.GetBytes(inputStringEndsWithLow); expectedBytes = Text.Encoding.Convert(testEncoderUnicode, testEncoder, inputStringUtf16); string inputStr = inputStringEndsWithLow; expectedBytesWritten = TextEncoderTestHelper.GetUtf8ByteCount(inputStr); encodedBytes = new Span <byte>(new byte[expectedBytesWritten + 10]); Assert.False(utf8.TryEncode(inputStr, encodedBytes, out bytesWritten)); inputStringUtf16 = testEncoderUnicode.GetBytes(inputStringInvalid); expectedBytes = Text.Encoding.Convert(testEncoderUnicode, testEncoder, inputStringUtf16); inputStr = inputStringInvalid; expectedBytesWritten = TextEncoderTestHelper.GetUtf8ByteCount(inputStr); encodedBytes = new Span <byte>(new byte[expectedBytesWritten]); Assert.False(utf8.TryEncode(inputStr, encodedBytes, out bytesWritten)); break; case TextEncoderTestHelper.SupportedEncoding.FromUtf32: // Invalid if codePoint > 0x10FFFF default: expectedBytes = Text.Encoding.Convert(testEncoderUtf32, testEncoder, inputUtf8Bytes); ReadOnlySpan <uint> input = inputUtf8Bytes.AsSpan().NonPortableCast <byte, uint>(); expectedBytesWritten = TextEncoderTestHelper.GetUtf8ByteCount(input); encodedBytes = new Span <byte>(new byte[expectedBytesWritten]); Assert.False(utf8.TryEncode(input, encodedBytes, out charactersConsumed, out bytesWritten)); Assert.True(charactersConsumed < inputUtf8Bytes.Length); break; } Assert.Equal(expectedBytesWritten, bytesWritten); Assert.True(expectedBytes.AsSpan().Slice(0, expectedBytesWritten).SequenceEqual(encodedBytes)); }