Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cpdf_annot_unittest.cpp
Go to the documentation of this file.
1// Copyright 2018 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "core/fpdfdoc/cpdf_annot.h"
6
7#include <vector>
8
9#include "core/fpdfapi/parser/cpdf_array.h"
10#include "core/fpdfapi/parser/cpdf_dictionary.h"
11#include "core/fpdfapi/parser/cpdf_number.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14namespace {
15
16RetainPtr<CPDF_Array> CreateQuadPointArrayFromVector(
17 const std::vector<int>& points) {
18 auto array = pdfium::MakeRetain<CPDF_Array>();
19 for (float point : points)
20 array->AppendNew<CPDF_Number>(point);
21 return array;
22}
23
24} // namespace
25
27 RetainPtr<CPDF_Array> array = CreateQuadPointArrayFromVector(
28 {0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1});
29 CFX_FloatRect rect = CPDF_Annot::RectFromQuadPointsArray(array.Get(), 0);
30 EXPECT_EQ(4.0f, rect.left);
31 EXPECT_EQ(5.0f, rect.bottom);
32 EXPECT_EQ(2.0f, rect.right);
33 EXPECT_EQ(3.0f, rect.top);
34
35 rect = CPDF_Annot::RectFromQuadPointsArray(array.Get(), 1);
36 EXPECT_EQ(4.0f, rect.left);
37 EXPECT_EQ(3.0f, rect.bottom);
38 EXPECT_EQ(6.0f, rect.right);
39 EXPECT_EQ(5.0f, rect.top);
40}
41
43 auto dict = pdfium::MakeRetain<CPDF_Dictionary>();
45 EXPECT_EQ(0.0f, rect.left);
46 EXPECT_EQ(0.0f, rect.bottom);
47 EXPECT_EQ(0.0f, rect.right);
48 EXPECT_EQ(0.0f, rect.top);
49
50 dict->SetFor("QuadPoints", CreateQuadPointArrayFromVector({0, 1, 2}));
52 EXPECT_EQ(0.0f, rect.left);
53 EXPECT_EQ(0.0f, rect.bottom);
54 EXPECT_EQ(0.0f, rect.right);
55 EXPECT_EQ(0.0f, rect.top);
56
57 dict->SetFor("QuadPoints",
58 CreateQuadPointArrayFromVector({0, 1, 2, 3, 4, 5, 6, 7}));
60 EXPECT_EQ(4.0f, rect.left);
61 EXPECT_EQ(5.0f, rect.bottom);
62 EXPECT_EQ(2.0f, rect.right);
63 EXPECT_EQ(3.0f, rect.top);
64
65 dict->SetFor("QuadPoints", CreateQuadPointArrayFromVector(
66 {0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5,
67 4, 3, 2, 1, 9, 2, 5, 7, 3, 6, 4, 1}));
69 EXPECT_EQ(2.0f, rect.left);
70 EXPECT_EQ(3.0f, rect.bottom);
71 EXPECT_EQ(6.0f, rect.right);
72 EXPECT_EQ(7.0f, rect.top);
73}
74
76 auto dict = pdfium::MakeRetain<CPDF_Dictionary>();
77 CFX_FloatRect rect = CPDF_Annot::RectFromQuadPoints(dict.Get(), 0);
78 EXPECT_EQ(0.0f, rect.left);
79 EXPECT_EQ(0.0f, rect.bottom);
80 EXPECT_EQ(0.0f, rect.right);
81 EXPECT_EQ(0.0f, rect.top);
82 rect = CPDF_Annot::RectFromQuadPoints(dict.Get(), 5);
83 EXPECT_EQ(0.0f, rect.left);
84 EXPECT_EQ(0.0f, rect.bottom);
85 EXPECT_EQ(0.0f, rect.right);
86 EXPECT_EQ(0.0f, rect.top);
87
88 dict->SetFor("QuadPoints",
89 CreateQuadPointArrayFromVector({0, 1, 2, 3, 4, 5, 6, 7}));
90 rect = CPDF_Annot::RectFromQuadPoints(dict.Get(), 0);
91 EXPECT_EQ(4.0f, rect.left);
92 EXPECT_EQ(5.0f, rect.bottom);
93 EXPECT_EQ(2.0f, rect.right);
94 EXPECT_EQ(3.0f, rect.top);
95 rect = CPDF_Annot::RectFromQuadPoints(dict.Get(), 5);
96 EXPECT_EQ(0.0f, rect.left);
97 EXPECT_EQ(0.0f, rect.bottom);
98 EXPECT_EQ(0.0f, rect.right);
99 EXPECT_EQ(0.0f, rect.top);
100
101 dict->SetFor("QuadPoints", CreateQuadPointArrayFromVector(
102 {0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5,
103 4, 3, 2, 1, 9, 2, 5, 7, 3, 6, 4, 1}));
104 rect = CPDF_Annot::RectFromQuadPoints(dict.Get(), 0);
105 EXPECT_EQ(4.0f, rect.left);
106 EXPECT_EQ(5.0f, rect.bottom);
107 EXPECT_EQ(2.0f, rect.right);
108 EXPECT_EQ(3.0f, rect.top);
109 rect = CPDF_Annot::RectFromQuadPoints(dict.Get(), 1);
110 EXPECT_EQ(4.0f, rect.left);
111 EXPECT_EQ(3.0f, rect.bottom);
112 EXPECT_EQ(6.0f, rect.right);
113 EXPECT_EQ(5.0f, rect.top);
114 rect = CPDF_Annot::RectFromQuadPoints(dict.Get(), 2);
115 EXPECT_EQ(3.0f, rect.left);
116 EXPECT_EQ(6.0f, rect.bottom);
117 EXPECT_EQ(5.0f, rect.right);
118 EXPECT_EQ(7.0f, rect.top);
119}
120
122 RetainPtr<CPDF_Array> array = CreateQuadPointArrayFromVector({});
123 EXPECT_EQ(0u, CPDF_Annot::QuadPointCount(array.Get()));
124
125 for (int i = 0; i < 7; ++i) {
126 array->AppendNew<CPDF_Number>(0);
127 EXPECT_EQ(0u, CPDF_Annot::QuadPointCount(array.Get()));
128 }
129 for (int i = 0; i < 8; ++i) {
130 array->AppendNew<CPDF_Number>(0);
131 EXPECT_EQ(1u, CPDF_Annot::QuadPointCount(array.Get()));
132 }
133 for (int i = 0; i < 50; ++i)
134 array->AppendNew<CPDF_Number>(0);
135 EXPECT_EQ(8u, CPDF_Annot::QuadPointCount(array.Get()));
136}
static CFX_FloatRect BoundingRectFromQuadPoints(const CPDF_Dictionary *pAnnotDict)
TEST(FXCRYPT, MD5GenerateEmtpyData)