# Copyright 2016 The PDFium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# List of tests to be skipped, one per line.
# There are four 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, linux
# Column 2: v8 support: *, nov8, v8
# Column 3: xfa support: *, noxfa, xfa
# Column 4: rendering support: *, agg, skia, skiapaths
#
# All columns on a line 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 colum to "match".
# The filenames and keywords are case-sensitive.
#
# Try to keep the file alphabetized within each category of test.

#
# Corpus tests
#
# TODO(pdfium:1811): Remove after associated bug is fixed
11.pdf * * * skia

12.pdf mac * * *
1_1_textbox.pdf * * * *
1_2_typewriter.pdf * * * *
1_3_callout.pdf * * * *

# TODO(pdfium:1805): Remove after associated bug is fixed
1_matrix.pdf * * * skia,skiapaths

1_matrix.pdf mac * * *
1m_diff_lsjdf.pdf mac * * *
1m_same_xxxx.pdf mac * * *
2_11_stamp3.pdf mac * * *
2_6_textbox.pdf * * * *
2_color_calrgb.pdf mac * * *
2_color_indexed.pdf mac * * *

# TODO(pdfium:1867): Remove after associated bug is fixed
2_color_tiling.pdf * * * skia

# TODO(pdfium:1860): Remove after associated bug is fixed
2_halftone.pdf * * * skia

3_4_textbox.pdf * * * *

3_interpolate_image.pdf mac * * *
3bigpreview.pdf mac * * *

4_35.pdf mac * * *

# TODO(pdfium:1859): Remove after associated bug is fixed
4_36.pdf * * * skia

4_39.pdf mac * * *
5.1.pdf mac * * *
5.2.pdf * * * *
5.5_simple_font.pdf mac * * *
8.2_name_dest_f_dest.pdf mac * * *
8.2_outline.pdf mac * * *
8.3_presentation.pdf mac * * *
FRC_10_8.2.2__T8.3_original_file.pdf * * * *

# TODO(pdfium:1858): Remove after associated bug is fixed
FRC_10_8.2.4_View_C.pdf * * * skia

FRC_11_8.2.2__T8.3_first_last_exchange.pdf * * * *

FRC_12_8.2.2__T8.3_first_outline_obj_ID.pdf * * * *
FRC_13_8.2.2__T8.3_Count_edit300.pdf * * * *
FRC_14_8.2.2__T8.3_Count_edit0.pdf * * * *
FRC_15_8.2.2__T8.3_Count_edit1.pdf * * * *
FRC_16_8.2.2__T8.3_Count_edit_1.pdf * * * *
FRC_1_8.2.2__T8.3_First_empty.pdf * * * *
FRC_2_8.2.2__T8.3_Last_empty.pdf * * * *

# TODO(pdfium:1856): Remove after associated bug is fixed
FRC_3.5_AuthEvent_EFOpen.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
FRC_3.5_CF_EFF_StdCF_Strf_Stmf_Identity.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
FRC_3.5_CF_Strf_stmf_StdCF.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
FRC_3.5_CFM_AESV2__EncryptMetadata_F.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
FRC_3.5_EncryptMetadata_None.pdf * * * skia

FRC_3.5_P__3616_Password_1.pdf * * * *

# TODO(pdfium:1856): Remove after associated bug is fixed
FRC_3.5_V_4_CFM_V2_.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
FRC_3.5_V_5_CFM_AESV3.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
FRC_3.5_v_1_length_40_Filter_standard.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
FRC_3.5_v_2_length_128_AuthEvent_DocOpen_.pdf * * * skia

FRC_3_8.2.2_Type_empty.pdf * * * *
FRC_4_8.2.2__T8.3_Count_empty.pdf * * * *
FRC_5_8.2.2__T8.3_First_remove.pdf * * * *
FRC_6_8.2.2__T8.3_Last_remove.pdf * * * *
FRC_7_8.2.2_Type_remove.pdf * * * *
FRC_8.4.1_Annotations_M.pdf * * * *
FRC_8.4.1_Annotations_NM.pdf * * * *
FRC_8.5_Page_C_SubmitForm.pdf * * * *
FRC_8.5_Page_PI_ResetForm_Phantom.pdf * * * *

