# Copyright 2023 The PDFium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# List of tests to use fuzzy instead of exact matching, one per line.
# There are at least five space-separated columns per line.
#
# Columns 0-4 are predicates (matching conditions):
# Column 0: test file name
# Column 1: platform: *, win, mac, mac_arm, mac_x86, linux
# Column 2: v8 support: *, nov8, v8
# Column 3: xfa support: *, noxfa, xfa
# Column 4: rendering support: *, agg, gdi, skia
#
# Column 5 is the optional value (diff parameters):
# Column 5 (optional): *, or <delta>,<mse>,<win_mse>
#                      (e.g. 3,0.05,15.0; defaults apply if omitted or *)
#
# All predicate columns on a line must match, but filenames may be
# repeated on subsequent lines to match more cases. Within predicate
# columns (except column 0), a comma-separated list of values may be
# provided, where any one of the values matching satisfies the predicate for
# that column.
# The filenames and keywords are case-sensitive.
# One exception is column 1, where "mac" is a shorthand that matches either
# "mac_arm" or "mac_x86".
#
# Try to keep the file alphabetized within each category of test.

#
# Pixel tests
#

# Sensitive to transparency code changes.
bug_1258968.in * * * skia

# TODO(crbug.com/459586268): Remove these entries once macOS support for Intel
# hardware goes away. Then rebase the test expectations as needed.
bug_1383708.in mac * * skia
dynamic_password_field_background_fill.pdf mac * * skia
image_transformer_other.in mac * * skia
radial_shading_point_at_border.in mac * * skia
radial_shading_point_at_border_no_extend.in mac * * skia
shade.in mac * * skia
xfa_textfield.in mac * * skia

#
# Corpus tests
#

# Sensitive to transparency code changes.
1_10_watermark.pdf * * * skia

# Device-specific ColorBurn differences (see pdfium:1959).
xfermodes.pdf * * * skia
xfermodes2.pdf * * * skia
xfermodes3.pdf * * * skia

