# 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_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
zh_file_structure.pdf mac * * skia
zh_function_list.pdf mac * * skia
zh_page.pdf mac * * skia
zh_webdav.pdf mac * * skia
