diff options
author | Ryan Harrison <rharrison@chromium.org> | 2018-05-31 19:26:52 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-05-31 19:26:52 +0000 |
commit | 1118a66bfe024e137324075ac4d9433b9425e373 (patch) | |
tree | 54b52b97df28789dd22c1619ef96d67d8ac0d77f | |
parent | 9bff799490de4ac9da53d708f547d106f28d5c72 (diff) | |
download | pdfium-1118a66bfe024e137324075ac4d9433b9425e373.tar.xz |
Make XFA pixel tests more stablechromium/3447
When generating PDFs using the fixup script and a .in, specify them to
to use Ahem.ttf as the text font. Ahem is a font designed to reduce
flakiness in pixel tests due to font rendering differences between
platforms. Specifically the glyphs in the font are standard size black
boxes, so though the specific text content cannot be easily compared,
things like layout and high level changes to the content can still
be tested. Testing things like specific text changes should be done
via an embedder test, where the strings in the elements can be
extracted and inspected.
The font itself is is CID type 2 font, which is relatively complex to
correctly embed in a PDF due to subsetting and other features. Instead
of embedding it in the generated PDFs, which was originally attempted,
it is being supplied to pdfium_test via the --font-dir flag. This flag
overrides where the binary looks for system fonts. This works
correctly on Mac and Linux, but not on Windows, which is why that
platform remains suppressed.
BUG=pdfium:1008,pdfium:1020
Change-Id: I00811536de98f736fc599d96b397194ccf8db0cd
Reviewed-on: https://pdfium-review.googlesource.com/27790
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
15 files changed, 48 insertions, 15 deletions
diff --git a/fpdfsdk/cfx_systemhandler.cpp b/fpdfsdk/cfx_systemhandler.cpp index 62d7c735b0..99aff8c6f8 100644 --- a/fpdfsdk/cfx_systemhandler.cpp +++ b/fpdfsdk/cfx_systemhandler.cpp @@ -83,8 +83,7 @@ bool CFX_SystemHandler::FindNativeTrueTypeFont(ByteString sFontFaceName) { if (!pFontMapper) return false; - if (pFontMapper->m_InstalledTTFonts.empty()) - pFontMapper->LoadInstalledFonts(); + pFontMapper->LoadInstalledFonts(); for (const auto& font : pFontMapper->m_InstalledTTFonts) { if (font.Compare(sFontFaceName.AsStringView())) diff --git a/testing/SUPPRESSIONS b/testing/SUPPRESSIONS index 7633e04a48..cb6b9bfbe3 100644 --- a/testing/SUPPRESSIONS +++ b/testing/SUPPRESSIONS @@ -330,6 +330,8 @@ dynamic_list_box_allow_multiple_selection.pdf * * * dynamic_password_field_background_fill.pdf * * * resolve_nodes.pdf * * * standard_symbols.pdf * * * -xfa_example.in * * * +# TODO(rharrison): Remove after pdfium:1095 is fixed +xfa_example.in win * * xfa_node_caption.pdf * * * -xfa_textfield.in * * * +# TODO(rharrison): Remove after pdfium:1095 is fixed +xfa_textfield.in win * * diff --git a/testing/resources/fonts/Ahem.ttf b/testing/resources/fonts/Ahem.ttf Binary files differnew file mode 100644 index 0000000000..4d4785a412 --- /dev/null +++ b/testing/resources/fonts/Ahem.ttf diff --git a/testing/resources/pixel/xfa_specific/xfa_example.in b/testing/resources/pixel/xfa_specific/use_ahem/xfa_example.in index d8be96f305..0e9ac151d5 100644 --- a/testing/resources/pixel/xfa_specific/xfa_example.in +++ b/testing/resources/pixel/xfa_specific/use_ahem/xfa_example.in @@ -1,6 +1,5 @@ {{header}} -%% Original object ID: 24 0 {{object 1 0}} << /AcroForm 2 0 R @@ -15,7 +14,6 @@ >> endobj -%% Original object ID: 32 0 {{object 2 0}} << /XFA [ @@ -51,6 +49,7 @@ stream </pageSet> <subform w="576pt" h="756pt" name="Page1"> <draw name="HelloWorld" y="0.5in" x="0.5in" w="5in" h="2in"> + <font typeface="Ahem" size="20pt"/> <value> <text>Hello, world.</text> </value> diff --git a/testing/resources/pixel/xfa_specific/xfa_example_expected_mac.pdf.0.png b/testing/resources/pixel/xfa_specific/use_ahem/xfa_example_expected.pdf.0.png Binary files differindex 9a682f7186..e1e62cce18 100644 --- a/testing/resources/pixel/xfa_specific/xfa_example_expected_mac.pdf.0.png +++ b/testing/resources/pixel/xfa_specific/use_ahem/xfa_example_expected.pdf.0.png diff --git a/testing/resources/pixel/xfa_specific/xfa_textfield.evt b/testing/resources/pixel/xfa_specific/use_ahem/xfa_textfield.evt index 3d110568ec..1279468006 100644 --- a/testing/resources/pixel/xfa_specific/xfa_textfield.evt +++ b/testing/resources/pixel/xfa_specific/use_ahem/xfa_textfield.evt @@ -1,4 +1,3 @@ -mousemove,20,20 mousedown,left,20,20 charcode,72 charcode,101 @@ -6,3 +5,4 @@ charcode,108 charcode,108 charcode,111 charcode,33 +mousedown,left,20,60 diff --git a/testing/resources/pixel/xfa_specific/xfa_textfield.in b/testing/resources/pixel/xfa_specific/use_ahem/xfa_textfield.in index bdd685009f..218dbcec96 100644 --- a/testing/resources/pixel/xfa_specific/xfa_textfield.in +++ b/testing/resources/pixel/xfa_specific/use_ahem/xfa_textfield.in @@ -50,12 +50,30 @@ stream </pageArea> </pageSet> <subform w="576pt" h="756pt" name="Page1"> - <field name="TextField1" y="0pt" x="0pt" w="425pt" h="20pt"> + <field name="TextField1" y="0pt" x="0pt" w="200pt" h="32pt"> + <font typeface="Ahem" size="20pt"/> <ui> - <textEdit> - <font typeface="Helvetica" size="16pt"/> - </textEdit> + <textEdit/> </ui> + <para vAlign="middle"/> + </field> + <field name="Button1" y="42pt" x="0pt" w="100pt" h="32pt"> + <ui> + <button highlight="inverted"/> + </ui> + <font typeface="Ahem" size="20pt"/> + <caption> + <value> + <text>Dummy</text> + </value> + <para vAlign="middle" hAlign="center"/> + </caption> + <border hand="right"> + <edge stroke="raised"/> + <fill> + <color value="212,208,200"/> + </fill> + </border> </field> </subform> </subform> diff --git a/testing/resources/pixel/xfa_specific/xfa_textfield_expected_mac.pdf.0.png b/testing/resources/pixel/xfa_specific/use_ahem/xfa_textfield_expected.pdf.0.png Binary files differindex c4d4ce5a22..4d9a934c11 100644 --- a/testing/resources/pixel/xfa_specific/xfa_textfield_expected_mac.pdf.0.png +++ b/testing/resources/pixel/xfa_specific/use_ahem/xfa_textfield_expected.pdf.0.png diff --git a/testing/resources/pixel/xfa_specific/xfa_example_expected.pdf.0.png b/testing/resources/pixel/xfa_specific/xfa_example_expected.pdf.0.png Binary files differdeleted file mode 100644 index 81c317a1e7..0000000000 --- a/testing/resources/pixel/xfa_specific/xfa_example_expected.pdf.0.png +++ /dev/null diff --git a/testing/resources/pixel/xfa_specific/xfa_example_expected_win.pdf.0.png b/testing/resources/pixel/xfa_specific/xfa_example_expected_win.pdf.0.png Binary files differdeleted file mode 100644 index 9a682f7186..0000000000 --- a/testing/resources/pixel/xfa_specific/xfa_example_expected_win.pdf.0.png +++ /dev/null diff --git a/testing/resources/pixel/xfa_specific/xfa_textfield_expected.pdf.0.png b/testing/resources/pixel/xfa_specific/xfa_textfield_expected.pdf.0.png Binary files differdeleted file mode 100644 index e5ad5012cd..0000000000 --- a/testing/resources/pixel/xfa_specific/xfa_textfield_expected.pdf.0.png +++ /dev/null diff --git a/testing/resources/pixel/xfa_specific/xfa_textfield_expected_win.pdf.0.png b/testing/resources/pixel/xfa_specific/xfa_textfield_expected_win.pdf.0.png Binary files differdeleted file mode 100644 index c4d4ce5a22..0000000000 --- a/testing/resources/pixel/xfa_specific/xfa_textfield_expected_win.pdf.0.png +++ /dev/null diff --git a/testing/tools/fixup_pdf_template.py b/testing/tools/fixup_pdf_template.py index bee7a3d002..0f536785c1 100755 --- a/testing/tools/fixup_pdf_template.py +++ b/testing/tools/fixup_pdf_template.py @@ -30,11 +30,15 @@ import os import re import sys +SCRIPT_PATH = os.path.abspath(os.path.dirname(__file__)) + + class StreamLenState: START = 1 FIND_STREAM = 2 FIND_ENDSTREAM = 3 + class TemplateProcessor: HEADER_TOKEN = '{{header}}' HEADER_REPLACEMENT = '%PDF-1.7\n%\xa0\xf2\xa4\xf4' @@ -45,7 +49,7 @@ class TemplateProcessor: XREF_REPLACEMENT_N = '%010d %05d n \n' XREF_REPLACEMENT_F = '0000000000 65535 f \n' # XREF rows must be exactly 20 bytes - space required. - assert(len(XREF_REPLACEMENT_F) == 20) + assert len(XREF_REPLACEMENT_F) == 20 TRAILER_TOKEN = '{{trailer}}' TRAILER_REPLACEMENT = 'trailer <<\n /Root 1 0 R\n /Size %d\n>>' @@ -230,7 +234,7 @@ class TemplateProcessor: def preprocess_line(self, line): if self.STREAMLEN_TOKEN in line: - assert(self.streamlen_state == StreamLenState.START) + assert self.streamlen_state == StreamLenState.START self.streamlen_state = StreamLenState.FIND_STREAM self.streamlens.append(0) return diff --git a/testing/tools/test_runner.py b/testing/tools/test_runner.py index 3fa1c79e04..3737969fb2 100644 --- a/testing/tools/test_runner.py +++ b/testing/tools/test_runner.py @@ -51,6 +51,8 @@ class TestRunner: # tests and outputfiles is a list tuples: # (path_to_image, md5_hash_of_pixelbuffer) def GenerateAndTest(self, input_filename, source_dir): + use_ahem = 'use_ahem' in source_dir + input_root, _ = os.path.splitext(input_filename) expected_txt_path = os.path.join(source_dir, input_root + '_expected.txt') @@ -76,7 +78,7 @@ class TestRunner: if os.path.exists(expected_txt_path): raised_exception = self.TestText(input_root, expected_txt_path, pdf_path) else: - raised_exception, results = self.TestPixel(input_root, pdf_path) + raised_exception, results = self.TestPixel(input_root, pdf_path, use_ahem) if raised_exception is not None: print 'FAILURE: %s; %s' % (input_filename, raised_exception) @@ -136,10 +138,15 @@ class TestRunner: cmd = [sys.executable, self.text_diff_path, expected_txt_path, txt_path] return common.RunCommand(cmd) - def TestPixel(self, input_root, pdf_path): + def TestPixel(self, input_root, pdf_path, use_ahem): cmd_to_run = [self.pdfium_test_path, '--send-events', '--png', '--md5'] + if self.oneshot_renderer: cmd_to_run.append('--render-oneshot') + + if use_ahem: + cmd_to_run.append('--font-dir=%s' % self.font_dir) + cmd_to_run.append(pdf_path) return common.RunCommandExtractHashedFiles(cmd_to_run) @@ -219,6 +226,7 @@ class TestRunner: finder = common.DirectoryFinder(self.options.build_dir) self.fixup_path = finder.ScriptPath('fixup_pdf_template.py') self.text_diff_path = finder.ScriptPath('text_diff.py') + self.font_dir = os.path.join(finder.TestingDir(), 'resources', 'fonts') self.source_dir = finder.TestingDir() if self.test_dir != 'corpus': diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp index 354db0be43..abd5aa716a 100644 --- a/xfa/fgas/font/cfgas_fontmgr.cpp +++ b/xfa/fgas/font/cfgas_fontmgr.cpp @@ -478,6 +478,8 @@ bool CFGAS_FontMgr::EnumFontsFromFontMapper() { if (!pFontMapper) return false; + pFontMapper->LoadInstalledFonts(); + SystemFontInfoIface* pSystemFontInfo = pFontMapper->GetSystemFontInfo(); if (!pSystemFontInfo) return false; @@ -493,6 +495,7 @@ bool CFGAS_FontMgr::EnumFontsFromFontMapper() { WideString::FromLocal(pFontMapper->GetFaceName(i).c_str()); RegisterFaces(pFontStream, &wsFaceName); } + return !m_InstalledFonts.empty(); } |