# TODO(crbug.com/459586268): Remove these entries once macOS support for Intel
# hardware goes away. Then rebase the test expectations as needed.
1.pdf mac * * skia
123.pdf mac * * skia
1_image.pdf mac * * skia
2_11_stamp3.pdf mac * * skia
2_9_stamp2.pdf mac * * skia
2_halftone.pdf mac * * skia
3_image_imagemask.pdf mac * * skia
3_interpolate_image.pdf mac * * skia
3bigpreview.pdf mac * * skia
4_3.pdf mac * * skia
4_36.pdf mac * * skia
FRC_11_8.2.4_View_edit.pdf mac * * skia
FRC_12_8.2.4_View_remove_all.pdf mac * * skia
FRC_13_8.2.4_View_remove_value.pdf mac * * skia
FRC_14_8.2.4_Sort_remove_all.pdf mac * * skia
FRC_15_8.2.4_Sort_remove_value.pdf mac * * skia
FRC_1_8.2.4_Type_8.6_.pdf mac * * skia
FRC_2_8.2.4_Type_8.6__remove_value.pdf mac * * skia
FRC_3.5_AuthEvent_EFOpen.pdf mac * * skia
FRC_3.5_CFM_AESV2__EncryptMetadata_F.pdf mac * * skia
FRC_3.5_CF_EFF_StdCF_Strf_Stmf_Identity.pdf mac * * skia
FRC_3.5_CF_Strf_stmf_StdCF.pdf mac * * skia
FRC_3.5_EncryptMetadata_None.pdf mac * * skia
FRC_3.5_V_4_CFM_V2_.pdf mac * * skia
FRC_3.5_V_5_CFM_AESV3.pdf mac * * skia
FRC_3.5_v_1_length_40_Filter_standard.pdf mac * * skia
FRC_3.5_v_2_length_128_AuthEvent_DocOpen_.pdf mac * * skia
FRC_3_8.2.4_Type_8.6__edit_.pdf mac * * skia
FRC_4.5.5_Pattern_shading.pdf mac * * skia
FRC_4_8.2.4_Schema_8.6__remove_all.pdf mac * * skia
FRC_5_8.2.4_Schema_8.6__remove_value.pdf mac * * skia
FRC_6_8.2.4_Schema_8.6__remove_obj.pdf mac * * skia
FRC_7_8.2.4_View_H.pdf mac * * skia
FRC_8.4.1_Annotations_Border.pdf mac * * skia
FRC_8.5_Screen_Img_D_Launch.pdf mac * * skia
FRC_8.5_URI_IsMap.pdf mac * * skia
FRC_8_8.2.4_View_D.pdf mac * * skia
FRC_9_8.2.4_View_T.pdf mac * * skia
action_execute_a_menu_item.pdf mac * * skia
action_hide_show_form.pdf mac * * skia
action_reset.pdf mac * * skia
all_trigger_browsefordoc.pdf mac * * skia
all_trigger_newdoc.pdf mac * * skia
all_trigger_run_js_lunchurl.pdf mac * * skia
all_trigger_run_js_maildoc.pdf mac * * skia
annotation_circle.pdf mac * * skia
annotation_circle_dash.pdf mac * * skia
annotation_circle_fill_opacity.pdf mac * * skia
annotation_ellipse.pdf mac * * skia
annotation_ellipse_fill.pdf mac * * skia
annotation_ellipse_fill_dash.pdf mac * * skia
annotation_freetext.pdf mac * * skia
annotation_highlight_author_content.pdf mac * * skia
annotation_highlight_long_content.pdf mac * * skia
annotation_highlight_no_author.pdf mac * * skia
annotation_ink.pdf mac * * skia
annotation_ink_dash.pdf mac * * skia
annotation_ink_dot.pdf mac * * skia
annotation_ink_multiple.pdf mac * * skia
annotation_square.pdf mac * * skia
annotation_square_dash.pdf mac * * skia
annotation_square_fill_opacity.pdf mac * * skia
annotation_square_fill_opacity_dash.pdf mac * * skia
annotation_squiggly.pdf mac * * skia
annotation_squiggly_opacity.pdf mac * * skia
annotation_strikeout.pdf mac * * skia
annotation_strikeout_opacity.pdf mac * * skia
annotation_text.pdf mac * * skia
bi.pdf mac * * skia
bug_691967.pdf mac * * skia
ch_9_android.pdf mac * * skia
colorspace.pdf mac * * skia
colorspace_test1.pdf mac * * skia
en_fqa2.pdf mac * * skia
en_system.pdf mac * * skia
en_tem.pdf mac * * skia
en_uicase_.pdf mac * * skia
en_uicase_2_.pdf mac * * skia
example_001.pdf mac * * skia
example_006.pdf mac * * skia
example_009.pdf mac * * skia
example_010.pdf mac * * skia
example_018.pdf mac * * skia
example_025.pdf mac * * skia
example_026.pdf mac * * skia
example_034.pdf mac * * skia
example_039.pdf mac * * skia
example_040.pdf mac * * skia
example_051.pdf mac * * skia
example_057.pdf mac * * skia
example_058.pdf mac * * skia
example_060.pdf mac * * skia
example_062.pdf mac * * skia
example_063.pdf mac * * skia
example_064.pdf mac * * skia
form_button0.pdf mac * * skia
form_button1.pdf mac * * skia
form_button10.pdf mac * * skia
form_button2.pdf mac * * skia
form_button3.pdf mac * * skia
form_button4.pdf mac * * skia
form_button5.pdf mac * * skia
form_button7.pdf mac * * skia
form_button8.pdf mac * * skia
form_button9.pdf mac * * skia
image_8bit_devicergb_dctdecode.pdf mac * * skia
image_bmp.pdf mac * * skia
image_foxit.pdf mac * * skia
image_gif.pdf mac * * skia
image_jpg.pdf mac * * skia
image_png.pdf mac * * skia
image_tif.pdf mac * * skia
new_stamp3.pdf mac * * skia
new_textmarkup2.pdf mac * * skia
new_textmarkup8.pdf mac * * skia
path_5_pattern.pdf mac * * skia
path_9.pdf mac_x86 * * skia
quick_start_guide.pdf mac * * skia
shading_2_15.pdf mac * * skia
shading_2_17.pdf mac * * skia
shading_2_4.pdf mac * * skia
shading_2_7.pdf mac * * skia
shading_2_8.pdf mac * * skia
shading_2_9.pdf mac * * skia
whats_new_in_v3.0.pdf mac * * skia
xfa_node_caption.pdf mac * * skia
zh_file_structure.pdf mac * * skia
zh_function_list.pdf mac * * skia
zh_page.pdf mac * * skia
zh_webdav.pdf mac * * skia
