Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: testing/embedder_test.cpp

Issue 1546063002: Add tests to exercise FPDF_SaveAsCopy(). (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 PDFium Authors. All rights reserved. 1 // Copyright 2015 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "testing/embedder_test.h" 5 #include "testing/embedder_test.h"
6 6
7 #include <limits.h> 7 #include <limits.h>
8 8
9 #include <list> 9 #include <list>
10 #include <string> 10 #include <string>
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 InitializeV8ForPDFium(g_exe_path_, std::string(), &natives_, &snapshot_, 52 InitializeV8ForPDFium(g_exe_path_, std::string(), &natives_, &snapshot_,
53 &platform_); 53 &platform_);
54 #else 54 #else
55 InitializeV8ForPDFium(&platform_); 55 InitializeV8ForPDFium(&platform_);
56 #endif // V8_USE_EXTERNAL_STARTUP_DATA 56 #endif // V8_USE_EXTERNAL_STARTUP_DATA
57 #endif // FPDF_ENABLE_V8 57 #endif // FPDF_ENABLE_V8
58 } 58 }
59 59
60 EmbedderTest::~EmbedderTest() {} 60 EmbedderTest::~EmbedderTest() {}
61 61
62 // static
63 bool EmbedderTest::LoadDocument(const char* data,
64 size_t data_size,
65 bool must_linearize,
66 TestLoader* loader,
67 EmbedderTest* embedder_test,
68 LoadDocumentData* out_data) {
69 out_data->file_access->m_FileLen = static_cast<unsigned long>(data_size);
70 out_data->file_access->m_GetBlock = TestLoader::GetBlock;
71 out_data->file_access->m_Param = loader;
72
73 out_data->file_avail->version = 1;
74 out_data->file_avail->IsDataAvail = Is_Data_Avail;
75
76 out_data->hints->version = 1;
77 out_data->hints->AddSegment = Add_Segment;
78
79 *out_data->avail =
80 FPDFAvail_Create(out_data->file_avail, out_data->file_access);
81
82 if (FPDFAvail_IsLinearized(*out_data->avail) == PDF_LINEARIZED) {
83 *out_data->document = FPDFAvail_GetDocument(*out_data->avail, nullptr);
84 if (!*out_data->document) {
85 return false;
86 }
87 int32_t nRet = PDF_DATA_NOTAVAIL;
88 while (nRet == PDF_DATA_NOTAVAIL) {
89 nRet = FPDFAvail_IsDocAvail(*out_data->avail, out_data->hints);
90 }
91 if (nRet == PDF_DATA_ERROR) {
92 return false;
93 }
94 nRet = FPDFAvail_IsFormAvail(*out_data->avail, out_data->hints);
95 if (nRet == PDF_FORM_ERROR || nRet == PDF_FORM_NOTAVAIL) {
96 return false;
97 }
98 int page_count = FPDF_GetPageCount(*out_data->document);
99 for (int i = 0; i < page_count; ++i) {
100 nRet = PDF_DATA_NOTAVAIL;
101 while (nRet == PDF_DATA_NOTAVAIL) {
102 nRet = FPDFAvail_IsPageAvail(*out_data->avail, i, out_data->hints);
Wei Li 2016/01/04 19:01:13 I know this is from the original code, but worth c
Lei Zhang 2016/01/07 02:50:58 Maybe. If you can create a test case that does tha
103 }
104 if (nRet == PDF_DATA_ERROR) {
105 return false;
106 }
107 }
108 } else {
109 if (must_linearize) {
110 return false;
111 }
112 *out_data->document =
113 FPDF_LoadCustomDocument(out_data->file_access, nullptr);
114 if (!*out_data->document) {
115 return false;
116 }
117 }
118
119 (void)FPDF_GetDocPermissions(*out_data->document);
120
121 if (embedder_test) {
122 IPDF_JSPLATFORM* platform = static_cast<IPDF_JSPLATFORM*>(embedder_test);
123 memset(platform, 0, sizeof(IPDF_JSPLATFORM));
124 platform->version = 2;
125 platform->app_alert = AlertTrampoline;
126
127 FPDF_FORMFILLINFO* formfillinfo =
128 static_cast<FPDF_FORMFILLINFO*>(embedder_test);
129 memset(formfillinfo, 0, sizeof(FPDF_FORMFILLINFO));
130 formfillinfo->version = 1;
131 formfillinfo->FFI_SetTimer = SetTimerTrampoline;
132 formfillinfo->FFI_KillTimer = KillTimerTrampoline;
133 formfillinfo->FFI_GetPage = GetPageTrampoline;
134 formfillinfo->m_pJsPlatform = platform;
135
136 *out_data->form_handle =
137 FPDFDOC_InitFormFillEnvironment(*out_data->document, formfillinfo);
138 FPDF_SetFormFieldHighlightColor(*out_data->form_handle, 0, 0xFFE4DD);
139 FPDF_SetFormFieldHighlightAlpha(*out_data->form_handle, 100);
140 } else {
141 *out_data->form_handle = nullptr;
142 }
143
144 return true;
145 }
146
62 void EmbedderTest::SetUp() { 147 void EmbedderTest::SetUp() {
63 FPDF_LIBRARY_CONFIG config; 148 FPDF_LIBRARY_CONFIG config;
64 config.version = 2; 149 config.version = 2;
65 config.m_pUserFontPaths = nullptr; 150 config.m_pUserFontPaths = nullptr;
66 config.m_v8EmbedderSlot = 0; 151 config.m_v8EmbedderSlot = 0;
67 config.m_pIsolate = external_isolate_; 152 config.m_pIsolate = external_isolate_;
68 FPDF_InitLibraryWithConfig(&config); 153 FPDF_InitLibraryWithConfig(&config);
69 154
70 UNSUPPORT_INFO* info = static_cast<UNSUPPORT_INFO*>(this); 155 UNSUPPORT_INFO* info = static_cast<UNSUPPORT_INFO*>(this);
71 memset(info, 0, sizeof(UNSUPPORT_INFO)); 156 memset(info, 0, sizeof(UNSUPPORT_INFO));
(...skipping 23 matching lines...) Expand all
95 bool EmbedderTest::OpenDocument(const std::string& filename, 180 bool EmbedderTest::OpenDocument(const std::string& filename,
96 bool must_linearize) { 181 bool must_linearize) {
97 std::string file_path; 182 std::string file_path;
98 if (!PathService::GetTestFilePath(filename, &file_path)) 183 if (!PathService::GetTestFilePath(filename, &file_path))
99 return false; 184 return false;
100 file_contents_ = GetFileContents(file_path.c_str(), &file_length_); 185 file_contents_ = GetFileContents(file_path.c_str(), &file_length_);
101 if (!file_contents_) 186 if (!file_contents_)
102 return false; 187 return false;
103 188
104 loader_ = new TestLoader(file_contents_, file_length_); 189 loader_ = new TestLoader(file_contents_, file_length_);
105 file_access_.m_FileLen = static_cast<unsigned long>(file_length_); 190 LoadDocumentData load_data;
106 file_access_.m_GetBlock = TestLoader::GetBlock; 191 load_data.document = &document_;
107 file_access_.m_Param = loader_; 192 load_data.file_access = &file_access_;
108 193 load_data.file_avail = &file_avail_;
109 file_avail_.version = 1; 194 load_data.avail = &avail_;
110 file_avail_.IsDataAvail = Is_Data_Avail; 195 load_data.hints = &hints_;
111 196 load_data.form_handle = &form_handle_;
112 hints_.version = 1; 197 return LoadDocument(file_contents_, file_length_, must_linearize, loader_,
113 hints_.AddSegment = Add_Segment; 198 this, &load_data);
114
115 avail_ = FPDFAvail_Create(&file_avail_, &file_access_);
116
117 if (FPDFAvail_IsLinearized(avail_) == PDF_LINEARIZED) {
118 document_ = FPDFAvail_GetDocument(avail_, nullptr);
119 if (!document_) {
120 return false;
121 }
122 int32_t nRet = PDF_DATA_NOTAVAIL;
123 while (nRet == PDF_DATA_NOTAVAIL) {
124 nRet = FPDFAvail_IsDocAvail(avail_, &hints_);
125 }
126 if (nRet == PDF_DATA_ERROR) {
127 return false;
128 }
129 nRet = FPDFAvail_IsFormAvail(avail_, &hints_);
130 if (nRet == PDF_FORM_ERROR || nRet == PDF_FORM_NOTAVAIL) {
131 return false;
132 }
133 int page_count = FPDF_GetPageCount(document_);
134 for (int i = 0; i < page_count; ++i) {
135 nRet = PDF_DATA_NOTAVAIL;
136 while (nRet == PDF_DATA_NOTAVAIL) {
137 nRet = FPDFAvail_IsPageAvail(avail_, i, &hints_);
138 }
139 if (nRet == PDF_DATA_ERROR) {
140 return false;
141 }
142 }
143 } else {
144 if (must_linearize) {
145 return false;
146 }
147 document_ = FPDF_LoadCustomDocument(&file_access_, nullptr);
148 if (!document_) {
149 return false;
150 }
151 }
152
153 (void)FPDF_GetDocPermissions(document_);
154
155 IPDF_JSPLATFORM* platform = static_cast<IPDF_JSPLATFORM*>(this);
156 memset(platform, 0, sizeof(IPDF_JSPLATFORM));
157 platform->version = 2;
158 platform->app_alert = AlertTrampoline;
159
160 FPDF_FORMFILLINFO* formfillinfo = static_cast<FPDF_FORMFILLINFO*>(this);
161 memset(formfillinfo, 0, sizeof(FPDF_FORMFILLINFO));
162 formfillinfo->version = 1;
163 formfillinfo->FFI_SetTimer = SetTimerTrampoline;
164 formfillinfo->FFI_KillTimer = KillTimerTrampoline;
165 formfillinfo->FFI_GetPage = GetPageTrampoline;
166 formfillinfo->m_pJsPlatform = platform;
167
168 form_handle_ = FPDFDOC_InitFormFillEnvironment(document_, formfillinfo);
169 FPDF_SetFormFieldHighlightColor(form_handle_, 0, 0xFFE4DD);
170 FPDF_SetFormFieldHighlightAlpha(form_handle_, 100);
171
172 return true;
173 } 199 }
174 200
175 void EmbedderTest::DoOpenActions() { 201 void EmbedderTest::DoOpenActions() {
176 FORM_DoDocumentJSAction(form_handle_); 202 FORM_DoDocumentJSAction(form_handle_);
177 FORM_DoDocumentOpenAction(form_handle_); 203 FORM_DoDocumentOpenAction(form_handle_);
178 } 204 }
179 205
180 int EmbedderTest::GetFirstPageNum() { 206 int EmbedderTest::GetFirstPageNum() {
181 int first_page = FPDFAvail_GetFirstPageNum(document_); 207 int first_page = FPDFAvail_GetFirstPageNum(document_);
182 (void)FPDFAvail_IsPageAvail(avail_, first_page, &hints_); 208 (void)FPDFAvail_IsPageAvail(avail_, first_page, &hints_);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 } 308 }
283 309
284 // Can't use gtest-provided main since we need to stash the path to the 310 // Can't use gtest-provided main since we need to stash the path to the
285 // executable in order to find the external V8 binary data files. 311 // executable in order to find the external V8 binary data files.
286 int main(int argc, char** argv) { 312 int main(int argc, char** argv) {
287 g_exe_path_ = argv[0]; 313 g_exe_path_ = argv[0];
288 testing::InitGoogleTest(&argc, argv); 314 testing::InitGoogleTest(&argc, argv);
289 testing::InitGoogleMock(&argc, argv); 315 testing::InitGoogleMock(&argc, argv);
290 return RUN_ALL_TESTS(); 316 return RUN_ALL_TESTS();
291 } 317 }
OLDNEW
« fpdfsdk/src/fpdfsave_embeddertest.cpp ('K') | « testing/embedder_test.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698