public void BufferToBase64ConvertTest(int count)
        {
            var expectedBuffer = new byte[count];
            var r = new Random(count);

            r.NextBytes(expectedBuffer);
            var expectedBase64String = Convert.ToBase64String(expectedBuffer);
            var expectedBase64Chars  = expectedBase64String.ToCharArray();

            var inputOffset = r.Next(0, 100);
            var inputBuffer = new byte[inputOffset + expectedBuffer.Length + inputOffset];

            Buffer.BlockCopy(expectedBuffer, 0, inputBuffer, inputOffset, expectedBuffer.Length);

            // buffer -> base64 string
            var base64String = Base64Convert.ToString(inputBuffer, inputOffset, expectedBuffer.Length);

            Assert.Equal(expectedBase64String, base64String);
            // buffer -> base64 buffer
            var base64Chars = Base64Convert.ToCharArray(inputBuffer, inputOffset, expectedBuffer.Length);

            Assert.Equal(expectedBase64Chars, base64Chars);

            // buffer -> base64 buffer (copy)
            base64Chars = new char[expectedBase64Chars.Length];
            Base64Convert.Encode(new ArraySegment <byte>(inputBuffer, inputOffset, expectedBuffer.Length), new ArraySegment <char>(base64Chars));
            Assert.Equal(expectedBase64Chars, base64Chars);
        }
        public void Base64BytesEncodeTest(int count)
        {
            var inputBytes = new byte[count];
            var r          = new Random(count);

            r.NextBytes(inputBytes);
            var expectedBase64String = Convert.ToBase64String(inputBytes);
            var expectedBase64Buffer = expectedBase64String.ToCharArray().Select(v => (byte)v).ToArray();

            // transform block
            var inputOffset = r.Next(0, 100);
            var inputBuffer = new byte[inputOffset + inputBytes.Length + inputOffset];

            Buffer.BlockCopy(inputBytes, 0, inputBuffer, inputOffset, inputBytes.Length);
            var outputOffset = r.Next(0, 100);
            var outputBuffer = new byte[outputOffset + expectedBase64Buffer.Length];
            var written      = Base64Convert.Encode(new ArraySegment <byte>(inputBuffer, inputOffset, inputBytes.Length), new ArraySegment <byte>(outputBuffer, outputOffset, outputBuffer.Length - outputOffset), out var inputUsed, out var outputUsed);
            var actualOutput = outputBuffer.Skip(outputOffset).ToArray();

            Assert.Equal(expectedBase64Buffer.Length, Base64Convert.GetBase64OutputLength(inputBytes.Length, true));
            Assert.Equal(expectedBase64Buffer.Length, written);
            Assert.Equal(expectedBase64Buffer.Length, outputUsed);
            Assert.Equal(inputBytes.Length, inputUsed);
            Assert.Equal(expectedBase64Buffer, actualOutput);
        }
        public void Encode_GivenUrlSafeFlag_ReturnsUrlSafeBase64()
        {
            var bytes = new byte[]
            {
                161, 203, 187, 6,
                69, 54, 110, 237,
                102, 171, 236, 129,
                217, 210, 255, 224
            };

            var encoded   = Base64Convert.Encode(bytes, true);
            var encString = Encoding.UTF8.GetString(encoded);

            encString.Should().Be("ocu7BkU2bu1mq-yB2dL_4A");
        }
 public void Encode_GivenPlainTextAndUrlSafeFlag_ReturnsUrlSafeBase64String(string value, string expected)
 {
     Base64Convert.Encode(value, true).Should().Be(expected);
 }
 public void Encode_GivenPlainTextValue_ReturnsEncodedBase64String(string value, string expected)
 {
     Base64Convert.Encode(value).Should().Be(expected);
 }