| // 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 <string> |
| |
| #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) |