69 lines
2.3 KiB
C#
69 lines
2.3 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.AspNetCore.WebUtilities
|
|
{
|
|
public class Base64UrlTextEncoderTests
|
|
{
|
|
[Fact]
|
|
public void DataOfVariousLengthRoundTripCorrectly()
|
|
{
|
|
for (int length = 0; length != 256; ++length)
|
|
{
|
|
var data = new byte[length];
|
|
for (int index = 0; index != length; ++index)
|
|
{
|
|
data[index] = (byte)(5 + length + (index * 23));
|
|
}
|
|
string text = Base64UrlTextEncoder.Encode(data);
|
|
byte[] result = Base64UrlTextEncoder.Decode(text);
|
|
|
|
for (int index = 0; index != length; ++index)
|
|
{
|
|
Assert.Equal(data[index], result[index]);
|
|
}
|
|
}
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("", "")]
|
|
[InlineData("+", "-")]
|
|
[InlineData("/", "_")]
|
|
[InlineData("=", "")]
|
|
[InlineData("==", "")]
|
|
[InlineData("a+b+c+==", "a-b-c-")]
|
|
[InlineData("a/b/c==", "a_b_c")]
|
|
[InlineData("a+b/c==", "a-b_c")]
|
|
[InlineData("a+b/c", "a-b_c")]
|
|
[InlineData("abcd", "abcd")]
|
|
public void EncodeInternal_Replaces_UrlEncodableCharacters(string base64EncodedValue, string expectedValue)
|
|
{
|
|
// Arrange & Act
|
|
var result = Base64UrlTextEncoder.EncodeInternal(base64EncodedValue);
|
|
|
|
// Assert
|
|
Assert.Equal(expectedValue, result);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("_", "/===")]
|
|
[InlineData("-", "+===")]
|
|
[InlineData("a-b-c", "a+b+c===")]
|
|
[InlineData("a_b_c_d", "a/b/c/d=")]
|
|
[InlineData("a-b_c", "a+b/c===")]
|
|
[InlineData("a-b_c-d", "a+b/c+d=")]
|
|
[InlineData("a-b_c", "a+b/c===")]
|
|
[InlineData("abcd", "abcd")]
|
|
public void DecodeToBase64String_ReturnsValid_Base64String(string text, string expectedValue)
|
|
{
|
|
// Arrange & Act
|
|
var actual = Base64UrlTextEncoder.DecodeToBase64String(text);
|
|
|
|
// Assert
|
|
Assert.Equal(expectedValue, actual);
|
|
}
|
|
}
|
|
} |