blob: c8462e82d0367f032cc419df6e57dd4ba6c9bd95 [file] [log] [blame]
// Copyright 2016 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 "http2/hpack/hpack_string.h"
// Tests of HpackString.
#include <utility>
#include "http2/platform/api/http2_logging.h"
#include "http2/platform/api/http2_test_helpers.h"
#include "common/platform/api/quiche_test.h"
using ::testing::AssertionFailure;
using ::testing::AssertionResult;
using ::testing::AssertionSuccess;
namespace http2 {
namespace test {
namespace {
const char kStr0[] = "s0: Some string to be copied into another string.";
const char kStr1[] = "S1 - some string to be copied into yet another string.";
class HpackStringTest : public QuicheTest {
protected:
AssertionResult VerifyNotEqual(HpackString* actual,
const std::string& not_expected_str) {
const char* not_expected_ptr = not_expected_str.c_str();
absl::string_view not_expected_sp(not_expected_str);
VERIFY_NE(*actual, not_expected_ptr);
VERIFY_NE(*actual, not_expected_sp);
VERIFY_NE(*actual, not_expected_str);
VERIFY_NE(actual->ToStringPiece(), not_expected_sp);
if (!(not_expected_ptr != *actual)) {
return AssertionFailure();
}
if (!(not_expected_sp != *actual)) {
return AssertionFailure();
}
if (!(not_expected_str != *actual)) {
return AssertionFailure();
}
if (!(not_expected_sp != actual->ToStringPiece())) {
return AssertionFailure();
}
return AssertionSuccess();
}
AssertionResult VerifyEqual(HpackString* actual,
const std::string& expected_str) {
VERIFY_EQ(actual->size(), expected_str.size());
const char* expected_ptr = expected_str.c_str();
const absl::string_view expected_sp(expected_str);
VERIFY_EQ(*actual, expected_ptr);
VERIFY_EQ(*actual, expected_sp);
VERIFY_EQ(*actual, expected_str);
VERIFY_EQ(actual->ToStringPiece(), expected_sp);
if (!(expected_sp == *actual)) {
return AssertionFailure();
}
if (!(expected_ptr == *actual)) {
return AssertionFailure();
}
if (!(expected_str == *actual)) {
return AssertionFailure();
}
if (!(expected_sp == actual->ToStringPiece())) {
return AssertionFailure();
}
return AssertionSuccess();
}
};
TEST_F(HpackStringTest, CharArrayConstructor) {
HpackString hs0(kStr0);
EXPECT_TRUE(VerifyEqual(&hs0, kStr0));
EXPECT_TRUE(VerifyNotEqual(&hs0, kStr1));
HpackString hs1(kStr1);
EXPECT_TRUE(VerifyEqual(&hs1, kStr1));
EXPECT_TRUE(VerifyNotEqual(&hs1, kStr0));
}
TEST_F(HpackStringTest, StringPieceConstructor) {
absl::string_view sp0(kStr0);
HpackString hs0(sp0);
EXPECT_TRUE(VerifyEqual(&hs0, kStr0));
EXPECT_TRUE(VerifyNotEqual(&hs0, kStr1));
absl::string_view sp1(kStr1);
HpackString hs1(sp1);
EXPECT_TRUE(VerifyEqual(&hs1, kStr1));
EXPECT_TRUE(VerifyNotEqual(&hs1, kStr0));
}
TEST_F(HpackStringTest, MoveStringConstructor) {
std::string str0(kStr0);
HpackString hs0(str0);
EXPECT_TRUE(VerifyEqual(&hs0, kStr0));
EXPECT_TRUE(VerifyNotEqual(&hs0, kStr1));
std::string str1(kStr1);
HpackString hs1(str1);
EXPECT_TRUE(VerifyEqual(&hs1, kStr1));
EXPECT_TRUE(VerifyNotEqual(&hs1, kStr0));
}
TEST_F(HpackStringTest, CopyConstructor) {
absl::string_view sp0(kStr0);
HpackString hs0(sp0);
HpackString hs1(hs0);
EXPECT_EQ(hs0, hs1);
EXPECT_TRUE(VerifyEqual(&hs0, kStr0));
EXPECT_TRUE(VerifyEqual(&hs1, kStr0));
EXPECT_TRUE(VerifyNotEqual(&hs0, kStr1));
EXPECT_TRUE(VerifyNotEqual(&hs1, kStr1));
}
TEST_F(HpackStringTest, MoveConstructor) {
absl::string_view sp0(kStr0);
HpackString hs0(sp0);
EXPECT_TRUE(VerifyEqual(&hs0, kStr0));
EXPECT_TRUE(VerifyNotEqual(&hs0, ""));
HpackString hs1(std::move(hs0));
EXPECT_NE(hs0, hs1);
EXPECT_TRUE(VerifyEqual(&hs1, kStr0));
EXPECT_TRUE(VerifyEqual(&hs0, ""));
EXPECT_TRUE(VerifyNotEqual(&hs1, ""));
HTTP2_LOG(INFO) << hs0;
HTTP2_LOG(INFO) << hs1;
}
} // namespace
} // namespace test
} // namespace http2