# This file can be used to specify test cases that should not run when all
# test cases are run by runtests.pl. Just add the plain test case numbers, one
# per line.
# Lines starting with '#' letters are treated as comments.
#
# Uses SRP to "a server not supporting it" but modern stunnel versions
# will silently accept it and remain happy
323
#
594
836
882
938
# test 1182 kills the test servers as a side effect
# of running runtests.pl as a child of itself sharing
# some of the directories.
1182
1209
1211
# fnmatch differences are just too common to make testing them sensible
1307
1316
# test 1510 causes problems on the CI on github
# example: https://travis-ci.org/curl/curl/builds/81633600
1510
1512
# test 1801 causes problems on Mac OS X and github
# https://github.com/curl/curl/issues/380
1801
#
#
# Tests that are disabled here for Hyper are SUPPOSED to work but
# still need adjustments in tests or code. Tests that cannot be
# fixed for hyper should be adjusted for it in the test file.
#
# hyper support remains EXPERIMENTAL as long as there's a test number
# listed below
%if hyper
154
155
158
206
207
209
213
217
246
262
265
266
281
287
319
326
357
358
359
547
551
552
555
559
565
579
580
581
587
661
670
671
672
673
718
1001
1002
1008
1021
1033
1051
1060
1061
1070
1071
1074
1077
1078
1115
1122
1123
1124
1125
1129
1130
1131
1137
1138
1144
1156
1160
1164
1170
1171
1176
1266
1267
1280
1287
1288
1294
1416
1417
1428
1429
1430
1431
1432
1455
1456
1525
1526
1527
1528
1533
1540
1554
1556
1591
1700
1701
1702
1800
2002
2003
2058
2059
2060
%endif
