// Copyright 2023 The PDFium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "core/fxcrt/code_point_view.h" #include #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" namespace { using ::pdfium::CodePointView; std::u32string Materialize(CodePointView view) { std::u32string materialized; for (char32_t code_point : view) { materialized += code_point; } return materialized; } } // namespace TEST(CodePointViewTest, Empty) { EXPECT_EQ(U"", Materialize(CodePointView(L""))); } TEST(CodePointViewTest, Basic) { EXPECT_EQ(U"(\u0080\uffff)", Materialize(CodePointView(L"(\u0080\uffff)"))); } TEST(CodePointViewTest, Supplementary) { EXPECT_EQ(U"(🎨)", Materialize(CodePointView(L"(🎨)"))); } TEST(CodePointViewTest, UnpairedHighSurrogate) { EXPECT_EQ(U"\xd800", Materialize(CodePointView(L"\xd800"))); } TEST(CodePointViewTest, UnpairedLowSurrogate) { EXPECT_EQ(U"\xdc00", Materialize(CodePointView(L"\xdc00"))); } #if defined(WCHAR_T_IS_UTF16) TEST(CodePointViewTest, SurrogateErrorRecovery) { EXPECT_EQ(U"(\xd800)", Materialize(CodePointView(L"(\xd800)"))) << "High"; EXPECT_EQ(U"(\xdc00)", Materialize(CodePointView(L"(\xdc00)"))) << "Low"; EXPECT_EQ(U"(\xd800🎨)", Materialize(CodePointView(L"(\xd800\xd83c\xdfa8)"))) << "High-high"; EXPECT_EQ(U"(🎨\xdc00)", Materialize(CodePointView(L"(\xd83c\xdfa8\xdc00)"))) << "Low-low"; } #endif // defined(WCHAR_T_IS_UTF16)