# 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 five space-separated columns per line
# Each column (except column 0) can contain a comma-separated list of values.
#
# 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
#
# All columns on a line must match, but filenames may be repeated on subsequent
# lines to suppress more cases.  Within each column, any one of the
# comma-separated values must match in order for the column to "match".
# The filenames and keywords are case-sensitive.
# One exception is the 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
