@@ -13,6 +13,8 @@ public class Utf8ValidationTests
1313 [ InlineData ( new byte [ ] { } ) ]
1414 [ InlineData ( new byte [ ] { 0x48 , 0x65 , 0x6C , 0x6C , 0x6F , 0x20 , 0x57 , 0x6F , 0x72 , 0x6C , 0x64 } ) ] // Hello World
1515 [ InlineData ( new byte [ ] { 0x48 , 0x65 , 0x6C , 0x6C , 0x6F , 0x2D , 0xC2 , 0xB5 , 0x40 , 0xC3 , 0x9F , 0xC3 , 0xB6 , 0xC3 , 0xA4 , 0xC3 , 0xBC , 0xC3 , 0xA0 , 0xC3 , 0xA1 } ) ] // "Hello-µ@ßöäüàá";
16+ // [InlineData(new byte[] { 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0xf0, 0xa4, 0xad, 0xa2, 0x77, 0x6f, 0x72, 0x6c, 0x64 })] // "hello\U00024b62world"
17+ [ InlineData ( new byte [ ] { 0xf0 , 0xa4 , 0xad , 0xa2 } ) ] // "\U00024b62"
1618 public void ValidateSingleValidSegments_Valid ( byte [ ] data )
1719 {
1820 var state = new Utilities . Utf8MessageState ( ) ;
@@ -35,28 +37,39 @@ public void ValidateMultipleValidSegments_Valid(byte[] data1, byte[] data2, byte
3537 [ InlineData ( new byte [ ] { 0xfe } ) ]
3638 [ InlineData ( new byte [ ] { 0xff } ) ]
3739 [ InlineData ( new byte [ ] { 0xfe , 0xfe , 0xff , 0xff } ) ]
38- // [InlineData(new byte[] { 0xc0, 0xaf })]
39- // [InlineData(new byte[] { 0xe0, 0x80, 0xaf })]
40- // [InlineData(new byte[] { 0xf4, 0x90, 0x80, 0x80 })]
41- // [InlineData(new byte[] { 0xf0, 0x80, 0x80, 0xaf })]
42- // [InlineData(new byte[] { 0xf8, 0x80, 0x80, 0x80, 0xaf })]
43- // [InlineData(new byte[] { 0xfc, 0x80, 0x80, 0x80, 0x80, 0xaf })]
44- // [InlineData(new byte[] { 0xc1, 0xbf })]
45- // [InlineData(new byte[] { 0xed, 0xa0, 0x80, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64 })] // 0xEDA080 decodes to 0xD800, which is a reserved high surrogate character.
40+ [ InlineData ( new byte [ ] { 0xc0 , 0xb1 } ) ] // Overlong Ascii
41+ [ InlineData ( new byte [ ] { 0xc1 , 0xb1 } ) ] // Overlong Ascii
42+ [ InlineData ( new byte [ ] { 0xe0 , 0x80 , 0xaf } ) ] // Overlong
43+ [ InlineData ( new byte [ ] { 0xf0 , 0x80 , 0x80 , 0xaf } ) ] // Overlong
44+ [ InlineData ( new byte [ ] { 0xf8 , 0x80 , 0x80 , 0x80 , 0xaf } ) ] // Overlong
45+ [ InlineData ( new byte [ ] { 0xfc , 0x80 , 0x80 , 0x80 , 0x80 , 0xaf } ) ] // Overlong
46+ [ InlineData ( new byte [ ] { 0xed , 0xa0 , 0x80 , 0x65 , 0x64 , 0x69 , 0x74 , 0x65 , 0x64 } ) ] // 0xEDA080 decodes to 0xD800, which is a reserved high surrogate character.
4647 public void ValidateSingleInvalidSegment_Invalid ( byte [ ] data )
4748 {
4849 var state = new Utilities . Utf8MessageState ( ) ;
4950 Assert . False ( Utilities . TryValidateUtf8 ( new ArraySegment < byte > ( data ) , endOfMessage : true , state : state ) ) ;
5051 }
51- /*
52- [Theory]
53- // [InlineData(true, new byte[] { 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0xf4 }, false, new byte[] { 0x90 }, true, new byte[] { })]
54- public void ValidateMultipleInvalidSegments_Invalid(bool valid1, byte[] data1, bool valid2, byte[] data2, bool valid3, byte[] data3)
52+
53+ [ Fact ]
54+ public void ValidateIndividualInvalidSegments_Invalid ( )
5555 {
56+ var data = new byte [ ] { 0xce , 0xba , 0xe1 , 0xbd , 0xb9 , 0xcf , 0x83 , 0xce , 0xbc , 0xce , 0xb5 , 0xed , 0xa0 , 0x80 , 0x65 , 0x64 , 0x69 , 0x74 , 0x65 , 0x64 } ;
5657 var state = new Utilities . Utf8MessageState ( ) ;
57- Assert.True(valid1 == Utilities.TryValidateUtf8(new ArraySegment<byte>(data1), endOfMessage: false, state: state), "1st");
58- Assert.True(valid2 == Utilities.TryValidateUtf8(new ArraySegment<byte>(data2), endOfMessage: false, state: state), "2nd");
59- Assert.True(valid3 == Utilities.TryValidateUtf8(new ArraySegment<byte>(data3), endOfMessage: true, state: state), "3rd");
60- }*/
58+ for ( int i = 0 ; i < 12 ; i ++ )
59+ {
60+ Assert . True ( Utilities . TryValidateUtf8 ( new ArraySegment < byte > ( data , i , 1 ) , endOfMessage : false , state : state ) , i . ToString ( ) ) ;
61+ }
62+ Assert . False ( Utilities . TryValidateUtf8 ( new ArraySegment < byte > ( data , 12 , 1 ) , endOfMessage : false , state : state ) , 12 . ToString ( ) ) ;
63+ }
64+
65+ [ Fact ]
66+ public void ValidateMultipleInvalidSegments_Invalid ( )
67+ {
68+ var data0 = new byte [ ] { 0xce , 0xba , 0xe1 , 0xbd , 0xb9 , 0xcf , 0x83 , 0xce , 0xbc , 0xce , 0xb5 , 0xf4 } ;
69+ var data1 = new byte [ ] { 0x90 } ;
70+ var state = new Utilities . Utf8MessageState ( ) ;
71+ Assert . True ( Utilities . TryValidateUtf8 ( new ArraySegment < byte > ( data0 ) , endOfMessage : false , state : state ) ) ;
72+ Assert . False ( Utilities . TryValidateUtf8 ( new ArraySegment < byte > ( data1 ) , endOfMessage : false , state : state ) ) ;
73+ }
6174 }
6275}
0 commit comments