blob: 7b40a9ed6ec69f870c15690d5d6c941ae1cafdf3 [file] [log] [blame]
// Copyright 2018 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 "chrome/chrome_cleaner/strings/wstring_embedded_nulls.h"
#include <vector>
#include "base/strings/string_piece.h"
#include "chrome/chrome_cleaner/strings/string_test_helpers.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chrome_cleaner {
namespace {
constexpr wchar_t kStringWithNulls[] = L"string0with0nulls";
std::wstring FormatWStringPiece(base::WStringPiece sp) {
return FormatVectorWithNulls(std::vector<wchar_t>(sp.begin(), sp.end()));
}
class WStringEmbeddedNullsTest : public ::testing::Test {
protected:
WStringEmbeddedNullsTest() : vec_(CreateVectorWithNulls(kStringWithNulls)) {}
const std::vector<wchar_t> vec_;
};
void ExpectEmpty(const WStringEmbeddedNulls& str) {
EXPECT_EQ(base::WStringPiece(), str.CastAsWStringPiece());
EXPECT_EQ(0u, str.size());
EXPECT_FALSE(str.CastAsUInt16Array());
}
TEST_F(WStringEmbeddedNullsTest, Empty) {
ExpectEmpty(WStringEmbeddedNulls());
ExpectEmpty(WStringEmbeddedNulls(nullptr));
ExpectEmpty(WStringEmbeddedNulls(nullptr, 0));
ExpectEmpty(WStringEmbeddedNulls(nullptr, 1));
ExpectEmpty(WStringEmbeddedNulls(L"", 0));
ExpectEmpty(WStringEmbeddedNulls(std::vector<wchar_t>{}));
ExpectEmpty(WStringEmbeddedNulls(std::wstring()));
ExpectEmpty(WStringEmbeddedNulls(std::wstring(L"")));
ExpectEmpty(WStringEmbeddedNulls(base::WStringPiece()));
ExpectEmpty(WStringEmbeddedNulls(base::WStringPiece(L"")));
}
TEST_F(WStringEmbeddedNullsTest, FromWCharArray) {
WStringEmbeddedNulls str(vec_.data(), vec_.size());
base::WStringPiece sp = str.CastAsWStringPiece();
EXPECT_EQ(FormatVectorWithNulls(vec_), FormatWStringPiece(sp));
}
TEST_F(WStringEmbeddedNullsTest, FromVector) {
WStringEmbeddedNulls str(vec_);
base::WStringPiece sp = str.CastAsWStringPiece();
EXPECT_EQ(FormatVectorWithNulls(vec_), FormatWStringPiece(sp));
}
TEST_F(WStringEmbeddedNullsTest, FromWString) {
WStringEmbeddedNulls str(std::wstring(vec_.data(), vec_.size()));
base::WStringPiece sp = str.CastAsWStringPiece();
EXPECT_EQ(FormatVectorWithNulls(vec_), FormatWStringPiece(sp));
}
TEST_F(WStringEmbeddedNullsTest, FromWStringPiece) {
WStringEmbeddedNulls str(base::WStringPiece(vec_.data(), vec_.size()));
base::WStringPiece sp = str.CastAsWStringPiece();
EXPECT_EQ(FormatVectorWithNulls(vec_), FormatWStringPiece(sp));
}
TEST_F(WStringEmbeddedNullsTest, CopyConstructor) {
WStringEmbeddedNulls str(vec_.data(), vec_.size());
WStringEmbeddedNulls copied_by_constructor(str);
EXPECT_EQ(str.CastAsWStringPiece(),
copied_by_constructor.CastAsWStringPiece());
}
TEST_F(WStringEmbeddedNullsTest, AssigmentOperator) {
WStringEmbeddedNulls str(vec_.data(), vec_.size());
WStringEmbeddedNulls other;
EXPECT_EQ(base::WStringPiece(), other.CastAsWStringPiece());
EXPECT_NE(str.CastAsWStringPiece(), other.CastAsWStringPiece());
other = str;
EXPECT_EQ(str.CastAsWStringPiece(), other.CastAsWStringPiece());
}
} // namespace
} // namespace chrome_cleaner