calc: on editing invalidation of view with different zoom is wrong
[LibreOffice.git] / vcl / qa / cppunit / PDFiumLibraryTest.cxx
blobc933273bc147eeb8c34792618632bba0127d35e2
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
10 #include <string_view>
12 #include <cppunit/TestAssert.h>
13 #include <cppunit/extensions/HelperMacros.h>
15 #include <unotest/bootstrapfixturebase.hxx>
16 #include <unotest/directories.hxx>
17 #include <unotools/datetime.hxx>
19 #include <com/sun/star/util/DateTime.hpp>
21 #include <vcl/graph.hxx>
22 #include <vcl/graphicfilter.hxx>
23 #include <tools/stream.hxx>
25 #include <vcl/filter/PDFiumLibrary.hxx>
26 #include <vcl/pdfread.hxx>
27 #include <vcl/BitmapReadAccess.hxx>
29 class PDFiumLibraryTest : public test::BootstrapFixtureBase
31 OUString getFullUrl(std::u16string_view sFileName)
33 return m_directories.getURLFromSrc(u"/vcl/qa/cppunit/data/") + sFileName;
36 void testDocument();
37 void testPages();
38 void testPageObjects();
39 void testAnnotationsMadeInEvince();
40 void testAnnotationsMadeInAcrobat();
41 void testAnnotationsDifferentTypes();
42 void testTools();
43 void testFormFields();
45 CPPUNIT_TEST_SUITE(PDFiumLibraryTest);
46 CPPUNIT_TEST(testDocument);
47 CPPUNIT_TEST(testPages);
48 CPPUNIT_TEST(testPageObjects);
49 CPPUNIT_TEST(testAnnotationsMadeInEvince);
50 CPPUNIT_TEST(testAnnotationsMadeInAcrobat);
51 CPPUNIT_TEST(testAnnotationsDifferentTypes);
52 CPPUNIT_TEST(testTools);
53 CPPUNIT_TEST(testFormFields);
54 CPPUNIT_TEST_SUITE_END();
57 void PDFiumLibraryTest::testDocument()
59 OUString aURL = getFullUrl(u"Pangram.pdf");
60 SvFileStream aStream(aURL, StreamMode::READ);
61 GraphicFilter& rGraphicFilter = GraphicFilter::GetGraphicFilter();
62 Graphic aGraphic = rGraphicFilter.ImportUnloadedGraphic(aStream);
63 aGraphic.makeAvailable();
65 auto pVectorGraphicData = aGraphic.getVectorGraphicData();
66 CPPUNIT_ASSERT(pVectorGraphicData);
67 CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType());
69 auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer();
71 auto pPdfium = vcl::pdf::PDFiumLibrary::get();
72 CPPUNIT_ASSERT(pPdfium);
73 auto pDocument
74 = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize(), OString());
75 CPPUNIT_ASSERT(pDocument);
77 CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount());
79 auto aSize = pDocument->getPageSize(0);
80 CPPUNIT_ASSERT_EQUAL(612.0, aSize.getWidth());
81 CPPUNIT_ASSERT_EQUAL(792.0, aSize.getHeight());
84 void PDFiumLibraryTest::testPages()
86 OUString aURL = getFullUrl(u"Pangram.pdf");
87 SvFileStream aStream(aURL, StreamMode::READ);
88 GraphicFilter& rGraphicFilter = GraphicFilter::GetGraphicFilter();
89 Graphic aGraphic = rGraphicFilter.ImportUnloadedGraphic(aStream);
90 aGraphic.makeAvailable();
92 auto pVectorGraphicData = aGraphic.getVectorGraphicData();
93 CPPUNIT_ASSERT(pVectorGraphicData);
94 CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType());
96 auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer();
98 auto pPdfium = vcl::pdf::PDFiumLibrary::get();
99 auto pDocument
100 = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize(), OString());
101 CPPUNIT_ASSERT(pDocument);
103 CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount());
105 auto pPage = pDocument->openPage(0);
106 CPPUNIT_ASSERT(pPage);
109 void PDFiumLibraryTest::testPageObjects()
111 OUString aURL = getFullUrl(u"Pangram.pdf");
112 SvFileStream aStream(aURL, StreamMode::READ);
113 GraphicFilter& rGraphicFilter = GraphicFilter::GetGraphicFilter();
114 Graphic aGraphic = rGraphicFilter.ImportUnloadedGraphic(aStream);
115 aGraphic.makeAvailable();
117 auto pVectorGraphicData = aGraphic.getVectorGraphicData();
118 CPPUNIT_ASSERT(pVectorGraphicData);
119 CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType());
121 auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer();
123 auto pPdfium = vcl::pdf::PDFiumLibrary::get();
124 auto pDocument
125 = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize(), OString());
126 CPPUNIT_ASSERT(pDocument);
128 CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount());
130 auto pPage = pDocument->openPage(0);
131 CPPUNIT_ASSERT(pPage);
133 CPPUNIT_ASSERT_EQUAL(12, pPage->getObjectCount());
135 auto pPageObject = pPage->getObject(0);
136 auto pTextPage = pPage->getTextPage();
138 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFPageObjectType::Text, pPageObject->getType());
140 CPPUNIT_ASSERT_EQUAL(OUString("The quick, brown fox jumps over a lazy dog. DJs flock by when "
141 "MTV ax quiz prog. Junk MTV quiz "),
142 pPageObject->getText(pTextPage));
144 CPPUNIT_ASSERT_EQUAL(12.0, pPageObject->getFontSize());
145 CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), pPageObject->getFontName());
146 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFTextRenderMode::Fill, pPageObject->getTextRenderMode());
147 CPPUNIT_ASSERT_EQUAL(COL_BLACK, pPageObject->getFillColor());
148 CPPUNIT_ASSERT_EQUAL(COL_BLACK, pPageObject->getStrokeColor());
150 basegfx::B2DHomMatrix aMatrix = pPageObject->getMatrix();
151 // Ignore translation, ensure there is no rotate/scale.
152 aMatrix.set(0, 2, 0);
153 aMatrix.set(1, 2, 0);
154 CPPUNIT_ASSERT_EQUAL(true, aMatrix.isIdentity());
156 CPPUNIT_ASSERT_DOUBLES_EQUAL(057.01, pPageObject->getBounds().getMinX(), 1E-2);
157 CPPUNIT_ASSERT_DOUBLES_EQUAL(721.51, pPageObject->getBounds().getMinY(), 1E-2);
158 CPPUNIT_ASSERT_DOUBLES_EQUAL(539.48, pPageObject->getBounds().getMaxX(), 1E-2);
159 CPPUNIT_ASSERT_DOUBLES_EQUAL(732.54, pPageObject->getBounds().getMaxY(), 1E-2);
162 void PDFiumLibraryTest::testAnnotationsMadeInEvince()
164 OUString aURL = getFullUrl(u"PangramWithAnnotations.pdf");
165 SvFileStream aStream(aURL, StreamMode::READ);
166 GraphicFilter& rGraphicFilter = GraphicFilter::GetGraphicFilter();
167 Graphic aGraphic = rGraphicFilter.ImportUnloadedGraphic(aStream);
168 aGraphic.makeAvailable();
170 auto pVectorGraphicData = aGraphic.getVectorGraphicData();
171 CPPUNIT_ASSERT(pVectorGraphicData);
172 CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType());
174 auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer();
176 auto pPdfium = vcl::pdf::PDFiumLibrary::get();
177 auto pDocument
178 = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize(), OString());
179 CPPUNIT_ASSERT(pDocument);
181 CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount());
183 auto pPage = pDocument->openPage(0);
184 CPPUNIT_ASSERT(pPage);
186 CPPUNIT_ASSERT_EQUAL(2, pPage->getAnnotationCount());
189 auto pAnnotation = pPage->getAnnotation(0);
190 CPPUNIT_ASSERT(pAnnotation);
191 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Text, pAnnotation->getSubType());
193 OUString aPopupString = pAnnotation->getString(vcl::pdf::constDictionaryKeyTitle);
194 CPPUNIT_ASSERT_EQUAL(OUString("quikee"), aPopupString);
196 OUString aContentsString = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
197 CPPUNIT_ASSERT_EQUAL(OUString("Annotation test"), aContentsString);
199 CPPUNIT_ASSERT_EQUAL(true, pAnnotation->hasKey(vcl::pdf::constDictionaryKeyPopup));
200 auto pPopupAnnotation = pAnnotation->getLinked(vcl::pdf::constDictionaryKeyPopup);
201 CPPUNIT_ASSERT(pPopupAnnotation);
203 CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationIndex(pPopupAnnotation));
204 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pPopupAnnotation->getSubType());
206 OUString sDateTimeString
207 = pAnnotation->getString(vcl::pdf::constDictionaryKeyModificationDate);
208 CPPUNIT_ASSERT_EQUAL(OUString("D:20200612201322+02'00"), sDateTimeString);
212 auto pAnnotation = pPage->getAnnotation(1);
213 CPPUNIT_ASSERT(pAnnotation);
214 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pAnnotation->getSubType());
218 void PDFiumLibraryTest::testAnnotationsMadeInAcrobat()
220 OUString aURL = getFullUrl(u"PangramAcrobatAnnotations.pdf");
221 SvFileStream aStream(aURL, StreamMode::READ);
222 GraphicFilter& rGraphicFilter = GraphicFilter::GetGraphicFilter();
223 Graphic aGraphic = rGraphicFilter.ImportUnloadedGraphic(aStream);
224 aGraphic.makeAvailable();
226 auto pVectorGraphicData = aGraphic.getVectorGraphicData();
227 CPPUNIT_ASSERT(pVectorGraphicData);
228 CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType());
230 auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer();
232 auto pPdfium = vcl::pdf::PDFiumLibrary::get();
233 auto pDocument
234 = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize(), OString());
235 CPPUNIT_ASSERT(pDocument);
237 CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount());
239 auto pPage = pDocument->openPage(0);
240 CPPUNIT_ASSERT(pPage);
242 CPPUNIT_ASSERT_EQUAL(4, pPage->getAnnotationCount());
245 auto pAnnotation = pPage->getAnnotation(0);
246 CPPUNIT_ASSERT(pAnnotation);
247 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Text, pAnnotation->getSubType());
249 OUString aPopupString = pAnnotation->getString(vcl::pdf::constDictionaryKeyTitle);
250 CPPUNIT_ASSERT_EQUAL(OUString("quikee"), aPopupString);
252 OUString aContentsString = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
253 CPPUNIT_ASSERT_EQUAL(OUString("YEEEY"), aContentsString);
255 CPPUNIT_ASSERT_EQUAL(true, pAnnotation->hasKey(vcl::pdf::constDictionaryKeyPopup));
256 auto pPopupAnnotation = pAnnotation->getLinked(vcl::pdf::constDictionaryKeyPopup);
257 CPPUNIT_ASSERT(pPopupAnnotation);
259 CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationIndex(pPopupAnnotation));
260 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pPopupAnnotation->getSubType());
264 auto pAnnotation = pPage->getAnnotation(1);
265 CPPUNIT_ASSERT(pAnnotation);
266 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pAnnotation->getSubType());
270 auto pAnnotation = pPage->getAnnotation(2);
271 CPPUNIT_ASSERT(pAnnotation);
272 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Text, pAnnotation->getSubType());
274 OUString aPopupString = pAnnotation->getString(vcl::pdf::constDictionaryKeyTitle);
275 CPPUNIT_ASSERT_EQUAL(OUString("quikee"), aPopupString);
277 OUString aContentsString = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
278 CPPUNIT_ASSERT_EQUAL(OUString("Note"), aContentsString);
280 CPPUNIT_ASSERT_EQUAL(true, pAnnotation->hasKey(vcl::pdf::constDictionaryKeyPopup));
281 auto pPopupAnnotation = pAnnotation->getLinked(vcl::pdf::constDictionaryKeyPopup);
282 CPPUNIT_ASSERT(pPopupAnnotation);
284 CPPUNIT_ASSERT_EQUAL(3, pPage->getAnnotationIndex(pPopupAnnotation));
285 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pPopupAnnotation->getSubType());
289 auto pAnnotation = pPage->getAnnotation(3);
290 CPPUNIT_ASSERT(pAnnotation);
291 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Popup, pAnnotation->getSubType());
295 void PDFiumLibraryTest::testFormFields()
297 // Given a document with a form field that looks like plain text:
298 OUString aURL = getFullUrl(u"form-fields.pdf");
299 SvFileStream aFileStream(aURL, StreamMode::READ);
300 SvMemoryStream aMemory;
301 aMemory.WriteStream(aFileStream);
302 aMemory.Seek(0);
304 // When rendering its first (and only) page to a bitmap:
305 std::vector<BitmapEx> aBitmaps;
306 int nRet = vcl::RenderPDFBitmaps(aMemory.GetData(), aMemory.GetSize(), aBitmaps);
307 CPPUNIT_ASSERT(nRet);
308 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aBitmaps.size());
310 // Then make sure the bitmap contains that text:
311 Bitmap aBitmap = aBitmaps[0].GetBitmap();
312 BitmapReadAccess aAccess(aBitmap);
313 Size aSize = aBitmap.GetSizePixel();
314 std::set<sal_uInt32> aColors;
315 for (tools::Long y = 0; y < aSize.Height(); ++y)
317 for (tools::Long x = 0; x < aSize.Width(); ++x)
319 aColors.insert(static_cast<sal_uInt32>(aAccess.GetPixel(y, x)));
322 // Without the accompanying fix in place, this test would have failed with:
323 // - Expected greater than: 1
324 // - Actual : 1
325 // i.e. at least black text and white background is expected (possibly more, due to
326 // anti-aliasing), but nothing was rendered.
327 CPPUNIT_ASSERT_GREATER(static_cast<size_t>(1), aColors.size());
330 void PDFiumLibraryTest::testAnnotationsDifferentTypes()
332 OUString aURL = getFullUrl(u"PangramWithMultipleTypeOfAnnotations.pdf");
333 SvFileStream aStream(aURL, StreamMode::READ);
334 GraphicFilter& rGraphicFilter = GraphicFilter::GetGraphicFilter();
335 Graphic aGraphic = rGraphicFilter.ImportUnloadedGraphic(aStream);
336 aGraphic.makeAvailable();
338 auto pVectorGraphicData = aGraphic.getVectorGraphicData();
339 CPPUNIT_ASSERT(pVectorGraphicData);
340 CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType());
342 auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer();
344 auto pPdfium = vcl::pdf::PDFiumLibrary::get();
345 auto pDocument
346 = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize(), OString());
347 CPPUNIT_ASSERT(pDocument);
349 CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount());
351 auto pPage = pDocument->openPage(0);
352 CPPUNIT_ASSERT(pPage);
354 CPPUNIT_ASSERT_EQUAL(6, pPage->getAnnotationCount());
357 auto pAnnotation = pPage->getAnnotation(0);
358 CPPUNIT_ASSERT(pAnnotation);
359 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::FreeText, pAnnotation->getSubType());
360 CPPUNIT_ASSERT_EQUAL(0, pAnnotation->getObjectCount());
361 OUString aContentsString = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
362 CPPUNIT_ASSERT_EQUAL(OUString("Inline Note"), aContentsString);
363 auto const& rLineGeometry = pAnnotation->getLineGeometry();
364 CPPUNIT_ASSERT_EQUAL(true, rLineGeometry.empty());
368 auto pAnnotation = pPage->getAnnotation(1);
369 CPPUNIT_ASSERT(pAnnotation);
370 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Ink, pAnnotation->getSubType());
371 CPPUNIT_ASSERT_EQUAL(0, pAnnotation->getObjectCount());
372 OUString aContentsString = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
373 CPPUNIT_ASSERT_EQUAL(OUString("Freehand Text"), aContentsString);
374 CPPUNIT_ASSERT_EQUAL(size_t(1), pAnnotation->getInkStrokes().size());
375 auto const& aInkStrokes = pAnnotation->getInkStrokes();
376 auto const& aPoints = aInkStrokes[0];
377 CPPUNIT_ASSERT_EQUAL(size_t(74), aPoints.size());
378 CPPUNIT_ASSERT_DOUBLES_EQUAL(2.0f, pAnnotation->getBorderWidth(), 1E-2);
379 auto const& rLineGeometry = pAnnotation->getLineGeometry();
380 CPPUNIT_ASSERT_EQUAL(true, rLineGeometry.empty());
384 auto pAnnotation = pPage->getAnnotation(2);
385 CPPUNIT_ASSERT(pAnnotation);
386 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Line, pAnnotation->getSubType());
387 CPPUNIT_ASSERT_EQUAL(0, pAnnotation->getObjectCount());
388 OUString aContentsString = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
389 CPPUNIT_ASSERT_EQUAL(OUString("Line Text"), aContentsString);
390 auto const& rLineGeometry = pAnnotation->getLineGeometry();
391 CPPUNIT_ASSERT_EQUAL(false, rLineGeometry.empty());
395 auto pAnnotation = pPage->getAnnotation(3);
396 CPPUNIT_ASSERT(pAnnotation);
397 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Polygon, pAnnotation->getSubType());
398 CPPUNIT_ASSERT_EQUAL(0, pAnnotation->getObjectCount());
399 CPPUNIT_ASSERT_EQUAL(true, pAnnotation->hasKey("Vertices"));
400 OUString aContentsString = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
401 CPPUNIT_ASSERT_EQUAL(OUString("Polygon Text"), aContentsString);
402 auto const& aVertices = pAnnotation->getVertices();
403 CPPUNIT_ASSERT_EQUAL(size_t(3), aVertices.size());
404 CPPUNIT_ASSERT_DOUBLES_EQUAL(2.0f, pAnnotation->getBorderWidth(), 1E-2);
405 auto const& rLineGeometry = pAnnotation->getLineGeometry();
406 CPPUNIT_ASSERT_EQUAL(true, rLineGeometry.empty());
410 auto pAnnotation = pPage->getAnnotation(4);
411 CPPUNIT_ASSERT(pAnnotation);
412 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Circle, pAnnotation->getSubType());
413 CPPUNIT_ASSERT_EQUAL(0, pAnnotation->getObjectCount());
414 OUString aContentsString = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
415 CPPUNIT_ASSERT_EQUAL(OUString("Ellipse Text"), aContentsString);
416 auto const& rLineGeometry = pAnnotation->getLineGeometry();
417 CPPUNIT_ASSERT_EQUAL(true, rLineGeometry.empty());
421 auto pAnnotation = pPage->getAnnotation(5);
422 CPPUNIT_ASSERT(pAnnotation);
423 CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Square, pAnnotation->getSubType());
424 CPPUNIT_ASSERT_EQUAL(0, pAnnotation->getObjectCount());
425 OUString aContentsString = pAnnotation->getString(vcl::pdf::constDictionaryKeyContents);
426 CPPUNIT_ASSERT_EQUAL(OUString("Rectangle Text"), aContentsString);
427 CPPUNIT_ASSERT_EQUAL(Color(0xFF, 0xE0, 0x00), pAnnotation->getColor());
428 CPPUNIT_ASSERT_EQUAL(false, pAnnotation->hasKey(vcl::pdf::constDictionaryKeyInteriorColor));
429 auto const& rLineGeometry = pAnnotation->getLineGeometry();
430 CPPUNIT_ASSERT_EQUAL(true, rLineGeometry.empty());
434 void PDFiumLibraryTest::testTools()
436 OUString sConverted = vcl::pdf::convertPdfDateToISO8601(u"D:20200612201322+02'00");
438 css::util::DateTime aDateTime;
439 CPPUNIT_ASSERT(utl::ISO8601parseDateTime(sConverted, aDateTime));
440 CPPUNIT_ASSERT_EQUAL(sal_Int16(2020), aDateTime.Year);
441 CPPUNIT_ASSERT_EQUAL(sal_uInt16(6), aDateTime.Month);
442 CPPUNIT_ASSERT_EQUAL(sal_uInt16(12), aDateTime.Day);
443 CPPUNIT_ASSERT_EQUAL(sal_uInt16(20), aDateTime.Hours);
444 CPPUNIT_ASSERT_EQUAL(sal_uInt16(13), aDateTime.Minutes);
445 CPPUNIT_ASSERT_EQUAL(sal_uInt16(22), aDateTime.Seconds);
446 CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), aDateTime.NanoSeconds);
447 CPPUNIT_ASSERT_EQUAL(false, bool(aDateTime.IsUTC));
450 CPPUNIT_TEST_SUITE_REGISTRATION(PDFiumLibraryTest);
452 CPPUNIT_PLUGIN_IMPLEMENT();
454 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */