| // Copyright 2019 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/fpdfapi/font/cpdf_cidfont.h" |
| |
| #include <utility> |
| |
| #include "core/fpdfapi/page/test_with_page_module.h" |
| #include "core/fpdfapi/parser/cpdf_array.h" |
| #include "core/fpdfapi/parser/cpdf_dictionary.h" |
| #include "core/fpdfapi/parser/cpdf_document.h" |
| #include "core/fpdfapi/parser/cpdf_name.h" |
| #include "core/fpdfapi/parser/cpdf_test_document.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| using CPDF_CIDFontTest = TestWithPageModule; |
| |
| TEST_F(CPDF_CIDFontTest, BUG_920636) { |
| CPDF_TestDocument doc; |
| auto font_dict = pdfium::MakeRetain<CPDF_Dictionary>(); |
| font_dict->SetNewFor<CPDF_Name>("Encoding", "Identity−H"); |
| |
| { |
| auto descendant_fonts = pdfium::MakeRetain<CPDF_Array>(); |
| { |
| auto descendant_font = pdfium::MakeRetain<CPDF_Dictionary>(); |
| descendant_font->SetNewFor<CPDF_Name>("BaseFont", "CourierStd"); |
| descendant_fonts->Append(std::move(descendant_font)); |
| } |
| font_dict->SetFor("DescendantFonts", std::move(descendant_fonts)); |
| } |
| |
| auto font = pdfium::MakeRetain<CPDF_CIDFont>(&doc, std::move(font_dict)); |
| ASSERT_TRUE(font->Load()); |
| |
| // It would be nice if we can test more values here. However, the glyph |
| // indices are sometimes machine dependent. |
| struct { |
| uint32_t charcode; |
| int glyph; |
| } static constexpr kTestCases[] = { |
| {0, 31}, |
| {256, 287}, |
| {34661, 34692}, |
| }; |
| |
| for (const auto& test_case : kTestCases) { |
| EXPECT_EQ(test_case.glyph, |
| font->GlyphFromCharCode(test_case.charcode, nullptr)); |
| } |
| } |