#include "jwt-cpp/base.h" #include TEST(BaseTest, Base64Index) { ASSERT_EQ(0, jwt::alphabet::index(jwt::alphabet::base64::data(), 'A')); ASSERT_EQ(32, jwt::alphabet::index(jwt::alphabet::base64::data(), 'g')); ASSERT_EQ(62, jwt::alphabet::index(jwt::alphabet::base64::data(), '+')); } TEST(BaseTest, Base64URLIndex) { ASSERT_EQ(0, jwt::alphabet::index(jwt::alphabet::base64url::data(), 'A')); ASSERT_EQ(32, jwt::alphabet::index(jwt::alphabet::base64url::data(), 'g')); ASSERT_EQ(62, jwt::alphabet::index(jwt::alphabet::base64url::data(), '-')); } TEST(BaseTest, BaseDetailsCountPadding) { using jwt::base::details::padding; ASSERT_EQ(padding{}, jwt::base::details::count_padding("ABC", {"~"})); ASSERT_EQ((padding{3, 3}), jwt::base::details::count_padding("ABC~~~", {"~"})); ASSERT_EQ((padding{5, 5}), jwt::base::details::count_padding("ABC~~~~~", {"~"})); ASSERT_EQ(padding{}, jwt::base::details::count_padding("ABC", {"~", "!"})); ASSERT_EQ((padding{1, 1}), jwt::base::details::count_padding("ABC!", {"~", "!"})); ASSERT_EQ((padding{1, 1}), jwt::base::details::count_padding("ABC~", {"~", "!"})); ASSERT_EQ((padding{3, 3}), jwt::base::details::count_padding("ABC~~!", {"~", "!"})); ASSERT_EQ((padding{3, 3}), jwt::base::details::count_padding("ABC!~~", {"~", "!"})); ASSERT_EQ((padding{5, 5}), jwt::base::details::count_padding("ABC~~!~~", {"~", "!"})); ASSERT_EQ((padding{2, 6}), jwt::base::details::count_padding("MTIzNA%3d%3d", {"%3d", "%3D"})); ASSERT_EQ((padding{2, 6}), jwt::base::details::count_padding("MTIzNA%3d%3D", {"%3d", "%3D"})); ASSERT_EQ((padding{2, 6}), jwt::base::details::count_padding("MTIzNA%3D%3d", {"%3d", "%3D"})); ASSERT_EQ((padding{2, 6}), jwt::base::details::count_padding("MTIzNA%3D%3D", {"%3d", "%3D"})); // Some fake scenarios ASSERT_EQ(padding{}, jwt::base::details::count_padding("", {"~"})); ASSERT_EQ(padding{}, jwt::base::details::count_padding("ABC", {"~", "~~!"})); ASSERT_EQ(padding{}, jwt::base::details::count_padding("ABC!", {"~", "~~!"})); ASSERT_EQ((padding{1, 1}), jwt::base::details::count_padding("ABC~", {"~", "~~!"})); ASSERT_EQ((padding{1, 3}), jwt::base::details::count_padding("ABC~~!", {"~", "~~!"})); ASSERT_EQ((padding{2, 2}), jwt::base::details::count_padding("ABC!~~", {"~", "~~!"})); ASSERT_EQ((padding{3, 5}), jwt::base::details::count_padding("ABC~~!~~", {"~", "~~!"})); ASSERT_EQ(padding{}, jwt::base::details::count_padding("ABC~~!~~", {})); } TEST(BaseTest, Base64Decode) { ASSERT_EQ("1", jwt::base::decode("MQ==")); ASSERT_EQ("12", jwt::base::decode("MTI=")); ASSERT_EQ("123", jwt::base::decode("MTIz")); ASSERT_EQ("1234", jwt::base::decode("MTIzNA==")); } TEST(BaseTest, Base64DecodeURL) { ASSERT_EQ("1", jwt::base::decode("MQ%3d%3d")); ASSERT_EQ("12", jwt::base::decode("MTI%3d")); ASSERT_EQ("123", jwt::base::decode("MTIz")); ASSERT_EQ("1234", jwt::base::decode("MTIzNA%3d%3d")); } TEST(BaseTest, Base64DecodeURLCaseInsensitive) { ASSERT_EQ("1", jwt::base::decode("MQ%3d%3d")); ASSERT_EQ("1", jwt::base::decode("MQ%3D%3d")); ASSERT_EQ("1", jwt::base::decode("MQ%3d%3D")); ASSERT_EQ("12", jwt::base::decode("MTI%3d")); ASSERT_EQ("123", jwt::base::decode("MTIz")); ASSERT_EQ("1234", jwt::base::decode("MTIzNA%3d%3d")); ASSERT_EQ("1234", jwt::base::decode("MTIzNA%3D%3D")); } TEST(BaseTest, Base64Encode) { ASSERT_EQ("MQ==", jwt::base::encode("1")); ASSERT_EQ("MTI=", jwt::base::encode("12")); ASSERT_EQ("MTIz", jwt::base::encode("123")); ASSERT_EQ("MTIzNA==", jwt::base::encode("1234")); } TEST(BaseTest, Base64EncodeURL) { ASSERT_EQ("MQ%3d%3d", jwt::base::encode("1")); ASSERT_EQ("MTI%3d", jwt::base::encode("12")); ASSERT_EQ("MTIz", jwt::base::encode("123")); ASSERT_EQ("MTIzNA%3d%3d", jwt::base::encode("1234")); } TEST(BaseTest, Base64Pad) { ASSERT_EQ("MQ==", jwt::base::pad("MQ")); ASSERT_EQ("MTI=", jwt::base::pad("MTI")); ASSERT_EQ("MTIz", jwt::base::pad("MTIz")); ASSERT_EQ("MTIzNA==", jwt::base::pad("MTIzNA")); } TEST(BaseTest, Base64PadURL) { ASSERT_EQ("MQ%3d%3d", jwt::base::pad("MQ")); ASSERT_EQ("MTI%3d", jwt::base::pad("MTI")); ASSERT_EQ("MTIz", jwt::base::pad("MTIz")); ASSERT_EQ("MTIzNA%3d%3d", jwt::base::pad("MTIzNA")); } TEST(BaseTest, Base64Trim) { ASSERT_EQ("MQ", jwt::base::trim("MQ==")); ASSERT_EQ("MTI", jwt::base::trim("MTI=")); ASSERT_EQ("MTIz", jwt::base::trim("MTIz")); ASSERT_EQ("MTIzNA", jwt::base::trim("MTIzNA==")); } TEST(BaseTest, Base64TrimURL) { ASSERT_EQ("MQ", jwt::base::trim("MQ%3d%3d")); ASSERT_EQ("MTI", jwt::base::trim("MTI%3d")); ASSERT_EQ("MTIz", jwt::base::trim("MTIz")); ASSERT_EQ("MTIzNA", jwt::base::trim("MTIzNA%3d%3d")); }