89 lines
3.1 KiB
C++
89 lines
3.1 KiB
C++
// Copyright 2019 The 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 "fpdfsdk/cpdfsdk_annotiterator.h"
|
|
#include "fpdfsdk/cpdfsdk_baannothandler.h"
|
|
#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
|
|
#include "fpdfsdk/cpdfsdk_helpers.h"
|
|
#include "fpdfsdk/cpdfsdk_pageview.h"
|
|
#include "public/fpdf_annot.h"
|
|
#include "testing/embedder_test.h"
|
|
|
|
class CPDFSDK_BAAnnotHandlerTest : public EmbedderTest {
|
|
public:
|
|
void SetUp() override {
|
|
// Test behaviour with currently supported annot i.e. Widget.
|
|
// TODO(crbug.com/994500): Add an API that can set list of focusable
|
|
// subtypes once other annots(links & highlights) are also supported.
|
|
EmbedderTest::SetUp();
|
|
SetUpBAAnnotHandler();
|
|
}
|
|
|
|
void TearDown() override {
|
|
UnloadPage(m_page);
|
|
EmbedderTest::TearDown();
|
|
}
|
|
|
|
void SetUpBAAnnotHandler() {
|
|
EXPECT_TRUE(OpenDocument("links_highlights_annots.pdf"));
|
|
m_page = LoadPage(0);
|
|
ASSERT_TRUE(m_page);
|
|
|
|
CPDFSDK_FormFillEnvironment* pFormFillEnv =
|
|
CPDFSDKFormFillEnvironmentFromFPDFFormHandle(form_handle());
|
|
ASSERT_TRUE(pFormFillEnv);
|
|
m_pPageView = pFormFillEnv->GetPageView(IPDFPageFromFPDFPage(m_page), true);
|
|
ASSERT_TRUE(m_pPageView);
|
|
|
|
CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr =
|
|
pFormFillEnv->GetAnnotHandlerMgr();
|
|
ASSERT_TRUE(pAnnotHandlerMgr);
|
|
m_pBAAnnotHandler = pAnnotHandlerMgr->m_pBAAnnotHandler.get();
|
|
ASSERT_TRUE(m_pBAAnnotHandler);
|
|
}
|
|
|
|
CPDFSDK_PageView* GetPageView() const { return m_pPageView; }
|
|
CPDFSDK_BAAnnotHandler* GetBAAnnotHandler() const {
|
|
return m_pBAAnnotHandler;
|
|
}
|
|
|
|
private:
|
|
FPDF_PAGE m_page = nullptr;
|
|
CPDFSDK_PageView* m_pPageView = nullptr;
|
|
CPDFSDK_BAAnnotHandler* m_pBAAnnotHandler = nullptr;
|
|
};
|
|
|
|
TEST_F(CPDFSDK_BAAnnotHandlerTest, TabToLinkOrHighlightAnnot) {
|
|
// TODO(crbug.com/994500): Create annot iterator with list of supported
|
|
// focusable subtypes as provided by host.
|
|
CPDFSDK_AnnotIterator ai(GetPageView(), CPDF_Annot::Subtype::LINK);
|
|
CPDFSDK_Annot* pAnnot = ai.GetFirstAnnot();
|
|
ASSERT_TRUE(pAnnot);
|
|
EXPECT_EQ(pAnnot->GetAnnotSubtype(), CPDF_Annot::Subtype::LINK);
|
|
|
|
ObservedPtr<CPDFSDK_Annot> pNonWidgetAnnot(pAnnot);
|
|
|
|
// TODO(crbug.com/994500): Change expected value as true once
|
|
// links & highlights are supported.
|
|
EXPECT_FALSE(GetBAAnnotHandler()->OnSetFocus(&pNonWidgetAnnot, 0));
|
|
|
|
EXPECT_FALSE(GetBAAnnotHandler()->OnKillFocus(&pNonWidgetAnnot, 0));
|
|
}
|
|
|
|
TEST_F(CPDFSDK_BAAnnotHandlerTest, TabToInvalidAnnot) {
|
|
// TODO(crbug.com/994500): Create annot iterator with list of supported
|
|
// focusable subtypes as provided by host.
|
|
CPDFSDK_AnnotIterator ai(GetPageView(), CPDF_Annot::Subtype::WIDGET);
|
|
CPDFSDK_Annot* pAnnot = ai.GetFirstAnnot();
|
|
ASSERT_TRUE(pAnnot);
|
|
EXPECT_EQ(pAnnot->GetAnnotSubtype(), CPDF_Annot::Subtype::WIDGET);
|
|
|
|
ObservedPtr<CPDFSDK_Annot> pWidgetAnnot(pAnnot);
|
|
|
|
// Passing wrong subtype to BAAnnotHandler, API should return false.
|
|
EXPECT_FALSE(GetBAAnnotHandler()->OnSetFocus(&pWidgetAnnot, 0));
|
|
|
|
EXPECT_FALSE(GetBAAnnotHandler()->OnKillFocus(&pWidgetAnnot, 0));
|
|
}
|