blob: 7af8262c555e468f0e4bb34d6676d7f9d6441314 [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
jaepark611adb82016-08-17 11:34:36 -07005#include "fpdfsdk/include/cba_annotiterator.h"
Tom Sepezfe351db2016-01-29 16:26:27 -08006#include "fpdfsdk/include/fsdk_define.h"
7#include "fpdfsdk/include/fsdk_mgr.h"
8#include "testing/embedder_test.h"
9#include "testing/embedder_test_mock_delegate.h"
10#include "testing/embedder_test_timer_handling_delegate.h"
11#include "testing/gmock/include/gmock/gmock.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14namespace {
15
Tom Sepez281a9ea2016-02-26 14:24:28 -080016void CheckRect(const CFX_FloatRect& actual, const CFX_FloatRect& expected) {
Tom Sepezfe351db2016-01-29 16:26:27 -080017 EXPECT_EQ(expected.left, actual.left);
18 EXPECT_EQ(expected.bottom, actual.bottom);
19 EXPECT_EQ(expected.right, actual.right);
20 EXPECT_EQ(expected.top, actual.top);
21}
22
23} // namespace
24
25class FSDKBaseFormEmbeddertest : public EmbedderTest {};
26
27TEST_F(FSDKBaseFormEmbeddertest, CBA_AnnotIterator) {
28 EXPECT_TRUE(OpenDocument("annotiter.pdf"));
weili0dadcc62016-08-23 21:10:57 -070029 FPDF_PAGE page0 = LoadPage(0);
30 FPDF_PAGE page1 = LoadPage(1);
31 FPDF_PAGE page2 = LoadPage(2);
32 EXPECT_TRUE(page0);
33 EXPECT_TRUE(page1);
34 EXPECT_TRUE(page2);
Tom Sepezfe351db2016-01-29 16:26:27 -080035
Tom Sepez281a9ea2016-02-26 14:24:28 -080036 CFX_FloatRect LeftBottom(200, 200, 220, 220);
37 CFX_FloatRect RightBottom(400, 201, 420, 221);
38 CFX_FloatRect LeftTop(201, 400, 221, 420);
39 CFX_FloatRect RightTop(401, 401, 421, 421);
Tom Sepezfe351db2016-01-29 16:26:27 -080040
41 CPDFSDK_Document* pSDKDoc =
42 CPDFSDK_Document::FromFPDFFormHandle(form_handle());
43 {
44 // Page 0 specifies "row order".
45 CBA_AnnotIterator iter(pSDKDoc->GetPageView(0), "Widget", "");
46 CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot();
47 CheckRect(pAnnot->GetRect(), RightTop);
48 pAnnot = iter.GetNextAnnot(pAnnot);
49 CheckRect(pAnnot->GetRect(), LeftTop);
50 pAnnot = iter.GetNextAnnot(pAnnot);
51 CheckRect(pAnnot->GetRect(), RightBottom);
52 pAnnot = iter.GetNextAnnot(pAnnot);
53 CheckRect(pAnnot->GetRect(), LeftBottom);
54 pAnnot = iter.GetNextAnnot(pAnnot);
55 EXPECT_EQ(iter.GetFirstAnnot(), pAnnot);
56
57 pAnnot = iter.GetLastAnnot();
58 CheckRect(pAnnot->GetRect(), LeftBottom);
59 pAnnot = iter.GetPrevAnnot(pAnnot);
60 CheckRect(pAnnot->GetRect(), RightBottom);
61 pAnnot = iter.GetPrevAnnot(pAnnot);
62 CheckRect(pAnnot->GetRect(), LeftTop);
63 pAnnot = iter.GetPrevAnnot(pAnnot);
64 CheckRect(pAnnot->GetRect(), RightTop);
65 pAnnot = iter.GetPrevAnnot(pAnnot);
66 EXPECT_EQ(iter.GetLastAnnot(), pAnnot);
67 }
68 {
69 // Page 1 specifies "column order"
70 CBA_AnnotIterator iter(pSDKDoc->GetPageView(1), "Widget", "");
71 CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot();
72 CheckRect(pAnnot->GetRect(), RightTop);
73 pAnnot = iter.GetNextAnnot(pAnnot);
74 CheckRect(pAnnot->GetRect(), RightBottom);
75 pAnnot = iter.GetNextAnnot(pAnnot);
76 CheckRect(pAnnot->GetRect(), LeftTop);
77 pAnnot = iter.GetNextAnnot(pAnnot);
78 CheckRect(pAnnot->GetRect(), LeftBottom);
79 pAnnot = iter.GetNextAnnot(pAnnot);
80 EXPECT_EQ(iter.GetFirstAnnot(), pAnnot);
81
82 pAnnot = iter.GetLastAnnot();
83 CheckRect(pAnnot->GetRect(), LeftBottom);
84 pAnnot = iter.GetPrevAnnot(pAnnot);
85 CheckRect(pAnnot->GetRect(), LeftTop);
86 pAnnot = iter.GetPrevAnnot(pAnnot);
87 CheckRect(pAnnot->GetRect(), RightBottom);
88 pAnnot = iter.GetPrevAnnot(pAnnot);
89 CheckRect(pAnnot->GetRect(), RightTop);
90 pAnnot = iter.GetPrevAnnot(pAnnot);
91 EXPECT_EQ(iter.GetLastAnnot(), pAnnot);
92 }
93 {
94 // Page 2 specifies "struct order"
95 CBA_AnnotIterator iter(pSDKDoc->GetPageView(2), "Widget", "");
96 CPDFSDK_Annot* pAnnot = iter.GetFirstAnnot();
97 CheckRect(pAnnot->GetRect(), LeftBottom);
98 pAnnot = iter.GetNextAnnot(pAnnot);
99 CheckRect(pAnnot->GetRect(), RightTop);
100 pAnnot = iter.GetNextAnnot(pAnnot);
101 CheckRect(pAnnot->GetRect(), LeftTop);
102 pAnnot = iter.GetNextAnnot(pAnnot);
103 CheckRect(pAnnot->GetRect(), RightBottom);
104 pAnnot = iter.GetNextAnnot(pAnnot);
105 EXPECT_EQ(iter.GetFirstAnnot(), pAnnot);
106
107 pAnnot = iter.GetLastAnnot();
108 CheckRect(pAnnot->GetRect(), RightBottom);
109 pAnnot = iter.GetPrevAnnot(pAnnot);
110 CheckRect(pAnnot->GetRect(), LeftTop);
111 pAnnot = iter.GetPrevAnnot(pAnnot);
112 CheckRect(pAnnot->GetRect(), RightTop);
113 pAnnot = iter.GetPrevAnnot(pAnnot);
114 CheckRect(pAnnot->GetRect(), LeftBottom);
115 pAnnot = iter.GetPrevAnnot(pAnnot);
116 EXPECT_EQ(iter.GetLastAnnot(), pAnnot);
117 }
weili0dadcc62016-08-23 21:10:57 -0700118 UnloadPage(page2);
119 UnloadPage(page1);
120 UnloadPage(page0);
Tom Sepezfe351db2016-01-29 16:26:27 -0800121}