1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/strings/string_view_util.h"
#include <string_view>
#include <type_traits>
#include "base/containers/span.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base {
// Tests that MakeStringViewWithNulChars preserves internal NUL characters.
TEST(StringViewUtilTest, MakeStringViewWithNulChars) {
{
const char kTestString[] = "abd\0def";
auto s = MakeStringViewWithNulChars(kTestString);
EXPECT_EQ(s.size(), 7u);
EXPECT_EQ(base::span(s), base::span_from_cstring(kTestString));
}
{
const wchar_t kTestString[] = L"abd\0def";
auto s = MakeStringViewWithNulChars(kTestString);
EXPECT_EQ(s.size(), 7u);
ASSERT_TRUE(base::span(s) == base::span_from_cstring(kTestString));
}
{
const char16_t kTestString[] = u"abd\0def";
auto s = MakeStringViewWithNulChars(kTestString);
EXPECT_EQ(s.size(), 7u);
EXPECT_TRUE(base::span(s) == base::span_from_cstring(kTestString));
}
{
const char32_t kTestString[] = U"abd\0def";
auto s = MakeStringViewWithNulChars(kTestString);
EXPECT_EQ(s.size(), 7u);
EXPECT_TRUE(base::span(s) == base::span_from_cstring(kTestString));
}
}
TEST(SpanTest, AsStringView) {
{
constexpr uint8_t kArray[] = {'h', 'e', 'l', 'l', 'o'};
// Fixed size span.
auto s = as_string_view(kArray);
static_assert(std::is_same_v<decltype(s), std::string_view>);
EXPECT_EQ(s.data(), reinterpret_cast<const char*>(&kArray[0u]));
EXPECT_EQ(s.size(), std::size(kArray));
// Dynamic size span.
auto s2 = as_string_view(span<const uint8_t>(kArray));
static_assert(std::is_same_v<decltype(s2), std::string_view>);
EXPECT_EQ(s2.data(), reinterpret_cast<const char*>(&kArray[0u]));
EXPECT_EQ(s2.size(), std::size(kArray));
}
{
constexpr char kArray[] = {'h', 'e', 'l', 'l', 'o'};
// Fixed size span.
auto s = as_string_view(kArray);
static_assert(std::is_same_v<decltype(s), std::string_view>);
EXPECT_EQ(s.data(), &kArray[0u]);
EXPECT_EQ(s.size(), std::size(kArray));
// Dynamic size span.
auto s2 = as_string_view(span<const char>(kArray));
static_assert(std::is_same_v<decltype(s2), std::string_view>);
EXPECT_EQ(s2.data(), &kArray[0u]);
EXPECT_EQ(s2.size(), std::size(kArray));
}
}
} // namespace base
|