mirror of
https://github.com/google/googletest.git
synced 2025-01-14 00:20:57 +08:00
Add support for the alternative base64 encoding in RFC 4648 section 5 to WhenBase64Unescaped
.
PiperOrigin-RevId: 507527786 Change-Id: Ie5e088b1814981f6c760d7e25418a430172705ec
This commit is contained in:
parent
2f2e72bae9
commit
3d568bdda5
@ -102,7 +102,7 @@ The `argument` can be either a C string or a C++ string object:
|
|||||||
| `StrCaseNe(string)` | `argument` is not equal to `string`, ignoring case. |
|
| `StrCaseNe(string)` | `argument` is not equal to `string`, ignoring case. |
|
||||||
| `StrEq(string)` | `argument` is equal to `string`. |
|
| `StrEq(string)` | `argument` is equal to `string`. |
|
||||||
| `StrNe(string)` | `argument` is not equal to `string`. |
|
| `StrNe(string)` | `argument` is not equal to `string`. |
|
||||||
| `WhenBase64Unescaped(m)` | `argument` is a base-64 escaped string whose unescaped string matches `m`. |
|
| `WhenBase64Unescaped(m)` | `argument` is a base-64 escaped string whose unescaped string matches `m`. The web-safe format from [RFC 4648](https://www.rfc-editor.org/rfc/rfc4648#section-5) is supported. |
|
||||||
|
|
||||||
`ContainsRegex()` and `MatchesRegex()` take ownership of the `RE` object. They
|
`ContainsRegex()` and `MatchesRegex()` take ownership of the `RE` object. They
|
||||||
use the regular expression syntax defined
|
use the regular expression syntax defined
|
||||||
|
@ -198,6 +198,10 @@ GTEST_API_ void IllegalDoDefault(const char* file, int line) {
|
|||||||
"the variable in various places.");
|
"the variable in various places.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr char UndoWebSafeEncoding(char c) {
|
||||||
|
return c == '-' ? '+' : c == '_' ? '/' : c;
|
||||||
|
}
|
||||||
|
|
||||||
constexpr char UnBase64Impl(char c, const char* const base64, char carry) {
|
constexpr char UnBase64Impl(char c, const char* const base64, char carry) {
|
||||||
return *base64 == 0 ? static_cast<char>(65)
|
return *base64 == 0 ? static_cast<char>(65)
|
||||||
: *base64 == c
|
: *base64 == c
|
||||||
@ -208,7 +212,8 @@ constexpr char UnBase64Impl(char c, const char* const base64, char carry) {
|
|||||||
template <size_t... I>
|
template <size_t... I>
|
||||||
constexpr std::array<char, 256> UnBase64Impl(IndexSequence<I...>,
|
constexpr std::array<char, 256> UnBase64Impl(IndexSequence<I...>,
|
||||||
const char* const base64) {
|
const char* const base64) {
|
||||||
return {{UnBase64Impl(static_cast<char>(I), base64, 0)...}};
|
return {
|
||||||
|
{UnBase64Impl(UndoWebSafeEncoding(static_cast<char>(I)), base64, 0)...}};
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr std::array<char, 256> UnBase64(const char* const base64) {
|
constexpr std::array<char, 256> UnBase64(const char* const base64) {
|
||||||
|
@ -1802,11 +1802,13 @@ TEST(WhenBase64UnescapedTest, MatchesUnescapedBase64Strings) {
|
|||||||
EXPECT_FALSE(m1.Matches("invalid base64"));
|
EXPECT_FALSE(m1.Matches("invalid base64"));
|
||||||
EXPECT_FALSE(m1.Matches("aGVsbG8gd29ybGQ=")); // hello world
|
EXPECT_FALSE(m1.Matches("aGVsbG8gd29ybGQ=")); // hello world
|
||||||
EXPECT_TRUE(m1.Matches("aGVsbG8gd29ybGQh")); // hello world!
|
EXPECT_TRUE(m1.Matches("aGVsbG8gd29ybGQh")); // hello world!
|
||||||
|
EXPECT_TRUE(m1.Matches("+/-_IQ")); // \xfb\xff\xbf!
|
||||||
|
|
||||||
const Matcher<const std::string&> m2 = WhenBase64Unescaped(EndsWith("!"));
|
const Matcher<const std::string&> m2 = WhenBase64Unescaped(EndsWith("!"));
|
||||||
EXPECT_FALSE(m2.Matches("invalid base64"));
|
EXPECT_FALSE(m2.Matches("invalid base64"));
|
||||||
EXPECT_FALSE(m2.Matches("aGVsbG8gd29ybGQ=")); // hello world
|
EXPECT_FALSE(m2.Matches("aGVsbG8gd29ybGQ=")); // hello world
|
||||||
EXPECT_TRUE(m2.Matches("aGVsbG8gd29ybGQh")); // hello world!
|
EXPECT_TRUE(m2.Matches("aGVsbG8gd29ybGQh")); // hello world!
|
||||||
|
EXPECT_TRUE(m2.Matches("+/-_IQ")); // \xfb\xff\xbf!
|
||||||
|
|
||||||
#if GTEST_INTERNAL_HAS_STRING_VIEW
|
#if GTEST_INTERNAL_HAS_STRING_VIEW
|
||||||
const Matcher<const internal::StringView&> m3 =
|
const Matcher<const internal::StringView&> m3 =
|
||||||
@ -1814,6 +1816,7 @@ TEST(WhenBase64UnescapedTest, MatchesUnescapedBase64Strings) {
|
|||||||
EXPECT_FALSE(m3.Matches("invalid base64"));
|
EXPECT_FALSE(m3.Matches("invalid base64"));
|
||||||
EXPECT_FALSE(m3.Matches("aGVsbG8gd29ybGQ=")); // hello world
|
EXPECT_FALSE(m3.Matches("aGVsbG8gd29ybGQ=")); // hello world
|
||||||
EXPECT_TRUE(m3.Matches("aGVsbG8gd29ybGQh")); // hello world!
|
EXPECT_TRUE(m3.Matches("aGVsbG8gd29ybGQh")); // hello world!
|
||||||
|
EXPECT_TRUE(m3.Matches("+/-_IQ")); // \xfb\xff\xbf!
|
||||||
#endif // GTEST_INTERNAL_HAS_STRING_VIEW
|
#endif // GTEST_INTERNAL_HAS_STRING_VIEW
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user