blob: 13efe86789d875737d89df3f00b4e88f09cac593 [file] [log] [blame]
Tom Sepezfe351db2016-01-29 16:26:27 -08001// Copyright 2016 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
dsinclair114e46a2016-09-29 17:18:21 -07005#include "fpdfsdk/cba_annotiterator.h"
6#include "fpdfsdk/cpdfsdk_annot.h"
dsinclairf3fbe832016-10-11 13:08:04 -07007#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
dsinclair114e46a2016-09-29 17:18:21 -07008#include "fpdfsdk/fsdk_define.h"
Tom Sepezfe351db2016-01-29 16:26:27 -08009#include "testing/embedder_test.h"
10#include "testing/embedder_test_mock_delegate.h"
11#include "testing/embedder_test_timer_handling_delegate.h"
12#include "testing/gmock/include/gmock/gmock.h"
13#include "testing/gtest/include/gtest/gtest.h"
14
15namespace {
16
Tom Sepez281a9ea2016-02-26 14:24:28 -080017void CheckRect(const CFX_FloatRect& actual, const CFX_FloatRect& expected) {
Tom Sepezfe351db2016-01-29 16:26:27 -080018 EXPECT_EQ(expected.left, actual.left);
19 EXPECT_EQ(expected.bottom, actual.bottom);
20 EXPECT_EQ(expected.right, actual.right);
21 EXPECT_EQ(expected.top, actual.top);
22}
23
24} // namespace
25
26class FSDKBaseFormEmbeddertest : public EmbedderTest {};
27
28TEST_F(FSDKBaseFormEmbeddertest, CBA_AnnotIterator) {
29 EXPECT_TRUE(OpenDocument("annotiter.pdf"));
weili0dadcc62016-08-23 21:10:57 -070030 FPDF_PAGE page0 = LoadPage(0);
31 FPDF_PAGE page1 = LoadPage(1);
32 FPDF_PAGE page2 = LoadPage(2);
33 EXPECT_TRUE(page0);
34 EXPECT_TRUE(page1);
35 EXPECT_TRUE(page2);
Tom Sepezfe351db2016-01-29 16:26:27 -080036
Tom Sepez281a9ea2016-02-26 14:24:28 -080037 CFX_FloatRect LeftBottom(200, 200, 220, 220);
38 CFX_FloatRect RightBottom(400, 201, 420, 221);
39 CFX_FloatRect LeftTop(201, 400, 221, 420);
40 CFX_FloatRect RightTop(401, 401, 421, 421);
Tom Sepezfe351db2016-01-29 16:26:27 -080041
dsinclairf3fbe832016-10-11 13:08:04 -070042 CPDFSDK_FormFillEnvironment* pFormFillEnv =
43 static_cast<CPDFSDK_FormFillEnvironment*>(form_handle());
44
Tom Sepezfe351db2016-01-29 16:26:27 -080045 {
46 // Page 0 specifies "row order".
dsinclair7cbe68e2016-10-12 11:56:23 -070047 CBA_AnnotIterator iter(pFormFillEnv->GetPageView(0),
jaepark956553e2016-08-31 06:49:27 -070048 CPDF_Annot::Subtype::WIDGET);
Tom Sepezfe351db2016-01-29 16:26:27 -080049 CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot();
50 CheckRect(pAnnot->GetRect(), RightTop);
51 pAnnot = iter.GetNextAnnot(pAnnot);
52 CheckRect(pAnnot->GetRect(), LeftTop);
53 pAnnot = iter.GetNextAnnot(pAnnot);
54 CheckRect(pAnnot->GetRect(), RightBottom);
55 pAnnot = iter.GetNextAnnot(pAnnot);
56 CheckRect(pAnnot->GetRect(), LeftBottom);
57 pAnnot = iter.GetNextAnnot(pAnnot);
58 EXPECT_EQ(iter.GetFirstAnnot(), pAnnot);
59
60 pAnnot = iter.GetLastAnnot();
61 CheckRect(pAnnot->GetRect(), LeftBottom);
62 pAnnot = iter.GetPrevAnnot(pAnnot);
63 CheckRect(pAnnot->GetRect(), RightBottom);
64 pAnnot = iter.GetPrevAnnot(pAnnot);
65 CheckRect(pAnnot->GetRect(), LeftTop);
66 pAnnot = iter.GetPrevAnnot(pAnnot);
67 CheckRect(pAnnot->GetRect(), RightTop);
68 pAnnot = iter.GetPrevAnnot(pAnnot);
69 EXPECT_EQ(iter.GetLastAnnot(), pAnnot);
70 }
71 {
72 // Page 1 specifies "column order"
dsinclair7cbe68e2016-10-12 11:56:23 -070073 CBA_AnnotIterator iter(pFormFillEnv->GetPageView(1),
jaepark956553e2016-08-31 06:49:27 -070074 CPDF_Annot::Subtype::WIDGET);
Tom Sepezfe351db2016-01-29 16:26:27 -080075 CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot();
76 CheckRect(pAnnot->GetRect(), RightTop);
77 pAnnot = iter.GetNextAnnot(pAnnot);
78 CheckRect(pAnnot->GetRect(), RightBottom);
79 pAnnot = iter.GetNextAnnot(pAnnot);
80 CheckRect(pAnnot->GetRect(), LeftTop);
81 pAnnot = iter.GetNextAnnot(pAnnot);
82 CheckRect(pAnnot->GetRect(), LeftBottom);
83 pAnnot = iter.GetNextAnnot(pAnnot);
84 EXPECT_EQ(iter.GetFirstAnnot(), pAnnot);
85
86 pAnnot = iter.GetLastAnnot();
87 CheckRect(pAnnot->GetRect(), LeftBottom);
88 pAnnot = iter.GetPrevAnnot(pAnnot);
89 CheckRect(pAnnot->GetRect(), LeftTop);
90 pAnnot = iter.GetPrevAnnot(pAnnot);
91 CheckRect(pAnnot->GetRect(), RightBottom);
92 pAnnot = iter.GetPrevAnnot(pAnnot);
93 CheckRect(pAnnot->GetRect(), RightTop);
94 pAnnot = iter.GetPrevAnnot(pAnnot);
95 EXPECT_EQ(iter.GetLastAnnot(), pAnnot);
96 }
97 {
98 // Page 2 specifies "struct order"
dsinclair7cbe68e2016-10-12 11:56:23 -070099 CBA_AnnotIterator iter(pFormFillEnv->GetPageView(2),
jaepark956553e2016-08-31 06:49:27 -0700100 CPDF_Annot::Subtype::WIDGET);
Tom Sepezfe351db2016-01-29 16:26:27 -0800101 CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot();
102 CheckRect(pAnnot->GetRect(), LeftBottom);
103 pAnnot = iter.GetNextAnnot(pAnnot);
104 CheckRect(pAnnot->GetRect(), RightTop);
105 pAnnot = iter.GetNextAnnot(pAnnot);
106 CheckRect(pAnnot->GetRect(), LeftTop);
107 pAnnot = iter.GetNextAnnot(pAnnot);
108 CheckRect(pAnnot->GetRect(), RightBottom);
109 pAnnot = iter.GetNextAnnot(pAnnot);
110 EXPECT_EQ(iter.GetFirstAnnot(), pAnnot);
111
112 pAnnot = iter.GetLastAnnot();
113 CheckRect(pAnnot->GetRect(), RightBottom);
114 pAnnot = iter.GetPrevAnnot(pAnnot);
115 CheckRect(pAnnot->GetRect(), LeftTop);
116 pAnnot = iter.GetPrevAnnot(pAnnot);
117 CheckRect(pAnnot->GetRect(), RightTop);
118 pAnnot = iter.GetPrevAnnot(pAnnot);
119 CheckRect(pAnnot->GetRect(), LeftBottom);
120 pAnnot = iter.GetPrevAnnot(pAnnot);
121 EXPECT_EQ(iter.GetLastAnnot(), pAnnot);
122 }
weili0dadcc62016-08-23 21:10:57 -0700123 UnloadPage(page2);
124 UnloadPage(page1);
125 UnloadPage(page0);
Tom Sepezfe351db2016-01-29 16:26:27 -0800126}