Ejemplo n.º 1
0
        public void InvalidMultiFramePayloads(byte[] payload1, byte[] payload2)
        {
            var validator = new Utf8Validator();

            Assert.True(validator.ValidateUtf8Frame(ReadableBuffer.Create(payload1), fin: false));
            Assert.False(validator.ValidateUtf8Frame(ReadableBuffer.Create(payload2), fin: true));
        }
Ejemplo n.º 2
0
        public void ValidSingleFramePayloads(byte[] payload, string decoded)
        {
            var validator = new Utf8Validator();

            Assert.True(validator.ValidateUtf8Frame(ReadableBuffer.Create(payload), fin: true));

            // Not really part of the test, but it ensures that the "decoded" string matches the "payload",
            // so that the "decoded" string can be used as a human-readable explanation of the string in question
            Assert.Equal(decoded, Encoding.UTF8.GetString(payload));
        }
Ejemplo n.º 3
0
        public void ValidMultiFramePayloads(byte[] payload1, byte[] payload2, string decoded)
        {
            var validator = new Utf8Validator();

            Assert.True(validator.ValidateUtf8Frame(ReadableBuffer.Create(payload1), fin: false));
            Assert.True(validator.ValidateUtf8Frame(ReadableBuffer.Create(payload2), fin: true));

            // Not really part of the test, but it ensures that the "decoded" string matches the "payload",
            // so that the "decoded" string can be used as a human-readable explanation of the string in question
            Assert.Equal(decoded, Encoding.UTF8.GetString(Enumerable.Concat(payload1, payload2).ToArray()));
        }
Ejemplo n.º 4
0
        public void TryConsume_WithNoExistingPartialSequence_AndValidCompleteInputs_ReturnsSuccess()
        {
            // Arrange

            Utf8Validator validator = new Utf8Validator();

            // Act & assert

            Assert.True(validator.TryConsume(new byte[] { 0x10, 0x11, 0x12, 0x13 }, isFinalChunk: true));
            Assert.True(validator.TryConsume(new byte[] { 0x20, 0x21, 0x22, 0x23 }, isFinalChunk: true));
        }
Ejemplo n.º 5
0
        public void TryConsume_EmptySequence_ReturnsSuccess()
        {
            // Arrange

            Utf8Validator validator = new Utf8Validator();

            // Act & assert

            Assert.True(validator.TryConsume(ReadOnlySpan <byte> .Empty, isFinalChunk: false));
            Assert.True(validator.TryConsume(ReadOnlySpan <byte> .Empty, isFinalChunk: true));
        }
Ejemplo n.º 6
0
        public void TryConsume_OnceInvalid_AlwaysInvalid()
        {
            // Arrange

            Utf8Validator validator = new Utf8Validator();

            // Act & assert

            Assert.False(validator.TryConsume(new byte[] { 0xFF }, isFinalChunk: true)); // [ FF ] is always an invalid byte
            Assert.False(validator.TryConsume(new byte[] { 0x20 }, isFinalChunk: false));
            Assert.False(validator.TryConsume(new byte[] { 0x20 }, isFinalChunk: true));
        }
Ejemplo n.º 7
0
        public void TryConsume_WithPartialSequence_FollowedByEmptySequence_AsFinalChunk_ReturnsFailure()
        {
            // Arrange

            Utf8Validator validator = new Utf8Validator();

            // Act & assert

            Assert.True(validator.TryConsume(new byte[] { 0xC2 }, isFinalChunk: false)); // [ C2 ] is valid start of incomplete multi-byte sequence
            Assert.True(validator.TryConsume(ReadOnlySpan <byte> .Empty, isFinalChunk: false));
            Assert.False(validator.TryConsume(ReadOnlySpan <byte> .Empty, isFinalChunk: true));
        }
Ejemplo n.º 8
0
        [InlineData(new object[] { new[] { "F0", "908080F0", "80" } })]             // overlong sequence
        public void TryConsume_FailureCases(string[] chunks)
        {
            // Arrange

            Utf8Validator validator = new Utf8Validator();

            // Act & assert - all but last chunk

            for (int i = 0; i < chunks.Length - 1; i++)
            {
                Assert.True(validator.TryConsume(TestHelper.DecodeHex(chunks[i]), isFinalChunk: false));
            }

            // Act & assert - final chunk (which should be bad)

            Assert.False(validator.TryConsume(TestHelper.DecodeHex(chunks.Last()), isFinalChunk: false));
        }
Ejemplo n.º 9
0
        public void TryConsume_SuccessCases(string[] chunks)
        {
            // Arrange

            Utf8Validator validator = new Utf8Validator();

            // Act & assert - loop

            foreach (var chunk in chunks)
            {
                Assert.True(validator.TryConsume(TestHelper.DecodeHex(chunk), isFinalChunk: false));
            }

            // Act & assert - final

            Assert.True(validator.TryConsume(ReadOnlySpan <byte> .Empty, isFinalChunk: true));
        }
Ejemplo n.º 10
0
        public void InvalidSingleFramePayloads(byte[] payload)
        {
            var validator = new Utf8Validator();

            Assert.False(validator.ValidateUtf8Frame(ReadableBuffer.Create(payload), fin: true));
        }