FRC_8.5_Widget_F.pdf * nov8 * *
FRC_8_8.2.2__T8.3_Count_remove.pdf * * * *
FRC_9_8.2.2__T8.3_remove_first_item.pdf * * * *
action.pdf * * * *
action_execute_a_menu_item.pdf mac * * *
action_hide_show_form.pdf mac * * *
action_on_focus.pdf mac * * *
action_open_a_file.pdf mac * * *
action_pdf_save_close.pdf mac * * *
action_reset.pdf mac * * *
action_run_javascript.pdf mac * * *
action_submit_a_form.pdf mac * * *
all_trigger_alert.pdf * * * *
all_trigger_mailmsg.pdf * * * *
all_trigger_print.pdf * * * *
all_trigger_run_js_lunchurl.pdf mac * * *
all_trigger_run_js_maildoc.pdf mac * * *

annotation_highlight_author_content.pdf mac * * *
annotation_highlight_long_content.pdf mac * * *
annotation_highlight_no_author.pdf mac * * *

# TODO(pdfium:1871): Remove after associated bug is fixed
annotation_square_dash.pdf * * * skia,skiapaths

app_launchurl.pdf mac * * *
appstoredescription3.1_en_updated.pdf mac * * *

bookmark.pdf * * * *
bookmarkgetcolor.pdf mac * * *
bug_0_length_line.pdf mac * * *

# TODO(pdfium:1812): Remove after associated bug is fixed
bug_0_length_line.pdf * * * skia,skiapaths

bug_0_width_line.pdf mac * * *
bug_440132.pdf mac * * *

# TODO(pdfium:1818): Remove after associated bug is fixed
bug_691967.pdf * * * skia

# TODO(pdfium:1869): Remove after associated bug is fixed
bug_880920.pdf * * * skia

bug_white_space.pdf mac * * *
calcorderindex_test.pdf * * * *
calculate_average.pdf mac * * *
calculate_order.pdf * * * *
calculate_sum_a_b_c.pdf mac * * *
calculate_validate.pdf mac * * *
calculate_validate.pdf * nov8 * *
ch_1.pdf * * * *

# TODO(pdfium:1819): Remove after associated bug is fixed
ch_7_0.pdf * * * skia

# TODO(pdfium:1819): Remove after associated bug is fixed
ch_7_1.pdf * * * skia

# TODO(pdfium:1819): Remove after associated bug is fixed
ch_7_4.pdf * * * skia

# TODO(pdfium:1819): Remove after associated bug is fixed
ch_7_5.pdf * * * skia

# TODO(pdfium:1819): Remove after associated bug is fixed
ch_7_6.pdf * * * skia

# TODO(pdfium:1819): Remove after associated bug is fixed
ch_7_7.pdf * * * skia

# TODO(pdfium:1819): Remove after associated bug is fixed
ch_7_8.pdf * * * skia

