// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/proximity_auth/base64url.h" #include "base/base64.h" #include "testing/gtest/include/gtest/gtest.h" namespace proximity_auth { TEST(ProximityAuthBase64UrlTest, EncodeRegularString) { const std::string input = "Hello world!"; const std::string expected_output = "SGVsbG8gd29ybGQh"; std::string web_safe_output; Base64UrlEncode(input, &web_safe_output); EXPECT_EQ(expected_output, web_safe_output); // For good measure, make sure that the encoding matches the //base // implemenation as well. std::string non_web_safe_output; base::Base64Encode(input, &non_web_safe_output); EXPECT_EQ(web_safe_output, non_web_safe_output); } TEST(ProximityAuthBase64UrlTest, DecodeRegularString) { const std::string input = "SGVsbG8gd29ybGQh"; const std::string expected_output = "Hello world!"; std::string web_safe_output; EXPECT_TRUE(Base64UrlDecode(input, &web_safe_output)); EXPECT_EQ(expected_output, web_safe_output); // For good measure, make sure that the encoding matches the //base // implemenation as well. std::string non_web_safe_output; EXPECT_TRUE(base::Base64Decode(input, &non_web_safe_output)); EXPECT_EQ(web_safe_output, non_web_safe_output); } TEST(ProximityAuthBase64UrlTest, EncodeSpecialCharacters) { // This happens to be a stable encoding, i.e. encode(decode(s)) gives back s. const std::string encoded = "/+Y="; std::string decoded; ASSERT_TRUE(base::Base64Decode(encoded, &decoded)); // Decoded strings that encode to special characters are non-printable, so, // for ease of testing, just compare the web-safe and non-web-safe encodings. std::string web_safe_encoded; Base64UrlEncode(decoded, &web_safe_encoded); EXPECT_EQ("_-Y=", web_safe_encoded); } TEST(ProximityAuthBase64UrlTest, DecodeSpecialCharacters) { const std::string encoded = "_-Y="; std::string decoded; ASSERT_TRUE(Base64UrlDecode(encoded, &decoded)); // Decoded strings that encode to special characters are non-printable, so, // for ease of testing, just compare the web-safe and non-web-safe encodings. std::string non_web_safe_encoded; base::Base64Encode(decoded, &non_web_safe_encoded); EXPECT_EQ("/+Y=", non_web_safe_encoded); } } // namespace proximity_auth