# Copyright 2016 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 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
#
# 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
#
12.pdf mac * * agg
1_1_textbox.pdf * * * *
1_2_typewriter.pdf * * * *
1_3_callout.pdf * * * *
1_matrix.pdf mac * * agg
1m_diff_lsjdf.pdf mac * * agg
1m_same_xxxx.pdf mac * * agg
2_11_stamp3.pdf mac * * agg
2_6_textbox.pdf * * * *
2_color_calrgb.pdf mac * * agg
2_color_indexed.pdf mac * * agg
3_4_textbox.pdf * * * *
3_interpolate_image.pdf mac * * agg
3bigpreview.pdf mac * * agg
4_35.pdf mac * * agg
4_39.pdf mac * * agg
5.1.pdf mac * * agg
5.2.pdf * * * *
5.5_simple_font.pdf mac * * agg
8.2_name_dest_f_dest.pdf mac * * agg
8.2_outline.pdf mac * * agg
8.3_presentation.pdf mac * * agg
FRC_10_8.2.2__T8.3_original_file.pdf * * * *
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 * * * *
FRC_3.5_P__3616_Password_1.pdf * * * *
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 * * agg
action_hide_show_form.pdf mac * * agg
action_on_focus.pdf mac * * agg
action_open_a_file.pdf mac * * agg
action_pdf_save_close.pdf mac * * agg
action_reset.pdf mac * * agg
action_run_javascript.pdf mac * * agg
action_submit_a_form.pdf mac * * agg
all_trigger_alert.pdf * * * *
all_trigger_mailmsg.pdf * * * *
all_trigger_print.pdf * * * *
all_trigger_run_js_lunchurl.pdf mac * * agg
all_trigger_run_js_maildoc.pdf mac * * agg
annotation_highlight_author_content.pdf mac * * agg
annotation_highlight_long_content.pdf mac * * agg
annotation_highlight_no_author.pdf mac * * agg
app_launchurl.pdf mac * * agg
appstoredescription3.1_en_updated.pdf mac * * agg
bookmark.pdf * * * *
bookmarkgetcolor.pdf mac * * agg
bug_0_length_line.pdf mac * * agg

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

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

# TODO(pdfium:489): Remove after associated bug is fixed.
gradient_many_stops.pdf * * * agg

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

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

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

# 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 * * * *
Test_CheckBox.pdf * * * *

#
# 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:1972): Remove after associated bug is fixed
bug_1972_1.in * * * agg
bug_1972_2.in * * * agg
bug_1972_3.in * * * agg

# TODO(pdfium:1973): Remove after associated bug is fixed
bug_1973.in * * * *

# TODO(pdfium:2001): Remove after associated bug is fixed
bug_2001.pdf * * * *

# 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

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

# TODO(pdfium:1747): Remove after associated bug is fixed
jpxdecode.in * * * *
jpxdecode_without_bitspercomponent.in * * * *
jpxdecode_without_colorspace.in * * * *
jpxdecode_without_smaskindata.in * * * *

# 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:1095): Remove after associated bug is fixed
xfa_example.in win * * *
# TODO(pdfium:1095): Remove after associated bug is fixed
xfa_textfield.in win * * *