check_box.pdf * * * *
color.pdf mac * * *
colorspace.pdf mac * * *
colorspace_test1.pdf mac * * *
combo_box.pdf * * * *
combo_box_format.pdf mac * * *
date.pdf mac * * *
edit_transform.pdf mac * * *
en_contact.pdf mac * * *
en_diy.pdf mac * * *
en_foxit.pdf mac * * *
en_fqa2.pdf mac * * *
en_introduce.pdf mac * * *
en_tem.pdf mac * * *
en_uicase_.pdf mac * * *
event.change.pdf mac * * *
event.changeex.pdf mac * * *
event.keydown.pdf mac * * *
event.keydown_1_.pdf mac * * *
event.type_name.pdf mac * * *
event.value.pdf mac * * *
event_change.pdf mac * * *
example_001.pdf mac * * *
example_002.pdf mac * * *
example_003.pdf mac * * *
example_004.pdf mac * * *
example_005.pdf mac * * *
example_006.pdf mac * * *
example_007.pdf mac * * *
example_008.pdf mac * * *
example_009.pdf mac * * *
example_010.pdf mac * * *
example_011.pdf mac * * *
example_012.pdf mac * * *
example_013.pdf mac * * *
example_014.pdf mac * * *
example_015.pdf mac * * *
example_016.pdf mac * * *
example_017.pdf mac * * *
example_018.pdf mac * * *
example_019.pdf mac * * *
example_020.pdf mac * * *
example_021.pdf mac * * *
example_022.pdf mac * * *
example_023.pdf mac * * *
example_024.pdf mac * * *
example_025.pdf mac * * *
example_026.pdf mac * * *
example_027.pdf mac * * *
example_028.pdf mac * * *
example_029.pdf mac * * *
example_030.pdf mac * * *
example_031.pdf mac * * *
example_032.pdf mac * * *
example_033.pdf mac * * *
example_034.pdf mac * * *
example_035.pdf mac * * *
example_036.pdf mac * * *
example_037.pdf mac * * *
example_038.pdf mac * * *
example_039.pdf mac * * *
example_040.pdf mac * * *
example_041.pdf mac * * *
example_042.pdf mac * * *
example_043.pdf mac * * *
example_044.pdf mac * * *
example_045.pdf mac * * *
example_046.pdf mac * * *
example_047.pdf mac * * *
example_048.pdf mac * * *
example_049.pdf mac * * *
example_050.pdf mac * * *
example_051.pdf mac * * *
example_052.pdf mac * * *
example_053.pdf mac * * *
example_054.pdf mac * * *
example_055.pdf mac * * *
example_056.pdf mac * * *
example_057.pdf mac * * *
example_058.pdf mac * * *
example_059.pdf mac * * *
example_060.pdf mac * * *
example_061.pdf mac * * *
example_062.pdf mac * * *
example_063.pdf mac * * *
example_064.pdf mac * * *
example_065.pdf mac * * *
fillform.pdf * * * *
form_action_trigger.pdf * * * *
form_button_sign_url.pdf * * * *
form_combo_sign_url.pdf * * * *
form_combobox0.pdf * * * *
form_combobox_actioin_goto.pdf * * * *
form_combobox_date.pdf mac * * *
form_combobox_date.pdf * nov8 * *
form_combobox_date1.pdf * * * *
form_combobox_date2.pdf mac * * *
form_combobox_date2.pdf * nov8 * *
form_combobox_importform.pdf * * * *
form_combobox_num.pdf mac * * *
form_combobox_num.pdf * nov8 * *
form_combobox_per.pdf mac * * *
form_combobox_per.pdf * nov8 * *
form_combobox_plus.pdf mac * * *
form_combobox_plus.pdf * nov8 * *
form_combobox_product.pdf mac * * *
form_combobox_product.pdf * nov8 * *
form_combobox_resetform.pdf * * * *
form_combobox_time.pdf mac * * *
form_combobox_time.pdf * nov8 * *
form_list.pdf * * * *
form_list1.pdf * * * *
form_same.pdf mac * * *
form_text_sign_url.pdf * * * *
format_combo_box.pdf mac * * *
format_combo_box.pdf * nov8 * *
format_custom_format.pdf linux,mac * * *
format_custom_format.pdf * nov8 * *
format_custom_keystroke.pdf * * * *
format_date.pdf * nov8 * *
format_number.pdf mac * * *
format_percentage.pdf mac * * *
format_special.pdf * nov8 * *
format_text_color.pdf mac * * *
formfeild.pdf * * * *
getarray.pdf mac * * *

# TODO(pdfium:1856): Remove after associated bug is fixed
image_bmp.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
image_gif.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
image_ico.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
image_jpg.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
image_png.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
image_tif.pdf * * * skia

javascriptaction.pdf * * * *
jetman_std.pdf mac * * *
jetman_std_fixed.pdf mac * * *
js_calculate.pdf * * * *
list_box.pdf * * * *

negative.pdf mac * * *
new_certify1.pdf mac * * *

# TODO(pdfium:1863): Remove after associated bug is fixed
new_pdfsign1.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
new_pdfsign2.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
new_pdfsign3.pdf * * * skia

# TODO(pdfium:1856): Remove after associated bug is fixed
new_pdfsign4.pdf * * * skia

new_signature1.pdf mac * * *
new_signature2.pdf mac * * *
new_stamp4.pdf mac * * *
new_stamp5.pdf mac * * *
new_textmarkup1.pdf mac * * *
new_textmarkup1_hidden.pdf mac * * *
new_textmarkup2.pdf mac * * *
new_textmarkup2_hidden.pdf mac * * *
new_textmarkup4.pdf mac * * *
new_textmarkup4_hidden.pdf mac * * *
new_textmarkup5.pdf mac * * *
new_textmarkup5_hidden.pdf mac * * *
new_textmarkup6.pdf mac * * *
new_textmarkup7.pdf mac * * *
new_textmarkup7_hidden.pdf mac * * *
new_textmarkup8.pdf mac * * *
new_textmarkup8_hidden.pdf mac * * *
number.pdf * * * *
octest.pdf mac * * *
open_a_weblink.pdf mac * * *
path_10_jd.pdf mac * * *
path_5_pattern.pdf mac * * *
path_6_graphics4.5.5.pdf mac * * *
path_7.pdf mac * * *
path_9.pdf mac * * *
percentage.pdf mac * * *
push_button.pdf * * * *
quick_start_guide.pdf mac * * *
radio_button.pdf * * * *
run_custom_validate_script.pdf * * * *
show_1.pdf mac * * *
signature.pdf * * * *
signature_4.pdf * * * *
simplified_field_notation.pdf mac * * *
special.pdf mac * * *
submit_form.pdf mac * * *
test_app_beep.pdf * * * *
test_control.pdf * * * *
text_field.pdf * * * *
text_field_font_input_decimal_point.pdf mac * * *
text_field_multiline_line_spacing.pdf mac * * *
thread_action.pdf mac * * *
time.pdf mac * * *
transformation.pdf mac * * *
transparent.pdf mac * * *

