// Copyright 2022 PDFium 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 "core/fpdfdoc/cpdf_bafontmap.h"

#include "build/build_config.h"
#include "constants/annotation_common.h"
#include "core/fpdfapi/font/cpdf_font.h"
#include "core/fpdfapi/page/test_with_page_module.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_name.h"
#include "core/fpdfapi/parser/cpdf_string.h"
#include "core/fpdfapi/parser/cpdf_test_document.h"

using BAFontMapTest = TestWithPageModule;

TEST_F(BAFontMapTest, DefaultFont) {
  // Without any font resources, CPDF_BAFontMap generates a default font.
  CPDF_TestDocument doc;

  auto annot_dict = pdfium::MakeRetain<CPDF_Dictionary>();
  annot_dict->SetNewFor<CPDF_Name>(pdfium::annotation::kSubtype, "Widget");
  annot_dict->SetNewFor<CPDF_String>("DA", "0 0 0 rg /F1 12 Tf",
                                     /*bHex=*/false);

  CPDF_BAFontMap font_map(&doc, annot_dict.Get(), "N");
#if !BUILDFLAG(IS_WIN)
  // TODO(thestig): Figure out why this does not work on Windows.
  EXPECT_EQ(font_map.GetPDFFontAlias(0), "Helvetica_00");
#endif
  RetainPtr<CPDF_Font> font = font_map.GetPDFFont(0);
  ASSERT_TRUE(font);
  EXPECT_TRUE(font->IsType1Font());
  EXPECT_EQ(font->GetBaseFontName(), "Helvetica");
}

TEST_F(BAFontMapTest, Bug853238) {
  CPDF_TestDocument doc;
  auto root_dict = pdfium::MakeRetain<CPDF_Dictionary>();
  auto* acroform_dict = root_dict->SetNewFor<CPDF_Dictionary>("AcroForm");
  auto* annot_dr_dict = acroform_dict->SetNewFor<CPDF_Dictionary>("DR");
  auto* annot_font_dict = annot_dr_dict->SetNewFor<CPDF_Dictionary>("Font");
  auto* annot_font_f1_dict = annot_font_dict->SetNewFor<CPDF_Dictionary>("F1");
  annot_font_f1_dict->SetNewFor<CPDF_Name>("Type", "Font");
  annot_font_f1_dict->SetNewFor<CPDF_Name>("Subtype", "Type1");
  annot_font_f1_dict->SetNewFor<CPDF_Name>("BaseFont", "Times-Roman");
  doc.SetRoot(root_dict.Get());

  auto annot_dict = pdfium::MakeRetain<CPDF_Dictionary>();
  annot_dict->SetNewFor<CPDF_Name>(pdfium::annotation::kSubtype, "Widget");
  annot_dict->SetNewFor<CPDF_String>("DA", "0 0 0 rg /F1 12 Tf",
                                     /*bHex=*/false);

  CPDF_BAFontMap font_map(&doc, annot_dict.Get(), "N");
  EXPECT_EQ(font_map.GetPDFFontAlias(0), "F1");
  RetainPtr<CPDF_Font> font = font_map.GetPDFFont(0);
  ASSERT_TRUE(font);
  EXPECT_TRUE(font->IsType1Font());
  EXPECT_EQ(font->GetBaseFontName(), "Times-Roman");
}
