13 #include <boost/algorithm/string/trim.hpp> 25 static const std::vector<std::pair<std::string, std::string>>
29 {
"\"foo \\\"bar\\\"\"",
"foo \"bar\""}
32 static const std::vector<std::pair<std::string, std::string>>
35 {
"*aGVsbG8=*",
"NBSWY3DP"},
74 "9223372036854775808",
75 "-9223372036854775809",
91 uint32_t numBlocks = input.length() / 8;
92 uint32_t blockRemainder = input.length() % 8;
97 for (
uint32_t j = 0; j < numBlocks; j++) {
101 output += outputBuffer;
108 padding[
i] = input[input.size() - blockRemainder +
i];
117 outputBuffer = outputBuffer.substr(0, (blockRemainder * 5) / 8);
118 output += outputBuffer;
131 std::string base32CharSet(
"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567");
134 for (
char c : input) {
135 auto it = base32CharSet.find(
c);
136 if (it == std::string::npos) {
141 char foundCharacter = char(it);
142 output.push_back(foundCharacter);
162 boost::trim_right_if(input, [](
char c){
return c ==
'=';});
168 for(
int i = 0;
i < 8;
i++) {
170 if(input[
i + blockNum * 8] >= 32) {
175 buffer = (buffer << 5);
176 buffer = buffer | input[
i + blockNum * 8];
180 for (
int i = 0;
i < 5;
i++) {
181 outputBuffer[
i] = char(buffer & 0xFF);
182 buffer = buffer >> 8;
186 std::reverse(outputBuffer.begin(), outputBuffer.end());
193 public ::testing::WithParamInterface<
194 std::pair<std::string, std::string>> {
198 public ::testing::WithParamInterface<
199 std::pair<std::string, std::string>> {
203 public ::testing::WithParamInterface<
204 std::pair<std::string, int64_t>> {
208 public ::testing::WithParamInterface<
209 std::pair<std::string, double>> {
213 public ::testing::WithParamInterface<std::string> {
217 public ::testing::WithParamInterface<std::string> {
232 std::string expectedOutputInBase32(GetParam().second);
234 decode32(expectedOutputInBase32, expectedOutput);
240 EXPECT_EQ(output.
tag, StructuredHeaderItem::Type::BINARYCONTENT);
250 EXPECT_EQ(output.
tag, StructuredHeaderItem::Type::INT64);
260 EXPECT_EQ(output.
tag, StructuredHeaderItem::Type::DOUBLE);
273 std::vector<StructuredHeaderItem>
output;
285 ::testing::ValuesIn(kLegalIntTests));
288 ::testing::ValuesIn(kLegalFloatTests));
291 ::testing::ValuesIn(kIllegalItemTests));
294 ::testing::ValuesIn(kIllegalListTests));
300 std::vector<StructuredHeaderItem>
v;
307 EXPECT_EQ(v[1].tag, StructuredHeaderItem::Type::INT64);
317 std::vector<StructuredHeaderItem>
v;
332 std::vector<StructuredHeaderItem>
v;
339 EXPECT_EQ(v[1].tag, StructuredHeaderItem::Type::INT64);
349 std::vector<StructuredHeaderItem>
v;
356 EXPECT_EQ(v[1].tag, StructuredHeaderItem::Type::INT64);
std::vector< uint8_t > buffer(kBufferSize+16)
static const std::vector< std::string > kIllegalItemTests
bool decode32Block(std::string input, uint32_t blockNum, std::string &outputBuffer)
static const std::vector< std::pair< std::string, std::string > > kLegalStringTests
#define EXPECT_EQ(val1, val2)
static const std::vector< std::pair< std::string, std::string > > kLegalBinContentTests
static const std::vector< std::pair< std::string, int64_t > > kLegalIntTests
std::string convertBase32ToBinary(const std::string &input)
static const std::vector< std::string > kIllegalListTests
bool decode32(std::string input, std::string &output)
#define EXPECT_NE(val1, val2)
TEST_F(HeaderTableTests, IndexTranslation)
INSTANTIATE_TEST_CASE_P(ValueTest, RFC1867CR,::testing::Values(string("zyx\r\nwvu", 8), string("\rzyxwvut", 8), string("zyxwvut\r", 8), string("\nzyxwvut", 8), string("zyxwvut\n", 8), string("\r\n\r\n\r\n\r\n", 8), string("\r\r\r\r\r\r\r\r", 8)))
constexpr detail::First first
static const std::vector< std::pair< std::string, double > > kLegalFloatTests