whats_new_in_v3.0.pdf mac * * *
widget_javascript.pdf mac * * *

# TODO(pdfium:1804): Remove after associated bug is fixed
xfermodes.pdf * * * skia

# TODO(pdfium:1804): Remove after associated bug is fixed
xfermodes2.pdf * * * skia

# TODO(pdfium:1804): Remove after associated bug is fixed
# TODO(pdfium:1845): Remove after associated bug is fixed
xfermodes3.pdf * * * skia,skiapaths

zh_file1.pdf mac * * *
zh_function_list.pdf mac * * *
zh_shared_document.pdf mac * * *

# TODO(hnakashima): These might never have been run. Go over them and fix.

FRC_8.5_E&X.pdf * * * *
FRC_8.5_O&PO_GoToE.pdf * * * *
FRC_8.5_OpenAction&O_URI.pdf * * * *
FRC_8.5_PC&C_GoToE_T_T.pdf * * * *
FRC_8.5_PC_GoToE_T_R&P&A.pdf * * * *
FRC_8.5_PO_GoToE_T_R&N.pdf * * * *

# xfa_specific

Choose.pdf * * * *
data_binding.pdf * * * *
# TODO(npm): Add proper evt for MouseEvents.
MouseEvents_enter.pdf * * * *
MouseEvents_exit.pdf * * * *
Oneof3.pdf * * * *
Sum.pdf * * * *
TimeField.pdf win,linux * * *
Test_CheckBox.pdf * * * *
Test_DateField_locale_zh_HK.pdf mac,win * * *

#
# JavaScript tests
#
bug_679642.in * * noxfa *
bug_679643.in * * noxfa *
bug_735912.in * * noxfa *

# JS tests in nov8 mode expect empty results. This one will
# not be empty as the callback is not js-based.
named_action.in * nov8 * *

# xfa_specific

# TODO(pdfium:1106): Remove after associated bug is fixed
resolve_nodes_1.pdf * * * *

#
# Pixel tests
#

# TODO(pdfium:1747): Remove after associated bug is fixed
bug_1258634.in * * * skia

# TODO(pdfium:1331): Remove after associated bug is fixed
bug_1331.in * * * *

# TODO(chromium:1356149): Remove after associated bug is fixed
bug_1356149.in mac * * agg

# TODO(pdfium:1457): Remove after associated bug is fixed
bug_1457.in * * * *

# TODO(pdfium:1519): Remove after associated bug is fixed
bug_1519.in * * * *

# TODO(pdfium:1571): Remove after associated bug is fixed
bug_1571.in * * * *

# TODO(pdfium:1723): Remove after associated bug is fixed
bug_1723.in * * * *

# TODO(pdfium:1846): Remove after associated bug is fixed
bug_1846.in * * * agg

# TODO(chromium:237527): Remove after associated bug is fixed
bug_237527_1.in * * * *

# TODO(chromium:451366): Remove after associated bug is fixed
bug_451366.in * * * agg

# TODO(pdfium:492): Remove after associated bug is fixed
bug_492.in * nov8 * *

# TODO(chromium:725555, skia:9265): Remove after associated bug is fixed
bug_725555.in * * * skia,skiapaths

# TODO(pdfium:983289): Remove after associated bug is fixed
bug_983289.in * * * agg

# TODO(pdfium:1310): Remove after associated bug is fixed
radial_shading_point_at_border.in * * * skia,skiapaths

# TODO(chromium:1028991): Remove after associated bug is fixed
reset_button.in * * * *

# xfa_specific

# TODO(pdfium:1095): Remove after associated bug is fixed
bug_997412.in win * * *
# TODO(pdfium:1107): Remove after associated bug is fixed
standard_symbols.pdf * * * *
# TODO(pdfium:1902): Remove after associated bug is fixed
xfa_bmp_image.in * * * skia,skiapaths
# TODO(pdfium:1095): Remove after associated bug is fixed
xfa_example.in win * * *
# TODO(pdfium:1095): Remove after associated bug is fixed
xfa_textfield.in win * * *
