Linux server1.dn-server.com 4.18.0-553.89.1.lve.el8.x86_64 #1 SMP Wed Dec 10 13:58:50 UTC 2025 x86_64
LiteSpeed
Server IP : 195.201.204.189 & Your IP : 216.73.217.103
Domains :
Cant Read [ /etc/named.conf ]
User : beriska1
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
opt /
alt /
python310 /
lib64 /
python3.10 /
test /
Delete
Unzip
Name
Size
Permission
Date
Action
__pycache__
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
audiodata
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
capath
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
cjkencodings
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
data
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
decimaltestdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
dtracedata
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
encoded_modules
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
imghdrdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
libregrtest
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
sndhdrdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
subprocessdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
support
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
test_asyncio
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
test_email
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
test_import
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
test_importlib
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
test_json
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
test_peg_generator
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
test_tools
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
test_warnings
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
test_zoneinfo
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
tracedmodules
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
typinganndata
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
xmltestdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
ziptestdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:08
Sine-1000Hz-300ms.aif
60.25
KB
-rw-r--r--
2026-03-03 04:19
__init__.py
47
B
-rw-r--r--
2026-03-03 04:19
__main__.py
41
B
-rw-r--r--
2026-03-03 04:19
_test_atexit.py
3.61
KB
-rw-r--r--
2026-03-03 04:19
_test_eintr.py
17.65
KB
-rw-r--r--
2026-03-03 04:19
_test_embed_set_config.py
8.55
KB
-rw-r--r--
2026-03-03 04:19
_test_multiprocessing.py
193.64
KB
-rw-r--r--
2026-03-03 04:19
_typed_dict_helper.py
494
B
-rw-r--r--
2026-03-03 04:19
allsans.pem
9.87
KB
-rw-r--r--
2026-03-03 04:19
ann_module.py
1.09
KB
-rw-r--r--
2026-03-03 04:19
ann_module2.py
519
B
-rw-r--r--
2026-03-03 04:19
ann_module3.py
448
B
-rw-r--r--
2026-03-03 04:19
ann_module4.py
81
B
-rw-r--r--
2026-03-03 04:19
ann_module5.py
202
B
-rw-r--r--
2026-03-03 04:19
ann_module6.py
138
B
-rw-r--r--
2026-03-03 04:19
ann_module7.py
295
B
-rw-r--r--
2026-03-03 04:19
audiotest.au
27.48
KB
-rw-r--r--
2026-03-03 04:19
audiotests.py
12.13
KB
-rw-r--r--
2026-03-03 04:19
audit-tests.py
11.35
KB
-rw-r--r--
2026-03-03 04:19
autotest.py
209
B
-rw-r--r--
2026-03-03 04:19
bad_coding.py
24
B
-rw-r--r--
2026-03-03 04:19
bad_coding2.py
30
B
-rw-r--r--
2026-03-03 04:19
bad_getattr.py
61
B
-rw-r--r--
2026-03-03 04:19
bad_getattr2.py
77
B
-rw-r--r--
2026-03-03 04:19
bad_getattr3.py
139
B
-rw-r--r--
2026-03-03 04:19
badcert.pem
1.88
KB
-rw-r--r--
2026-03-03 04:19
badkey.pem
2.11
KB
-rw-r--r--
2026-03-03 04:19
badsyntax_3131.py
32
B
-rw-r--r--
2026-03-03 04:19
badsyntax_future10.py
95
B
-rw-r--r--
2026-03-03 04:19
badsyntax_future3.py
172
B
-rw-r--r--
2026-03-03 04:19
badsyntax_future4.py
153
B
-rw-r--r--
2026-03-03 04:19
badsyntax_future5.py
184
B
-rw-r--r--
2026-03-03 04:19
badsyntax_future6.py
161
B
-rw-r--r--
2026-03-03 04:19
badsyntax_future7.py
196
B
-rw-r--r--
2026-03-03 04:19
badsyntax_future8.py
122
B
-rw-r--r--
2026-03-03 04:19
badsyntax_future9.py
142
B
-rw-r--r--
2026-03-03 04:19
badsyntax_pep3120.py
14
B
-rw-r--r--
2026-03-03 04:19
bisect_cmd.py
5.23
KB
-rwxr-xr-x
2026-03-03 04:19
cfgparser.1
67
B
-rw-r--r--
2026-03-03 04:19
cfgparser.2
19.02
KB
-rw-r--r--
2026-03-03 04:19
cfgparser.3
1.55
KB
-rw-r--r--
2026-03-03 04:19
clinic.test
94.05
KB
-rw-r--r--
2026-03-03 04:19
cmath_testcases.txt
141.05
KB
-rw-r--r--
2026-03-03 04:19
coding20731.py
22
B
-rw-r--r--
2026-03-03 04:19
curses_tests.py
1.23
KB
-rwxr-xr-x
2026-03-03 04:19
dataclass_module_1.py
837
B
-rw-r--r--
2026-03-03 04:19
dataclass_module_1_str.py
835
B
-rw-r--r--
2026-03-03 04:19
dataclass_module_2.py
756
B
-rw-r--r--
2026-03-03 04:19
dataclass_module_2_str.py
754
B
-rw-r--r--
2026-03-03 04:19
dataclass_textanno.py
126
B
-rw-r--r--
2026-03-03 04:19
datetimetester.py
245.16
KB
-rw-r--r--
2026-03-03 04:19
dis_module.py
76
B
-rw-r--r--
2026-03-03 04:19
doctest_aliases.py
240
B
-rw-r--r--
2026-03-03 04:19
doctest_lineno.py
914
B
-rw-r--r--
2026-03-03 04:19
double_const.py
1.18
KB
-rw-r--r--
2026-03-03 04:19
empty.vbs
70
B
-rw-r--r--
2026-03-03 04:19
exception_hierarchy.txt
1.81
KB
-rw-r--r--
2026-03-03 04:19
ffdh3072.pem
2.16
KB
-rw-r--r--
2026-03-03 04:19
final_a.py
411
B
-rw-r--r--
2026-03-03 04:19
final_b.py
411
B
-rw-r--r--
2026-03-03 04:19
floating_points.txt
15.92
KB
-rw-r--r--
2026-03-03 04:19
fork_wait.py
2.23
KB
-rw-r--r--
2026-03-03 04:19
formatfloat_testcases.txt
7.45
KB
-rw-r--r--
2026-03-03 04:19
future_test1.py
229
B
-rw-r--r--
2026-03-03 04:19
future_test2.py
149
B
-rw-r--r--
2026-03-03 04:19
gdb_sample.py
153
B
-rw-r--r--
2026-03-03 04:19
good_getattr.py
198
B
-rw-r--r--
2026-03-03 04:19
idnsans.pem
9.71
KB
-rw-r--r--
2026-03-03 04:19
ieee754.txt
3.21
KB
-rw-r--r--
2026-03-03 04:19
imp_dummy.py
63
B
-rw-r--r--
2026-03-03 04:19
inspect_fodder.py
1.88
KB
-rw-r--r--
2026-03-03 04:19
inspect_fodder2.py
3.69
KB
-rw-r--r--
2026-03-03 04:19
inspect_stock_annotations.py
509
B
-rw-r--r--
2026-03-03 04:19
inspect_stringized_annotations.py
612
B
-rw-r--r--
2026-03-03 04:19
inspect_stringized_annotations_2.py
60
B
-rw-r--r--
2026-03-03 04:19
keycert.passwd.pem
4.13
KB
-rw-r--r--
2026-03-03 04:19
keycert.pem
3.96
KB
-rw-r--r--
2026-03-03 04:19
keycert2.pem
3.98
KB
-rw-r--r--
2026-03-03 04:19
keycert3.pem
9.23
KB
-rw-r--r--
2026-03-03 04:19
keycert4.pem
9.24
KB
-rw-r--r--
2026-03-03 04:19
keycertecc.pem
5.5
KB
-rw-r--r--
2026-03-03 04:19
list_tests.py
16.91
KB
-rw-r--r--
2026-03-03 04:19
lock_tests.py
30.15
KB
-rw-r--r--
2026-03-03 04:19
mailcap.txt
1.24
KB
-rw-r--r--
2026-03-03 04:19
make_ssl_certs.py
9.25
KB
-rw-r--r--
2026-03-03 04:19
mapping_tests.py
21.83
KB
-rw-r--r--
2026-03-03 04:19
math_testcases.txt
23.19
KB
-rw-r--r--
2026-03-03 04:19
memory_watchdog.py
859
B
-rw-r--r--
2026-03-03 04:19
mime.types
47.37
KB
-rw-r--r--
2026-03-03 04:19
mock_socket.py
3.7
KB
-rw-r--r--
2026-03-03 04:19
mod_generics_cache.py
1.13
KB
-rw-r--r--
2026-03-03 04:19
mp_fork_bomb.py
448
B
-rw-r--r--
2026-03-03 04:19
mp_preload.py
351
B
-rw-r--r--
2026-03-03 04:19
multibytecodec_support.py
14.19
KB
-rw-r--r--
2026-03-03 04:19
nokia.pem
1.88
KB
-rw-r--r--
2026-03-03 04:19
nosan.pem
7.54
KB
-rw-r--r--
2026-03-03 04:19
nullbytecert.pem
5.31
KB
-rw-r--r--
2026-03-03 04:19
nullcert.pem
0
B
-rw-r--r--
2026-03-03 04:19
pickletester.py
141.12
KB
-rw-r--r--
2026-03-03 04:19
profilee.py
2.97
KB
-rw-r--r--
2026-03-03 04:19
pstats.pck
65.05
KB
-rw-r--r--
2026-03-03 04:19
pycacert.pem
5.53
KB
-rw-r--r--
2026-03-03 04:19
pycakey.pem
2.43
KB
-rw-r--r--
2026-03-03 04:19
pyclbr_input.py
648
B
-rw-r--r--
2026-03-03 04:19
pydoc_mod.py
961
B
-rw-r--r--
2026-03-03 04:19
pydocfodder.py
6.18
KB
-rw-r--r--
2026-03-03 04:19
pythoninfo.py
23.52
KB
-rw-r--r--
2026-03-03 04:19
randv2_32.pck
7.34
KB
-rw-r--r--
2026-03-03 04:19
randv2_64.pck
7.19
KB
-rw-r--r--
2026-03-03 04:19
randv3.pck
7.82
KB
-rw-r--r--
2026-03-03 04:19
re_tests.py
25.94
KB
-rwxr-xr-x
2026-03-03 04:19
recursion.tar
516
B
-rw-r--r--
2026-03-03 04:19
regrtest.py
1.28
KB
-rwxr-xr-x
2026-03-03 04:19
relimport.py
27
B
-rw-r--r--
2026-03-03 04:19
reperf.py
538
B
-rw-r--r--
2026-03-03 04:19
revocation.crl
800
B
-rw-r--r--
2026-03-03 04:19
sample_doctest.py
1.02
KB
-rw-r--r--
2026-03-03 04:19
sample_doctest_no_docstrings.py
227
B
-rw-r--r--
2026-03-03 04:19
sample_doctest_no_doctests.py
269
B
-rw-r--r--
2026-03-03 04:19
secp384r1.pem
256
B
-rw-r--r--
2026-03-03 04:19
selfsigned_pythontestdotnet.pem
2.08
KB
-rw-r--r--
2026-03-03 04:19
seq_tests.py
14.87
KB
-rw-r--r--
2026-03-03 04:19
sgml_input.html
8.1
KB
-rw-r--r--
2026-03-03 04:19
signalinterproctester.py
2.74
KB
-rw-r--r--
2026-03-03 04:19
sortperf.py
4.69
KB
-rw-r--r--
2026-03-03 04:19
ssl_cert.pem
1.53
KB
-rw-r--r--
2026-03-03 04:19
ssl_key.passwd.pem
2.59
KB
-rw-r--r--
2026-03-03 04:19
ssl_key.pem
2.43
KB
-rw-r--r--
2026-03-03 04:19
ssl_servers.py
7.11
KB
-rw-r--r--
2026-03-03 04:19
ssltests.py
1.03
KB
-rw-r--r--
2026-03-03 04:19
string_tests.py
68.03
KB
-rw-r--r--
2026-03-03 04:19
talos-2019-0758.pem
1.3
KB
-rw-r--r--
2026-03-03 04:19
test___all__.py
4.83
KB
-rw-r--r--
2026-03-03 04:19
test___future__.py
2.36
KB
-rw-r--r--
2026-03-03 04:19
test__locale.py
7.83
KB
-rw-r--r--
2026-03-03 04:19
test__opcode.py
3.05
KB
-rw-r--r--
2026-03-03 04:19
test__osx_support.py
13.64
KB
-rw-r--r--
2026-03-03 04:19
test__xxsubinterpreters.py
78.94
KB
-rw-r--r--
2026-03-03 04:19
test_abc.py
23.19
KB
-rw-r--r--
2026-03-03 04:19
test_abstract_numbers.py
1.49
KB
-rw-r--r--
2026-03-03 04:19
test_aifc.py
17.77
KB
-rw-r--r--
2026-03-03 04:19
test_argparse.py
181.08
KB
-rw-r--r--
2026-03-03 04:19
test_array.py
55.21
KB
-rw-r--r--
2026-03-03 04:19
test_asdl_parser.py
4.44
KB
-rw-r--r--
2026-03-03 04:19
test_ast.py
107.27
KB
-rw-r--r--
2026-03-03 04:19
test_asyncgen.py
46.8
KB
-rw-r--r--
2026-03-03 04:19
test_asynchat.py
9.4
KB
-rw-r--r--
2026-03-03 04:19
test_asyncore.py
26.13
KB
-rw-r--r--
2026-03-03 04:19
test_atexit.py
3.14
KB
-rw-r--r--
2026-03-03 04:19
test_audioop.py
28.24
KB
-rw-r--r--
2026-03-03 04:19
test_audit.py
6.46
KB
-rw-r--r--
2026-03-03 04:19
test_augassign.py
7.68
KB
-rw-r--r--
2026-03-03 04:19
test_base64.py
34.51
KB
-rw-r--r--
2026-03-03 04:19
test_baseexception.py
7.77
KB
-rw-r--r--
2026-03-03 04:19
test_bdb.py
43.63
KB
-rw-r--r--
2026-03-03 04:19
test_bigaddrspace.py
2.83
KB
-rw-r--r--
2026-03-03 04:19
test_bigmem.py
44.78
KB
-rw-r--r--
2026-03-03 04:19
test_binascii.py
19.27
KB
-rw-r--r--
2026-03-03 04:19
test_binhex.py
2.1
KB
-rw-r--r--
2026-03-03 04:19
test_binop.py
14.14
KB
-rw-r--r--
2026-03-03 04:19
test_bisect.py
15.71
KB
-rw-r--r--
2026-03-03 04:19
test_bool.py
12.73
KB
-rw-r--r--
2026-03-03 04:19
test_buffer.py
160.31
KB
-rw-r--r--
2026-03-03 04:19
test_bufio.py
2.58
KB
-rw-r--r--
2026-03-03 04:19
test_builtin.py
85.98
KB
-rw-r--r--
2026-03-03 04:19
test_bytes.py
76.03
KB
-rw-r--r--
2026-03-03 04:19
test_bz2.py
37.23
KB
-rw-r--r--
2026-03-03 04:19
test_c_locale_coercion.py
18.92
KB
-rw-r--r--
2026-03-03 04:19
test_calendar.py
51.02
KB
-rw-r--r--
2026-03-03 04:19
test_call.py
26.23
KB
-rw-r--r--
2026-03-03 04:19
test_cgi.py
22.26
KB
-rw-r--r--
2026-03-03 04:19
test_cgitb.py
2.54
KB
-rw-r--r--
2026-03-03 04:19
test_charmapcodec.py
1.77
KB
-rw-r--r--
2026-03-03 04:19
test_check_c_globals.py
1.02
KB
-rw-r--r--
2026-03-03 04:19
test_class.py
17.41
KB
-rw-r--r--
2026-03-03 04:19
test_clinic.py
43.03
KB
-rw-r--r--
2026-03-03 04:19
test_cmath.py
24.08
KB
-rw-r--r--
2026-03-03 04:19
test_cmd.py
6.1
KB
-rw-r--r--
2026-03-03 04:19
test_cmd_line.py
37.59
KB
-rw-r--r--
2026-03-03 04:19
test_cmd_line_script.py
33.63
KB
-rw-r--r--
2026-03-03 04:19
test_code.py
12.67
KB
-rw-r--r--
2026-03-03 04:19
test_code_module.py
5.53
KB
-rw-r--r--
2026-03-03 04:19
test_codeccallbacks.py
49.05
KB
-rw-r--r--
2026-03-03 04:19
test_codecencodings_cn.py
3.86
KB
-rw-r--r--
2026-03-03 04:19
test_codecencodings_hk.py
701
B
-rw-r--r--
2026-03-03 04:19
test_codecencodings_iso2022.py
3.65
KB
-rw-r--r--
2026-03-03 04:19
test_codecencodings_jp.py
4.79
KB
-rw-r--r--
2026-03-03 04:19
test_codecencodings_kr.py
2.96
KB
-rw-r--r--
2026-03-03 04:19
test_codecencodings_tw.py
681
B
-rw-r--r--
2026-03-03 04:19
test_codecmaps_cn.py
746
B
-rw-r--r--
2026-03-03 04:19
test_codecmaps_hk.py
386
B
-rw-r--r--
2026-03-03 04:19
test_codecmaps_jp.py
1.7
KB
-rw-r--r--
2026-03-03 04:19
test_codecmaps_kr.py
1.16
KB
-rw-r--r--
2026-03-03 04:19
test_codecmaps_tw.py
705
B
-rw-r--r--
2026-03-03 04:19
test_codecs.py
134.44
KB
-rw-r--r--
2026-03-03 04:19
test_codeop.py
9.18
KB
-rw-r--r--
2026-03-03 04:19
test_collections.py
92.15
KB
-rw-r--r--
2026-03-03 04:19
test_colorsys.py
3.83
KB
-rw-r--r--
2026-03-03 04:19
test_compare.py
3.74
KB
-rw-r--r--
2026-03-03 04:19
test_compile.py
46.33
KB
-rw-r--r--
2026-03-03 04:19
test_compileall.py
47.55
KB
-rw-r--r--
2026-03-03 04:19
test_complex.py
32.54
KB
-rw-r--r--
2026-03-03 04:19
test_concurrent_futures.py
56.63
KB
-rw-r--r--
2026-03-03 04:19
test_configparser.py
85.4
KB
-rw-r--r--
2026-03-03 04:19
test_contains.py
3.35
KB
-rw-r--r--
2026-03-03 04:19
test_context.py
30.63
KB
-rw-r--r--
2026-03-03 04:19
test_contextlib.py
36.9
KB
-rw-r--r--
2026-03-03 04:19
test_contextlib_async.py
20.67
KB
-rw-r--r--
2026-03-03 04:19
test_copy.py
26.63
KB
-rw-r--r--
2026-03-03 04:19
test_copyreg.py
4.39
KB
-rw-r--r--
2026-03-03 04:19
test_coroutines.py
63.79
KB
-rw-r--r--
2026-03-03 04:19
test_cprofile.py
6.33
KB
-rw-r--r--
2026-03-03 04:19
test_crashers.py
1.17
KB
-rw-r--r--
2026-03-03 04:19
test_crypt.py
4.14
KB
-rw-r--r--
2026-03-03 04:19
test_csv.py
52.99
KB
-rw-r--r--
2026-03-03 04:19
test_ctypes.py
199
B
-rw-r--r--
2026-03-03 04:19
test_curses.py
46.58
KB
-rw-r--r--
2026-03-03 04:19
test_dataclasses.py
126.75
KB
-rw-r--r--
2026-03-03 04:19
test_datetime.py
2.31
KB
-rw-r--r--
2026-03-03 04:19
test_dbm.py
6.11
KB
-rw-r--r--
2026-03-03 04:19
test_dbm_dumb.py
10.68
KB
-rw-r--r--
2026-03-03 04:19
test_dbm_gnu.py
6.51
KB
-rw-r--r--
2026-03-03 04:19
test_dbm_ndbm.py
5.12
KB
-rw-r--r--
2026-03-03 04:19
test_decimal.py
209.81
KB
-rw-r--r--
2026-03-03 04:19
test_decorators.py
14.42
KB
-rw-r--r--
2026-03-03 04:19
test_defaultdict.py
6.13
KB
-rw-r--r--
2026-03-03 04:19
test_deque.py
33.63
KB
-rw-r--r--
2026-03-03 04:19
test_descr.py
192.65
KB
-rw-r--r--
2026-03-03 04:19
test_descrtut.py
11.57
KB
-rw-r--r--
2026-03-03 04:19
test_devpoll.py
4.44
KB
-rw-r--r--
2026-03-03 04:19
test_dict.py
50.72
KB
-rw-r--r--
2026-03-03 04:19
test_dict_version.py
6.1
KB
-rw-r--r--
2026-03-03 04:19
test_dictcomps.py
5.15
KB
-rw-r--r--
2026-03-03 04:19
test_dictviews.py
13.69
KB
-rw-r--r--
2026-03-03 04:19
test_difflib.py
21.47
KB
-rw-r--r--
2026-03-03 04:19
test_difflib_expect.html
100.85
KB
-rw-r--r--
2026-03-03 04:19
test_dis.py
56.47
KB
-rw-r--r--
2026-03-03 04:19
test_distutils.py
587
B
-rw-r--r--
2026-03-03 04:19
test_doctest.py
101.1
KB
-rw-r--r--
2026-03-03 04:19
test_doctest.txt
300
B
-rw-r--r--
2026-03-03 04:19
test_doctest2.py
2.36
KB
-rw-r--r--
2026-03-03 04:19
test_doctest2.txt
392
B
-rw-r--r--
2026-03-03 04:19
test_doctest3.txt
82
B
-rw-r--r--
2026-03-03 04:19
test_doctest4.txt
244
B
-rw-r--r--
2026-03-03 04:19
test_docxmlrpc.py
8.67
KB
-rw-r--r--
2026-03-03 04:19
test_dtrace.py
5.14
KB
-rw-r--r--
2026-03-03 04:19
test_dynamic.py
4.29
KB
-rw-r--r--
2026-03-03 04:19
test_dynamicclassattribute.py
9.57
KB
-rw-r--r--
2026-03-03 04:19
test_eintr.py
584
B
-rw-r--r--
2026-03-03 04:19
test_embed.py
55.88
KB
-rw-r--r--
2026-03-03 04:19
test_ensurepip.py
12.2
KB
-rw-r--r--
2026-03-03 04:19
test_enum.py
121.13
KB
-rw-r--r--
2026-03-03 04:19
test_enumerate.py
8.46
KB
-rw-r--r--
2026-03-03 04:19
test_eof.py
3.02
KB
-rw-r--r--
2026-03-03 04:19
test_epoll.py
9.14
KB
-rw-r--r--
2026-03-03 04:19
test_errno.py
1.04
KB
-rw-r--r--
2026-03-03 04:19
test_exception_hierarchy.py
7.43
KB
-rw-r--r--
2026-03-03 04:19
test_exception_variations.py
3.86
KB
-rw-r--r--
2026-03-03 04:19
test_exceptions.py
90.94
KB
-rw-r--r--
2026-03-03 04:19
test_extcall.py
14.05
KB
-rw-r--r--
2026-03-03 04:19
test_faulthandler.py
30.11
KB
-rw-r--r--
2026-03-03 04:19
test_fcntl.py
7.43
KB
-rw-r--r--
2026-03-03 04:19
test_file.py
11.78
KB
-rw-r--r--
2026-03-03 04:19
test_file_eintr.py
10.61
KB
-rw-r--r--
2026-03-03 04:19
test_filecmp.py
10.33
KB
-rw-r--r--
2026-03-03 04:19
test_fileinput.py
40.18
KB
-rw-r--r--
2026-03-03 04:19
test_fileio.py
19.93
KB
-rw-r--r--
2026-03-03 04:19
test_finalization.py
14.66
KB
-rw-r--r--
2026-03-03 04:19
test_float.py
66.39
KB
-rw-r--r--
2026-03-03 04:19
test_flufl.py
1.55
KB
-rw-r--r--
2026-03-03 04:19
test_fnmatch.py
11.1
KB
-rw-r--r--
2026-03-03 04:19
test_fork1.py
3.24
KB
-rw-r--r--
2026-03-03 04:19
test_format.py
23.91
KB
-rw-r--r--
2026-03-03 04:19
test_fractions.py
29.7
KB
-rw-r--r--
2026-03-03 04:19
test_frame.py
6.22
KB
-rw-r--r--
2026-03-03 04:19
test_frozen.py
943
B
-rw-r--r--
2026-03-03 04:19
test_fstring.py
52.54
KB
-rw-r--r--
2026-03-03 04:19
test_ftplib.py
41.99
KB
-rw-r--r--
2026-03-03 04:19
test_funcattrs.py
14.86
KB
-rw-r--r--
2026-03-03 04:19
test_functools.py
102.67
KB
-rw-r--r--
2026-03-03 04:19
test_future.py
14.88
KB
-rw-r--r--
2026-03-03 04:19
test_future3.py
490
B
-rw-r--r--
2026-03-03 04:19
test_future4.py
222
B
-rw-r--r--
2026-03-03 04:19
test_future5.py
510
B
-rw-r--r--
2026-03-03 04:19
test_gc.py
45.92
KB
-rw-r--r--
2026-03-03 04:19
test_gdb.py
41.71
KB
-rw-r--r--
2026-03-03 04:19
test_generator_stop.py
943
B
-rw-r--r--
2026-03-03 04:19
test_generators.py
63.77
KB
-rw-r--r--
2026-03-03 04:19
test_genericalias.py
12.77
KB
-rw-r--r--
2026-03-03 04:19
test_genericclass.py
9.28
KB
-rw-r--r--
2026-03-03 04:19
test_genericpath.py
22.4
KB
-rw-r--r--
2026-03-03 04:19
test_genexps.py
7.63
KB
-rw-r--r--
2026-03-03 04:19
test_getopt.py
6.78
KB
-rw-r--r--
2026-03-03 04:19
test_getpass.py
6.29
KB
-rw-r--r--
2026-03-03 04:19
test_gettext.py
41.42
KB
-rw-r--r--
2026-03-03 04:19
test_glob.py
15.35
KB
-rw-r--r--
2026-03-03 04:19
test_global.py
1.38
KB
-rw-r--r--
2026-03-03 04:19
test_grammar.py
63.22
KB
-rw-r--r--
2026-03-03 04:19
test_graphlib.py
8.34
KB
-rw-r--r--
2026-03-03 04:19
test_grp.py
3.67
KB
-rw-r--r--
2026-03-03 04:19
test_gzip.py
30.63
KB
-rw-r--r--
2026-03-03 04:19
test_hash.py
11.45
KB
-rw-r--r--
2026-03-03 04:19
test_hashlib.py
44.92
KB
-rw-r--r--
2026-03-03 04:19
test_heapq.py
16.45
KB
-rw-r--r--
2026-03-03 04:19
test_hmac.py
25.41
KB
-rw-r--r--
2026-03-03 04:19
test_html.py
4.23
KB
-rw-r--r--
2026-03-03 04:19
test_htmlparser.py
45.15
KB
-rw-r--r--
2026-03-03 04:19
test_http_cookiejar.py
78.4
KB
-rw-r--r--
2026-03-03 04:19
test_http_cookies.py
21.77
KB
-rw-r--r--
2026-03-03 04:19
test_httplib.py
81.28
KB
-rw-r--r--
2026-03-03 04:19
test_httpservers.py
56.42
KB
-rw-r--r--
2026-03-03 04:19
test_idle.py
1014
B
-rw-r--r--
2026-03-03 04:19
test_imaplib.py
42.67
KB
-rw-r--r--
2026-03-03 04:19
test_imghdr.py
4.69
KB
-rw-r--r--
2026-03-03 04:19
test_imp.py
18.93
KB
-rw-r--r--
2026-03-03 04:19
test_index.py
8.37
KB
-rw-r--r--
2026-03-03 04:19
test_inspect.py
172.66
KB
-rw-r--r--
2026-03-03 04:19
test_int.py
28.32
KB
-rw-r--r--
2026-03-03 04:19
test_int_literal.py
6.89
KB
-rw-r--r--
2026-03-03 04:19
test_interpreters.py
22.48
KB
-rw-r--r--
2026-03-03 04:19
test_io.py
171.42
KB
-rw-r--r--
2026-03-03 04:19
test_ioctl.py
3.24
KB
-rw-r--r--
2026-03-03 04:19
test_ipaddress.py
125.42
KB
-rw-r--r--
2026-03-03 04:19
test_isinstance.py
12.96
KB
-rw-r--r--
2026-03-03 04:19
test_iter.py
36.76
KB
-rw-r--r--
2026-03-03 04:19
test_iterlen.py
7.1
KB
-rw-r--r--
2026-03-03 04:19
test_itertools.py
108.43
KB
-rw-r--r--
2026-03-03 04:19
test_keyword.py
1.97
KB
-rw-r--r--
2026-03-03 04:19
test_keywordonlyarg.py
6.89
KB
-rw-r--r--
2026-03-03 04:19
test_kqueue.py
8.76
KB
-rw-r--r--
2026-03-03 04:19
test_largefile.py
9.98
KB
-rw-r--r--
2026-03-03 04:19
test_lib2to3.py
318
B
-rw-r--r--
2026-03-03 04:19
test_linecache.py
9.64
KB
-rw-r--r--
2026-03-03 04:19
test_list.py
8.65
KB
-rw-r--r--
2026-03-03 04:19
test_listcomps.py
4.17
KB
-rw-r--r--
2026-03-03 04:19
test_lltrace.py
3.13
KB
-rw-r--r--
2026-03-03 04:19
test_locale.py
24.64
KB
-rw-r--r--
2026-03-03 04:19
test_logging.py
196.58
KB
-rw-r--r--
2026-03-03 04:19
test_long.py
54.55
KB
-rw-r--r--
2026-03-03 04:19
test_longexp.py
233
B
-rw-r--r--
2026-03-03 04:19
test_lzma.py
88.18
KB
-rw-r--r--
2026-03-03 04:19
test_mailbox.py
91.79
KB
-rw-r--r--
2026-03-03 04:19
test_mailcap.py
10.16
KB
-rw-r--r--
2026-03-03 04:19
test_marshal.py
20.46
KB
-rw-r--r--
2026-03-03 04:19
test_math.py
90.7
KB
-rw-r--r--
2026-03-03 04:19
test_memoryio.py
31.48
KB
-rw-r--r--
2026-03-03 04:19
test_memoryview.py
21.37
KB
-rw-r--r--
2026-03-03 04:19
test_metaclass.py
6.21
KB
-rw-r--r--
2026-03-03 04:19
test_mimetypes.py
13.85
KB
-rw-r--r--
2026-03-03 04:19
test_minidom.py
69.84
KB
-rw-r--r--
2026-04-17 14:49
test_mmap.py
31.06
KB
-rw-r--r--
2026-03-03 04:19
test_module.py
12.37
KB
-rw-r--r--
2026-03-03 04:19
test_modulefinder.py
12.2
KB
-rw-r--r--
2026-03-03 04:19
test_msilib.py
5.41
KB
-rw-r--r--
2026-03-03 04:19
test_multibytecodec.py
15.76
KB
-rw-r--r--
2026-03-03 04:19
test_multiprocessing_fork.py
477
B
-rw-r--r--
2026-03-03 04:19
test_multiprocessing_forkserver.py
392
B
-rw-r--r--
2026-03-03 04:19
test_multiprocessing_main_handling.py
11.57
KB
-rw-r--r--
2026-03-03 04:19
test_multiprocessing_spawn.py
277
B
-rw-r--r--
2026-03-03 04:19
test_named_expressions.py
20.62
KB
-rw-r--r--
2026-03-03 04:19
test_netrc.py
6.01
KB
-rw-r--r--
2026-03-03 04:19
test_nis.py
1.17
KB
-rw-r--r--
2026-03-03 04:19
test_nntplib.py
62.68
KB
-rw-r--r--
2026-03-03 04:19
test_ntpath.py
45.67
KB
-rw-r--r--
2026-03-03 04:19
test_numeric_tower.py
8
KB
-rw-r--r--
2026-03-03 04:19
test_opcache.py
529
B
-rw-r--r--
2026-03-03 04:19
test_opcodes.py
3.59
KB
-rw-r--r--
2026-03-03 04:19
test_openpty.py
600
B
-rw-r--r--
2026-03-03 04:19
test_operator.py
24.05
KB
-rw-r--r--
2026-03-03 04:19
test_optparse.py
61.02
KB
-rw-r--r--
2026-03-03 04:19
test_ordered_dict.py
31.61
KB
-rw-r--r--
2026-03-03 04:19
test_os.py
168.42
KB
-rw-r--r--
2026-03-03 04:19
test_ossaudiodev.py
7.07
KB
-rw-r--r--
2026-03-03 04:19
test_osx_env.py
1.31
KB
-rw-r--r--
2026-03-03 04:19
test_pathlib.py
109.86
KB
-rw-r--r--
2026-03-03 04:19
test_patma.py
84.78
KB
-rw-r--r--
2026-03-03 04:19
test_pdb.py
68.89
KB
-rw-r--r--
2026-03-03 04:19
test_peepholer.py
19.77
KB
-rw-r--r--
2026-03-03 04:19
test_pickle.py
19.71
KB
-rw-r--r--
2026-03-03 04:19
test_picklebuffer.py
4.99
KB
-rw-r--r--
2026-03-03 04:19
test_pickletools.py
4.13
KB
-rw-r--r--
2026-03-03 04:19
test_pipes.py
6.71
KB
-rw-r--r--
2026-03-03 04:19
test_pkg.py
9.59
KB
-rw-r--r--
2026-03-03 04:19
test_pkgutil.py
21.21
KB
-rw-r--r--
2026-03-03 04:19
test_platform.py
19.98
KB
-rw-r--r--
2026-03-03 04:19
test_plistlib.py
40.1
KB
-rw-r--r--
2026-03-03 04:19
test_poll.py
7.27
KB
-rw-r--r--
2026-03-03 04:19
test_popen.py
2.08
KB
-rw-r--r--
2026-03-03 04:19
test_poplib.py
17.54
KB
-rw-r--r--
2026-03-03 04:19
test_positional_only_arg.py
17.77
KB
-rw-r--r--
2026-03-03 04:19
test_posix.py
87.32
KB
-rw-r--r--
2026-03-03 04:19
test_posixpath.py
41.68
KB
-rw-r--r--
2026-03-03 04:19
test_pow.py
5.43
KB
-rw-r--r--
2026-03-03 04:19
test_pprint.py
50.31
KB
-rw-r--r--
2026-03-03 04:19
test_print.py
7.72
KB
-rw-r--r--
2026-03-03 04:19
test_profile.py
8.69
KB
-rw-r--r--
2026-03-03 04:19
test_property.py
11.35
KB
-rw-r--r--
2026-03-03 04:19
test_pstats.py
3.31
KB
-rw-r--r--
2026-03-03 04:19
test_pty.py
16.84
KB
-rw-r--r--
2026-03-03 04:19
test_pulldom.py
12.66
KB
-rw-r--r--
2026-03-03 04:19
test_pwd.py
4.29
KB
-rw-r--r--
2026-03-03 04:19
test_py_compile.py
11.52
KB
-rw-r--r--
2026-04-17 14:49
test_pyclbr.py
9.84
KB
-rw-r--r--
2026-03-03 04:19
test_pydoc.py
60.53
KB
-rw-r--r--
2026-03-03 04:19
test_pyexpat.py
38.31
KB
-rw-r--r--
2026-03-03 04:19
test_queue.py
20.51
KB
-rw-r--r--
2026-03-03 04:19
test_quopri.py
7.78
KB
-rw-r--r--
2026-03-03 04:19
test_raise.py
13.44
KB
-rw-r--r--
2026-03-03 04:19
test_random.py
55.18
KB
-rw-r--r--
2026-03-03 04:19
test_range.py
24.64
KB
-rw-r--r--
2026-03-03 04:19
test_re.py
112.86
KB
-rw-r--r--
2026-03-03 04:19
test_readline.py
14.24
KB
-rw-r--r--
2026-03-03 04:19
test_regrtest.py
49.5
KB
-rw-r--r--
2026-03-03 04:19
test_repl.py
3.96
KB
-rw-r--r--
2026-03-03 04:19
test_reprlib.py
15.13
KB
-rw-r--r--
2026-03-03 04:19
test_resource.py
7.04
KB
-rw-r--r--
2026-03-03 04:19
test_richcmp.py
11.91
KB
-rw-r--r--
2026-03-03 04:19
test_rlcompleter.py
7.1
KB
-rw-r--r--
2026-03-03 04:19
test_robotparser.py
10.88
KB
-rw-r--r--
2026-03-03 04:19
test_runpy.py
33.86
KB
-rw-r--r--
2026-03-03 04:19
test_sax.py
54.63
KB
-rw-r--r--
2026-03-03 04:19
test_sched.py
7.28
KB
-rw-r--r--
2026-03-03 04:19
test_scope.py
19.83
KB
-rw-r--r--
2026-03-03 04:19
test_script_helper.py
5.78
KB
-rw-r--r--
2026-03-03 04:19
test_secrets.py
4.28
KB
-rw-r--r--
2026-03-03 04:19
test_select.py
3.32
KB
-rw-r--r--
2026-03-03 04:19
test_selectors.py
18.27
KB
-rw-r--r--
2026-03-03 04:19
test_set.py
69.09
KB
-rw-r--r--
2026-03-03 04:19
test_setcomps.py
4.15
KB
-rw-r--r--
2026-03-03 04:19
test_shelve.py
6.02
KB
-rw-r--r--
2026-03-03 04:19
test_shlex.py
13.48
KB
-rw-r--r--
2026-03-03 04:19
test_shutil.py
105.72
KB
-rw-r--r--
2026-03-03 04:19
test_signal.py
48.8
KB
-rw-r--r--
2026-03-03 04:19
test_site.py
27.8
KB
-rw-r--r--
2026-03-03 04:19
test_slice.py
9.23
KB
-rw-r--r--
2026-03-03 04:19
test_smtpd.py
40.65
KB
-rw-r--r--
2026-03-03 04:19
test_smtplib.py
60.05
KB
-rw-r--r--
2026-03-03 04:19
test_smtpnet.py
2.99
KB
-rw-r--r--
2026-03-03 04:19
test_sndhdr.py
1.43
KB
-rw-r--r--
2026-03-03 04:19
test_socket.py
251.38
KB
-rw-r--r--
2026-03-03 04:19
test_socketserver.py
17.89
KB
-rw-r--r--
2026-03-03 04:19
test_sort.py
13.42
KB
-rw-r--r--
2026-03-03 04:19
test_source_encoding.py
9.03
KB
-rw-r--r--
2026-03-03 04:19
test_spwd.py
2.73
KB
-rw-r--r--
2026-03-03 04:19
test_sqlite.py
988
B
-rw-r--r--
2026-03-03 04:19
test_ssl.py
217.55
KB
-rw-r--r--
2026-03-03 04:19
test_startfile.py
1.7
KB
-rw-r--r--
2026-03-03 04:19
test_stat.py
8.58
KB
-rw-r--r--
2026-03-03 04:19
test_statistics.py
113.22
KB
-rw-r--r--
2026-03-03 04:19
test_strftime.py
7.54
KB
-rw-r--r--
2026-03-03 04:19
test_string.py
19.8
KB
-rw-r--r--
2026-03-03 04:19
test_string_literals.py
10.2
KB
-rw-r--r--
2026-03-03 04:19
test_stringprep.py
3.04
KB
-rw-r--r--
2026-03-03 04:19
test_strptime.py
34.42
KB
-rw-r--r--
2026-03-03 04:19
test_strtod.py
20.06
KB
-rw-r--r--
2026-03-03 04:19
test_struct.py
36.19
KB
-rw-r--r--
2026-03-03 04:19
test_structseq.py
4.42
KB
-rw-r--r--
2026-03-03 04:19
test_subclassinit.py
8.12
KB
-rw-r--r--
2026-03-03 04:19
test_subprocess.py
156.33
KB
-rw-r--r--
2026-03-03 04:19
test_sunau.py
5.98
KB
-rw-r--r--
2026-03-03 04:19
test_sundry.py
2.86
KB
-rw-r--r--
2026-03-03 04:19
test_super.py
9.6
KB
-rw-r--r--
2026-03-03 04:19
test_support.py
25.33
KB
-rw-r--r--
2026-03-03 04:19
test_symtable.py
9.36
KB
-rw-r--r--
2026-03-03 04:19
test_syntax.py
52.33
KB
-rw-r--r--
2026-03-03 04:19
test_sys.py
58.56
KB
-rw-r--r--
2026-03-03 04:19
test_sys_setprofile.py
13.19
KB
-rw-r--r--
2026-03-03 04:19
test_sys_settrace.py
62.72
KB
-rw-r--r--
2026-03-03 04:19
test_sysconfig.py
18.92
KB
-rw-r--r--
2026-03-03 04:19
test_syslog.py
2.71
KB
-rw-r--r--
2026-03-03 04:19
test_tabnanny.py
13.44
KB
-rw-r--r--
2026-03-03 04:19
test_tarfile.py
173.11
KB
-rw-r--r--
2026-03-03 04:19
test_tcl.py
31.54
KB
-rw-r--r--
2026-03-03 04:19
test_telnetlib.py
12.74
KB
-rw-r--r--
2026-03-03 04:19
test_tempfile.py
66.99
KB
-rw-r--r--
2026-03-03 04:19
test_textwrap.py
41.89
KB
-rw-r--r--
2026-03-03 04:19
test_thread.py
8.54
KB
-rw-r--r--
2026-03-03 04:19
test_threadedtempfile.py
1.87
KB
-rw-r--r--
2026-03-03 04:19
test_threading.py
58.38
KB
-rw-r--r--
2026-04-17 14:49
test_threading_local.py
6.66
KB
-rw-r--r--
2026-03-03 04:19
test_threadsignals.py
10.11
KB
-rw-r--r--
2026-03-03 04:19
test_time.py
39.93
KB
-rw-r--r--
2026-03-03 04:19
test_timeit.py
15.2
KB
-rw-r--r--
2026-03-03 04:19
test_timeout.py
11
KB
-rw-r--r--
2026-03-03 04:19
test_tix.py
1.05
KB
-rw-r--r--
2026-03-03 04:19
test_tk.py
546
B
-rw-r--r--
2026-03-03 04:19
test_tokenize.py
64.51
KB
-rw-r--r--
2026-03-03 04:19
test_trace.py
20.4
KB
-rw-r--r--
2026-03-03 04:19
test_traceback.py
54.55
KB
-rw-r--r--
2026-03-03 04:19
test_tracemalloc.py
39.17
KB
-rw-r--r--
2026-03-03 04:19
test_ttk_guionly.py
986
B
-rw-r--r--
2026-03-03 04:19
test_ttk_textonly.py
16.69
KB
-rw-r--r--
2026-03-03 04:19
test_tuple.py
18.85
KB
-rw-r--r--
2026-03-03 04:19
test_turtle.py
12.75
KB
-rw-r--r--
2026-03-03 04:19
test_type_annotations.py
3.7
KB
-rw-r--r--
2026-03-03 04:19
test_type_comments.py
10.54
KB
-rw-r--r--
2026-03-03 04:19
test_typechecks.py
2.55
KB
-rw-r--r--
2026-03-03 04:19
test_types.py
75.67
KB
-rw-r--r--
2026-03-03 04:19
test_typing.py
179.66
KB
-rw-r--r--
2026-03-03 04:19
test_ucn.py
9.52
KB
-rw-r--r--
2026-03-03 04:19
test_unary.py
1.63
KB
-rw-r--r--
2026-03-03 04:19
test_unicode.py
120.59
KB
-rw-r--r--
2026-03-03 04:19
test_unicode_file.py
5.71
KB
-rw-r--r--
2026-03-03 04:19
test_unicode_file_functions.py
6.74
KB
-rw-r--r--
2026-03-03 04:19
test_unicode_identifiers.py
984
B
-rw-r--r--
2026-03-03 04:19
test_unicodedata.py
16.21
KB
-rw-r--r--
2026-03-03 04:19
test_unittest.py
226
B
-rw-r--r--
2026-03-03 04:19
test_univnewlines.py
3.88
KB
-rw-r--r--
2026-03-03 04:19
test_unpack.py
3.01
KB
-rw-r--r--
2026-03-03 04:19
test_unpack_ex.py
9.91
KB
-rw-r--r--
2026-03-03 04:19
test_unparse.py
18.59
KB
-rw-r--r--
2026-03-03 04:19
test_urllib.py
70.5
KB
-rw-r--r--
2026-03-03 04:19
test_urllib2.py
78.97
KB
-rw-r--r--
2026-03-03 04:19
test_urllib2_localnet.py
25.5
KB
-rw-r--r--
2026-03-03 04:19
test_urllib2net.py
14.07
KB
-rw-r--r--
2026-03-03 04:19
test_urllib_response.py
1.89
KB
-rw-r--r--
2026-03-03 04:19
test_urllibnet.py
9.32
KB
-rw-r--r--
2026-03-03 04:19
test_urlparse.py
74.85
KB
-rw-r--r--
2026-03-03 04:19
test_userdict.py
7.56
KB
-rw-r--r--
2026-03-03 04:19
test_userlist.py
1.97
KB
-rw-r--r--
2026-03-03 04:19
test_userstring.py
2.4
KB
-rw-r--r--
2026-03-03 04:19
test_utf8_mode.py
10.29
KB
-rw-r--r--
2026-03-03 04:19
test_utf8source.py
1.15
KB
-rw-r--r--
2026-03-03 04:19
test_uu.py
8.92
KB
-rw-r--r--
2026-03-03 04:19
test_uuid.py
40
KB
-rw-r--r--
2026-03-03 04:19
test_venv.py
26.25
KB
-rw-r--r--
2026-03-03 04:19
test_wait3.py
1.81
KB
-rw-r--r--
2026-03-03 04:19
test_wait4.py
1.16
KB
-rw-r--r--
2026-03-03 04:19
test_wave.py
6.5
KB
-rw-r--r--
2026-03-03 04:19
test_weakref.py
73.74
KB
-rw-r--r--
2026-03-03 04:19
test_weakset.py
15.42
KB
-rw-r--r--
2026-03-03 04:19
test_webbrowser.py
10.6
KB
-rw-r--r--
2026-03-03 04:19
test_winconsoleio.py
6.57
KB
-rw-r--r--
2026-03-03 04:19
test_winreg.py
22.2
KB
-rw-r--r--
2026-03-03 04:19
test_winsound.py
4.61
KB
-rw-r--r--
2026-03-03 04:19
test_with.py
25.99
KB
-rw-r--r--
2026-03-03 04:19
test_wsgiref.py
31.12
KB
-rw-r--r--
2026-03-03 04:19
test_xdrlib.py
2.17
KB
-rw-r--r--
2026-03-03 04:19
test_xml_dom_minicompat.py
4.18
KB
-rw-r--r--
2026-03-03 04:19
test_xml_etree.py
160.61
KB
-rw-r--r--
2026-03-03 04:19
test_xml_etree_c.py
8.48
KB
-rw-r--r--
2026-03-03 04:19
test_xmlrpc.py
57.66
KB
-rw-r--r--
2026-03-03 04:19
test_xmlrpc_net.py
954
B
-rw-r--r--
2026-03-03 04:19
test_xxlimited.py
2.13
KB
-rw-r--r--
2026-03-03 04:19
test_xxtestfuzz.py
690
B
-rw-r--r--
2026-03-03 04:19
test_yield_from.py
30.09
KB
-rw-r--r--
2026-03-03 04:19
test_zipapp.py
15.92
KB
-rw-r--r--
2026-03-03 04:19
test_zipfile.py
137.63
KB
-rw-r--r--
2026-03-03 04:19
test_zipfile64.py
5.86
KB
-rw-r--r--
2026-03-03 04:19
test_zipimport.py
33.56
KB
-rw-r--r--
2026-03-03 04:19
test_zipimport_support.py
10.46
KB
-rw-r--r--
2026-03-03 04:19
test_zlib.py
35.06
KB
-rw-r--r--
2026-03-03 04:19
testcodec.py
1.02
KB
-rw-r--r--
2026-03-03 04:19
testtar.tar
425
KB
-rw-r--r--
2026-03-03 04:19
testtar.tar.xz
172
B
-rw-r--r--
2026-03-03 04:19
tf_inherit_check.py
714
B
-rw-r--r--
2026-03-03 04:19
time_hashlib.py
2.87
KB
-rw-r--r--
2026-03-03 04:19
tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt
443
B
-rw-r--r--
2026-03-03 04:19
tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt
302
B
-rw-r--r--
2026-03-03 04:19
tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt
421
B
-rw-r--r--
2026-03-03 04:19
tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt
326
B
-rw-r--r--
2026-03-03 04:19
tokenize_tests.txt
2.65
KB
-rw-r--r--
2026-03-03 04:19
win_console_handler.py
1.38
KB
-rw-r--r--
2026-03-03 04:19
xmltests.py
499
B
-rw-r--r--
2026-03-03 04:19
zip_cp437_header.zip
270
B
-rw-r--r--
2026-03-03 04:19
zipdir.zip
374
B
-rw-r--r--
2026-03-03 04:19
Save
Rename
"""Tests for HTMLParser.py.""" import html.parser import pprint import unittest from test import support SAMPLE_RCDATA = ( '<!-- not a comment -->' "<not a='start tag'>" '<![CDATA[not a cdata]]>' '<!not a bogus comment>' '</not a bogus comment>' '\u2603' ) SAMPLE_RAWTEXT = SAMPLE_RCDATA + '&☺' class EventCollector(html.parser.HTMLParser): def __init__(self, *args, autocdata=False, **kw): self.autocdata = autocdata self.events = [] self.append = self.events.append html.parser.HTMLParser.__init__(self, *args, **kw) if autocdata: self._set_support_cdata(False) def get_events(self): # Normalize the list of events so that buffer artefacts don't # separate runs of contiguous characters. L = [] prevtype = None for event in self.events: type = event[0] if type == prevtype == "data": L[-1] = ("data", L[-1][1] + event[1]) else: L.append(event) prevtype = type self.events = L return L # structure markup def handle_starttag(self, tag, attrs): self.append(("starttag", tag, attrs)) if self.autocdata and tag == 'svg': self._set_support_cdata(True) def handle_startendtag(self, tag, attrs): self.append(("startendtag", tag, attrs)) def handle_endtag(self, tag): self.append(("endtag", tag)) if self.autocdata and tag == 'svg': self._set_support_cdata(False) # all other markup def handle_comment(self, data): self.append(("comment", data)) def handle_charref(self, data): self.append(("charref", data)) def handle_data(self, data): self.append(("data", data)) def handle_decl(self, data): self.append(("decl", data)) def handle_entityref(self, data): self.append(("entityref", data)) def handle_pi(self, data): self.append(("pi", data)) def unknown_decl(self, decl): self.append(("unknown decl", decl)) class EventCollectorExtra(EventCollector): def handle_starttag(self, tag, attrs): EventCollector.handle_starttag(self, tag, attrs) self.append(("starttag_text", self.get_starttag_text())) class EventCollectorCharrefs(EventCollector): def handle_charref(self, data): self.fail('This should never be called with convert_charrefs=True') def handle_entityref(self, data): self.fail('This should never be called with convert_charrefs=True') # The normal event collector normalizes the events in get_events, # so we override it to return the original list of events. class EventCollectorNoNormalize(EventCollector): def get_events(self): return self.events class TestCaseBase(unittest.TestCase): def get_collector(self): return EventCollector(convert_charrefs=False) def _run_check(self, source, expected_events, collector=None): if collector is None: collector = self.get_collector() parser = collector for s in source: parser.feed(s) parser.close() events = parser.get_events() if events != expected_events: self.fail("received events did not match expected events" + "\nSource:\n" + repr(source) + "\nExpected:\n" + pprint.pformat(expected_events) + "\nReceived:\n" + pprint.pformat(events)) def _run_check_extra(self, source, events): self._run_check(source, events, EventCollectorExtra(convert_charrefs=False)) class HTMLParserTestCase(TestCaseBase): def test_processing_instruction_only(self): self._run_check("<?processing instruction>", [ ("pi", "processing instruction"), ]) self._run_check("<?processing instruction ?>", [ ("pi", "processing instruction ?"), ]) def test_simple_html(self): self._run_check(""" <!DOCTYPE html PUBLIC 'foo'> <HTML>&entity;  <!--comment1a -></foo><bar><<?pi?></foo<bar comment1b--> <Img sRc='Bar' isMAP>sample text “ <!--comment2a-- --comment2b--> </Html> """, [ ("data", "\n"), ("decl", "DOCTYPE html PUBLIC 'foo'"), ("data", "\n"), ("starttag", "html", []), ("entityref", "entity"), ("charref", "32"), ("data", "\n"), ("comment", "comment1a\n-></foo><bar><<?pi?></foo<bar\ncomment1b"), ("data", "\n"), ("starttag", "img", [("src", "Bar"), ("ismap", None)]), ("data", "sample\ntext\n"), ("charref", "x201C"), ("data", "\n"), ("comment", "comment2a-- --comment2b"), ("data", "\n"), ("endtag", "html"), ("data", "\n"), ]) def test_malformatted_charref(self): self._run_check("<p>&#bad;</p>", [ ("starttag", "p", []), ("data", "&#bad;"), ("endtag", "p"), ]) # add the [] as a workaround to avoid buffering (see #20288) self._run_check(["<div>&#bad;</div>"], [ ("starttag", "div", []), ("data", "&#bad;"), ("endtag", "div"), ]) def test_unclosed_entityref(self): self._run_check("&entityref foo", [ ("entityref", "entityref"), ("data", " foo"), ]) def test_bad_nesting(self): # Strangely, this *is* supposed to test that overlapping # elements are allowed. HTMLParser is more geared toward # lexing the input that parsing the structure. self._run_check("<a><b></a></b>", [ ("starttag", "a", []), ("starttag", "b", []), ("endtag", "a"), ("endtag", "b"), ]) def test_bare_ampersands(self): self._run_check("this text & contains & ampersands &", [ ("data", "this text & contains & ampersands &"), ]) def test_bare_pointy_brackets(self): self._run_check("this < text > contains < bare>pointy< brackets", [ ("data", "this < text > contains < bare>pointy< brackets"), ]) def test_starttag_end_boundary(self): self._run_check("""<a b='<'>""", [("starttag", "a", [("b", "<")])]) self._run_check("""<a b='>'>""", [("starttag", "a", [("b", ">")])]) def test_buffer_artefacts(self): output = [("starttag", "a", [("b", "<")])] self._run_check(["<a b='<'>"], output) self._run_check(["<a ", "b='<'>"], output) self._run_check(["<a b", "='<'>"], output) self._run_check(["<a b=", "'<'>"], output) self._run_check(["<a b='<", "'>"], output) self._run_check(["<a b='<'", ">"], output) output = [("starttag", "a", [("b", ">")])] self._run_check(["<a b='>'>"], output) self._run_check(["<a ", "b='>'>"], output) self._run_check(["<a b", "='>'>"], output) self._run_check(["<a b=", "'>'>"], output) self._run_check(["<a b='>", "'>"], output) self._run_check(["<a b='>'", ">"], output) output = [("comment", "abc")] self._run_check(["", "<!--abc-->"], output) self._run_check(["<", "!--abc-->"], output) self._run_check(["<!", "--abc-->"], output) self._run_check(["<!-", "-abc-->"], output) self._run_check(["<!--", "abc-->"], output) self._run_check(["<!--a", "bc-->"], output) self._run_check(["<!--ab", "c-->"], output) self._run_check(["<!--abc", "-->"], output) self._run_check(["<!--abc-", "->"], output) self._run_check(["<!--abc--", ">"], output) self._run_check(["<!--abc-->", ""], output) def test_valid_doctypes(self): # from http://www.w3.org/QA/2002/04/valid-dtd-list.html dtds = ['HTML', # HTML5 doctype ('HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" ' '"http://www.w3.org/TR/html4/strict.dtd"'), ('HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ' '"http://www.w3.org/TR/html4/loose.dtd"'), ('html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ' '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"'), ('html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" ' '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"'), ('math PUBLIC "-//W3C//DTD MathML 2.0//EN" ' '"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd"'), ('html PUBLIC "-//W3C//DTD ' 'XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" ' '"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"'), ('svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ' '"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"'), 'html PUBLIC "-//IETF//DTD HTML 2.0//EN"', 'html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"'] for dtd in dtds: self._run_check("<!DOCTYPE %s>" % dtd, [('decl', 'DOCTYPE ' + dtd)]) def test_startendtag(self): self._run_check("<p/>", [ ("startendtag", "p", []), ]) self._run_check("<p></p>", [ ("starttag", "p", []), ("endtag", "p"), ]) self._run_check("<p><img src='foo' /></p>", [ ("starttag", "p", []), ("startendtag", "img", [("src", "foo")]), ("endtag", "p"), ]) def test_get_starttag_text(self): s = """<foo:bar \n one="1"\ttwo=2 >""" self._run_check_extra(s, [ ("starttag", "foo:bar", [("one", "1"), ("two", "2")]), ("starttag_text", s)]) @support.subTests('content', [ '<!-- not a comment --> ¬-an-entity-ref;', "<not a='start tag'>", '<a href="" /> <p> <span></span>', 'foo = "</scr" + "ipt>";', 'foo = "</SCRIPT" + ">";', 'foo = <\n/script> ', '<!-- document.write("</scr" + "ipt>"); -->', ('\n//<![CDATA[\n' 'document.write(\'<s\'+\'cript type="text/javascript" ' 'src="http://www.example.org/r=\'+new ' 'Date().getTime()+\'"><\\/s\'+\'cript>\');\n//]]>'), '\n<!-- //\nvar foo = 3.14;\n// -->\n', '<!-- \u2603 -->', ]) def test_script_content(self, content): s = f'<script>{content}</script>' self._run_check(s, [ ("starttag", "script", []), ("data", content), ("endtag", "script"), ]) @support.subTests('content', [ 'a::before { content: "<!-- not a comment -->"; }', 'a::before { content: "¬-an-entity-ref;"; }', 'a::before { content: "<not a=\'start tag\'>"; }', 'a::before { content: "\u2603"; }', ]) def test_style_content(self, content): s = f'<style>{content}</style>' self._run_check(s, [("starttag", "style", []), ("data", content), ("endtag", "style")]) @support.subTests('tag', ['title', 'textarea']) def test_rcdata_content(self, tag): source = f"<{tag}>{SAMPLE_RCDATA}</{tag}>" self._run_check(source, [ ("starttag", tag, []), ("data", SAMPLE_RCDATA), ("endtag", tag), ]) source = f"<{tag}>&</{tag}>" self._run_check(source, [ ("starttag", tag, []), ('entityref', 'amp'), ("endtag", tag), ]) @support.subTests('tag', ['style', 'xmp', 'iframe', 'noembed', 'noframes', 'script']) def test_rawtext_content(self, tag): source = f"<{tag}>{SAMPLE_RAWTEXT}</{tag}>" self._run_check(source, [ ("starttag", tag, []), ("data", SAMPLE_RAWTEXT), ("endtag", tag), ]) def test_noscript_content(self): source = f"<noscript>{SAMPLE_RAWTEXT}</noscript>" # scripting=False -- normal mode self._run_check(source, [ ('starttag', 'noscript', []), ('comment', ' not a comment '), ('starttag', 'not', [('a', 'start tag')]), ('unknown decl', 'CDATA[not a cdata'), ('comment', 'not a bogus comment'), ('endtag', 'not'), ('data', '☃'), ('entityref', 'amp'), ('charref', '9786'), ('endtag', 'noscript'), ]) # scripting=True -- RAWTEXT mode self._run_check(source, [ ("starttag", "noscript", []), ("data", SAMPLE_RAWTEXT), ("endtag", "noscript"), ], collector=EventCollector(scripting=True)) def test_plaintext_content(self): content = SAMPLE_RAWTEXT + '</plaintext>' # not closing source = f"<plaintext>{content}" self._run_check(source, [ ("starttag", "plaintext", []), ("data", content), ]) @support.subTests('endtag', ['script', 'SCRIPT', 'script ', 'script\n', 'script/', 'script foo=bar', 'script foo=">"']) def test_script_closing_tag(self, endtag): # see issue #13358 # make sure that HTMLParser calls handle_data only once for each CDATA. content = """<!-- not a comment --> ¬-an-entity-ref; <a href="" /> </p><p> <span></span></style> '</script' + '>'""" s = f'<ScrIPt>{content}</{endtag}>' self._run_check(s, [("starttag", "script", []), ("data", content), ("endtag", "script")], collector=EventCollectorNoNormalize(convert_charrefs=False)) @support.subTests('tag', [ 'script', 'style', 'xmp', 'iframe', 'noembed', 'noframes', 'textarea', 'title', 'noscript', ]) def test_closing_tag(self, tag): for endtag in [tag, tag.upper(), f'{tag} ', f'{tag}\n', f'{tag}/', f'{tag} foo=bar', f'{tag} foo=">"']: content = "<!-- not a comment --><i>Spam</i>" s = f'<{tag.upper()}>{content}</{endtag}>' self._run_check(s, [ ("starttag", tag, []), ('data', content), ("endtag", tag), ], collector=EventCollectorNoNormalize(convert_charrefs=False, scripting=True)) @support.subTests('tag', [ 'script', 'style', 'xmp', 'iframe', 'noembed', 'noframes', 'textarea', 'title', 'noscript', ]) def test_invalid_closing_tag(self, tag): content = ( f'< /{tag}>' f'</ {tag}>' f'</{tag}x>' f'</{tag}\v>' f'</{tag}\xa0>' ) source = f"<{tag}>{content}</{tag}>" self._run_check(source, [ ("starttag", tag, []), ("data", content), ("endtag", tag), ], collector=EventCollector(convert_charrefs=False, scripting=True)) @support.subTests('tag,endtag', [ ('title', 'tıtle'), ('style', 'ſtyle'), ('style', 'ſtyle'), ('style', 'style'), ('iframe', 'ıframe'), ('noframes', 'noframeſ'), ('noscript', 'noſcript'), ('noscript', 'noscrıpt'), ('script', 'ſcript'), ('script', 'scrıpt'), ]) def test_invalid_nonascii_closing_tag(self, tag, endtag): content = f"<br></{endtag}>" source = f"<{tag}>{content}" self._run_check(source, [ ("starttag", tag, []), ("data", content), ], collector=EventCollector(convert_charrefs=False, scripting=True)) source = f"<{tag}>{content}</{tag}>" self._run_check(source, [ ("starttag", tag, []), ("data", content), ("endtag", tag), ], collector=EventCollector(convert_charrefs=False, scripting=True)) @support.subTests('tail,end', [ ('', False), ('<', False), ('</', False), ('</s', False), ('</script', False), ('</script ', True), ('</script foo=bar', True), ('</script foo=">', True), ]) def test_eof_in_script(self, tail, end): content = "a = 123" s = f'<ScrIPt>{content}{tail}' self._run_check(s, [("starttag", "script", []), ("data", content if end else content + tail)], collector=EventCollectorNoNormalize(convert_charrefs=False)) @support.subTests('tail,end', [ ('', False), ('<', False), ('</', False), ('</t', False), ('</title', False), ('</title ', True), ('</title foo=bar', True), ('</title foo=">', True), ]) def test_eof_in_title(self, tail, end): s = f'<TitLe>Egg & Spam{tail}' self._run_check(s, [("starttag", "title", []), ("data", "Egg & Spam" + ('' if end else tail))], collector=EventCollectorNoNormalize(convert_charrefs=True)) self._run_check(s, [("starttag", "title", []), ('data', 'Egg '), ('entityref', 'amp'), ('data', ' Spam' + ('' if end else tail))], collector=EventCollectorNoNormalize(convert_charrefs=False)) def test_comments(self): html = ("<!-- I'm a valid comment -->" '<!--me too!-->' '<!------>' '<!----->' '<!---->' # abrupt-closing-of-empty-comment '<!--->' '<!-->' '<!----I have many hyphens---->' '<!-- I have a > in the middle -->' '<!-- and I have -- in the middle! -->' '<!--incorrectly-closed-comment--!>' '<!----!>' '<!----!-->' '<!---- >-->' '<!---!>-->' '<!--!>-->' # nested-comment '<!-- <!-- nested --> -->' '<!--<!-->' '<!--<!--!>' ) expected = [('comment', " I'm a valid comment "), ('comment', 'me too!'), ('comment', '--'), ('comment', '-'), ('comment', ''), ('comment', ''), ('comment', ''), ('comment', '--I have many hyphens--'), ('comment', ' I have a > in the middle '), ('comment', ' and I have -- in the middle! '), ('comment', 'incorrectly-closed-comment'), ('comment', ''), ('comment', '--!'), ('comment', '-- >'), ('comment', '-!>'), ('comment', '!>'), ('comment', ' <!-- nested '), ('data', ' -->'), ('comment', '<!'), ('comment', '<!'), ] self._run_check(html, expected) def test_condcoms(self): html = ('<!--[if IE & !(lte IE 8)]>aren\'t<![endif]-->' '<!--[if IE 8]>condcoms<![endif]-->' '<!--[if lte IE 7]>pretty?<![endif]-->') expected = [('comment', "[if IE & !(lte IE 8)]>aren't<![endif]"), ('comment', '[if IE 8]>condcoms<![endif]'), ('comment', '[if lte IE 7]>pretty?<![endif]')] self._run_check(html, expected) def test_convert_charrefs(self): # default value for convert_charrefs is now True collector = lambda: EventCollectorCharrefs() self.assertTrue(collector().convert_charrefs) charrefs = ['"', '"', '"', '"', '"', '"'] # check charrefs in the middle of the text/attributes expected = [('starttag', 'a', [('href', 'foo"zar')]), ('data', 'a"z'), ('endtag', 'a')] for charref in charrefs: self._run_check('<a href="foo{0}zar">a{0}z</a>'.format(charref), expected, collector=collector()) # check charrefs at the beginning/end of the text/attributes expected = [('data', '"'), ('starttag', 'a', [('x', '"'), ('y', '"X'), ('z', 'X"')]), ('data', '"'), ('endtag', 'a'), ('data', '"')] for charref in charrefs: self._run_check('{0}<a x="{0}" y="{0}X" z="X{0}">' '{0}</a>{0}'.format(charref), expected, collector=collector()) # check charrefs in <script>/<style> elements for charref in charrefs: text = 'X'.join([charref]*3) expected = [('data', '"'), ('starttag', 'script', []), ('data', text), ('endtag', 'script'), ('data', '"'), ('starttag', 'style', []), ('data', text), ('endtag', 'style'), ('data', '"')] self._run_check('{1}<script>{0}</script>{1}' '<style>{0}</style>{1}'.format(text, charref), expected, collector=collector()) # check truncated charrefs at the end of the file html = '&quo &# &#x' for x in range(1, len(html)): self._run_check(html[:x], [('data', html[:x])], collector=collector()) # check a string with no charrefs self._run_check('no charrefs here', [('data', 'no charrefs here')], collector=collector()) # the remaining tests were for the "tolerant" parser (which is now # the default), and check various kind of broken markup def test_tolerant_parsing(self): self._run_check('<html <html>te>>xt&a<<bc</a></html>\n' '<img src="URL><//img></html</html>', [ ('starttag', 'html', [('<html', None)]), ('data', 'te>>xt'), ('entityref', 'a'), ('data', '<'), ('starttag', 'bc<', [('a', None)]), ('endtag', 'html'), ('data', '\n')]) def test_starttag_junk_chars(self): self._run_check("<", [('data', '<')]) self._run_check("<>", [('data', '<>')]) self._run_check("< >", [('data', '< >')]) self._run_check("< ", [('data', '< ')]) self._run_check("</>", []) self._run_check("<$>", [('data', '<$>')]) self._run_check("</$>", [('comment', '$')]) self._run_check("</", [('data', '</')]) self._run_check("</a", []) self._run_check("</ a>", [('comment', ' a')]) self._run_check("</ a", [('comment', ' a')]) self._run_check("<a<a>", [('starttag', 'a<a', [])]) self._run_check("</a<a>", [('endtag', 'a<a')]) self._run_check("<!", [('comment', '')]) self._run_check("<a", []) self._run_check("<a foo='bar'", []) self._run_check("<a foo='bar", []) self._run_check("<a foo='>'", []) self._run_check("<a foo='>", []) self._run_check("<a$>", [('starttag', 'a$', [])]) self._run_check("<a$b>", [('starttag', 'a$b', [])]) self._run_check("<a$b/>", [('startendtag', 'a$b', [])]) self._run_check("<a$b >", [('starttag', 'a$b', [])]) self._run_check("<a$b />", [('startendtag', 'a$b', [])]) self._run_check("</a$b>", [('endtag', 'a$b')]) def test_slashes_in_starttag(self): self._run_check('<a foo="var"/>', [('startendtag', 'a', [('foo', 'var')])]) html = ('<img width=902 height=250px ' 'src="/sites/default/files/images/homepage/foo.jpg" ' '/*what am I doing here*/ />') expected = [( 'startendtag', 'img', [('width', '902'), ('height', '250px'), ('src', '/sites/default/files/images/homepage/foo.jpg'), ('*what', None), ('am', None), ('i', None), ('doing', None), ('here*', None)] )] self._run_check(html, expected) html = ('<a / /foo/ / /=/ / /bar/ / />' '<a / /foo/ / /=/ / /bar/ / >') expected = [ ('startendtag', 'a', [('foo', None), ('=', None), ('bar', None)]), ('starttag', 'a', [('foo', None), ('=', None), ('bar', None)]) ] self._run_check(html, expected) #see issue #14538 html = ('<meta><meta / ><meta // ><meta / / >' '<meta/><meta /><meta //><meta//>') expected = [ ('starttag', 'meta', []), ('starttag', 'meta', []), ('starttag', 'meta', []), ('starttag', 'meta', []), ('startendtag', 'meta', []), ('startendtag', 'meta', []), ('startendtag', 'meta', []), ('startendtag', 'meta', []), ] self._run_check(html, expected) def test_slashes_in_endtag(self): self._run_check('</a/>', [('endtag', 'a')]) self._run_check('</a foo="var"/>', [('endtag', 'a')]) def test_declaration_junk_chars(self): self._run_check("<!DOCTYPE foo $ >", [('decl', 'DOCTYPE foo $ ')]) def test_illegal_declarations(self): self._run_check('<!spacer type="block" height="25">', [('comment', 'spacer type="block" height="25"')]) def test_invalid_end_tags(self): # A collection of broken end tags. <br> is used as separator. # see http://www.w3.org/TR/html5/tokenization.html#end-tag-open-state # and #13993 html = ('<br></label</p><br></div end tmAd-leaderBoard><br></<h4><br>' '</li class="unit"><br></li\r\n\t\t\t\t\t\t</ul><br></><br>') expected = [('starttag', 'br', []), # < is part of the name, / is discarded, p is an attribute ('endtag', 'label<'), ('starttag', 'br', []), # text and attributes are discarded ('endtag', 'div'), ('starttag', 'br', []), # comment because the first char after </ is not a-zA-Z ('comment', '<h4'), ('starttag', 'br', []), # attributes are discarded ('endtag', 'li'), ('starttag', 'br', []), # everything till ul (included) is discarded ('endtag', 'li'), ('starttag', 'br', []), # </> is ignored ('starttag', 'br', [])] self._run_check(html, expected) def test_broken_invalid_end_tag(self): html = '<b>This</b attr=">"> confuses the parser' expected = [('starttag', 'b', []), ('data', 'This'), ('endtag', 'b'), ('data', ' confuses the parser')] self._run_check(html, expected) def test_correct_detection_of_start_tags(self): # see #13273 html = ('<div style="" ><b>The <a href="some_url">rain</a> ' '<br /> in <span>Spain</span></b></div>') expected = [ ('starttag', 'div', [('style', '')]), ('starttag', 'b', []), ('data', 'The '), ('starttag', 'a', [('href', 'some_url')]), ('data', 'rain'), ('endtag', 'a'), ('data', ' '), ('startendtag', 'br', []), ('data', ' in '), ('starttag', 'span', []), ('data', 'Spain'), ('endtag', 'span'), ('endtag', 'b'), ('endtag', 'div') ] self._run_check(html, expected) html = '<div style="", foo = "bar" ><b>The <a href="some_url">rain</a>' expected = [ ('starttag', 'div', [('style', ''), (',', None), ('foo', 'bar')]), ('starttag', 'b', []), ('data', 'The '), ('starttag', 'a', [('href', 'some_url')]), ('data', 'rain'), ('endtag', 'a'), ] self._run_check(html, expected) def test_EOF_in_charref(self): # see #17802 # This test checks that the UnboundLocalError reported in the issue # is not raised, however I'm not sure the returned values are correct. # Maybe HTMLParser should use self.unescape for these data = [ ('a&', [('data', 'a&')]), ('a&b', [('data', 'ab')]), ('a&b ', [('data', 'a'), ('entityref', 'b'), ('data', ' ')]), ('a&b;', [('data', 'a'), ('entityref', 'b')]), ] for html, expected in data: self._run_check(html, expected) def test_eof_in_comments(self): data = [ ('<!--', [('comment', '')]), ('<!---', [('comment', '')]), ('<!----', [('comment', '')]), ('<!-----', [('comment', '-')]), ('<!------', [('comment', '--')]), ('<!----!', [('comment', '')]), ('<!---!', [('comment', '-!')]), ('<!---!>', [('comment', '-!>')]), ('<!--foo', [('comment', 'foo')]), ('<!--foo-', [('comment', 'foo')]), ('<!--foo--', [('comment', 'foo')]), ('<!--foo--!', [('comment', 'foo')]), ('<!--<!--', [('comment', '<!')]), ('<!--<!--!', [('comment', '<!')]), ] for html, expected in data: self._run_check(html, expected) def test_eof_in_declarations(self): data = [ ('<!', [('comment', '')]), ('<!-', [('comment', '-')]), ('<![', [('comment', '[')]), ('<!DOCTYPE', [('decl', 'DOCTYPE')]), ('<!DOCTYPE ', [('decl', 'DOCTYPE ')]), ('<!DOCTYPE html', [('decl', 'DOCTYPE html')]), ('<!DOCTYPE html ', [('decl', 'DOCTYPE html ')]), ('<!DOCTYPE html PUBLIC', [('decl', 'DOCTYPE html PUBLIC')]), ('<!DOCTYPE html PUBLIC "foo', [('decl', 'DOCTYPE html PUBLIC "foo')]), ('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "foo', [('decl', 'DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "foo')]), ] for html, expected in data: self._run_check(html, expected) @support.subTests('content', ['', 'x', 'x]', 'x]]']) def test_eof_in_cdata(self, content): self._run_check('<![CDATA[' + content, [('unknown decl', 'CDATA[' + content)]) self._run_check('<![CDATA[' + content, [('comment', '[CDATA[' + content)], collector=EventCollector(autocdata=True)) self._run_check('<svg><text y="100"><![CDATA[' + content, [('starttag', 'svg', []), ('starttag', 'text', [('y', '100')]), ('unknown decl', 'CDATA[' + content)]) def test_bogus_comments(self): html = ('<!ELEMENT br EMPTY>' '<! not really a comment >' '<! not a comment either -->' '<! -- close enough -->' '<!><!<-- this was an empty comment>' '<!!! another bogus comment !!!>') expected = [ ('comment', 'ELEMENT br EMPTY'), ('comment', ' not really a comment '), ('comment', ' not a comment either --'), ('comment', ' -- close enough --'), ('comment', ''), ('comment', '<-- this was an empty comment'), ('comment', '!! another bogus comment !!!'), ] self._run_check(html, expected) def test_broken_condcoms(self): # these condcoms are missing the '--' after '<!' and before the '>' html = ('<![if !(IE)]>broken condcom<![endif]>' '<![if ! IE]><link href="favicon.tiff"/><![endif]>' '<![if !IE 6]><img src="firefox.png" /><![endif]>' '<![if !ie 6]><b>foo</b><![endif]>' '<![if (!IE)|(lt IE 9)]><img src="mammoth.bmp" /><![endif]>') # According to the HTML5 specs sections "8.2.4.44 Bogus comment state" # and "8.2.4.45 Markup declaration open state", comment tokens should # be emitted instead of 'unknown decl', but calling unknown_decl # provides more flexibility. # See also Lib/_markupbase.py:parse_declaration expected = [ ('unknown decl', 'if !(IE)'), ('data', 'broken condcom'), ('unknown decl', 'endif'), ('unknown decl', 'if ! IE'), ('startendtag', 'link', [('href', 'favicon.tiff')]), ('unknown decl', 'endif'), ('unknown decl', 'if !IE 6'), ('startendtag', 'img', [('src', 'firefox.png')]), ('unknown decl', 'endif'), ('unknown decl', 'if !ie 6'), ('starttag', 'b', []), ('data', 'foo'), ('endtag', 'b'), ('unknown decl', 'endif'), ('unknown decl', 'if (!IE)|(lt IE 9)'), ('startendtag', 'img', [('src', 'mammoth.bmp')]), ('unknown decl', 'endif') ] self._run_check(html, expected) @support.subTests('content', [ 'just some plain text', '<!-- not a comment -->', '¬-an-entity-ref;', "<not a='start tag'>", '', '[[I have many brackets]]', 'I have a > in the middle', 'I have a ]] in the middle', '] ]>', ']] >', ('\n' ' if (a < b && a > b) {\n' ' printf("[<marquee>How?</marquee>]");\n' ' }\n'), ]) def test_cdata_section_content(self, content): # See "13.2.5.42 Markup declaration open state", # "13.2.5.69 CDATA section state", and issue bpo-32876. html = f'<svg><text y="100"><![CDATA[{content}]]></text></svg>' expected = [ ('starttag', 'svg', []), ('starttag', 'text', [('y', '100')]), ('unknown decl', 'CDATA[' + content), ('endtag', 'text'), ('endtag', 'svg'), ] self._run_check(html, expected) self._run_check(html, expected, collector=EventCollector(autocdata=True)) def test_cdata_section(self): # See "13.2.5.42 Markup declaration open state". html = ('<![CDATA[foo<br>bar]]>' '<svg><text y="100"><![CDATA[foo<br>bar]]></text></svg>' '<![CDATA[foo<br>bar]]>') expected = [ ('comment', '[CDATA[foo<br'), ('data', 'bar]]>'), ('starttag', 'svg', []), ('starttag', 'text', [('y', '100')]), ('unknown decl', 'CDATA[foo<br>bar'), ('endtag', 'text'), ('endtag', 'svg'), ('comment', '[CDATA[foo<br'), ('data', 'bar]]>'), ] self._run_check(html, expected, collector=EventCollector(autocdata=True)) def test_convert_charrefs_dropped_text(self): # #23144: make sure that all the events are triggered when # convert_charrefs is True, even if we don't call .close() parser = EventCollector(convert_charrefs=True) # before the fix, bar & baz was missing parser.feed("foo <a>link</a> bar & baz") self.assertEqual( parser.get_events(), [('data', 'foo '), ('starttag', 'a', []), ('data', 'link'), ('endtag', 'a'), ('data', ' bar & baz')] ) @support.requires_resource('cpu') def test_eof_no_quadratic_complexity(self): # Each of these examples used to take about an hour. # Now they take a fraction of a second. def check(source): parser = html.parser.HTMLParser() parser.feed(source) parser.close() n = 120_000 check("<a " * n) check("<a a=" * n) check("</a " * 14 * n) check("</a a=" * 11 * n) check("<!--" * 4 * n) check("<!" * 60 * n) check("<?" * 19 * n) check("</$" * 15 * n) check("<![CDATA[" * 9 * n) check("<!doctype" * 35 * n) class AttributesTestCase(TestCaseBase): def test_attr_syntax(self): output = [ ("starttag", "a", [("b", "v"), ("c", "v"), ("d", "v"), ("e", None)]) ] self._run_check("""<a b='v' c="v" d=v e>""", output) self._run_check("<a foo==bar>", [('starttag', 'a', [('foo', '=bar')])]) self._run_check("<a foo =bar>", [('starttag', 'a', [('foo', 'bar')])]) self._run_check("<a foo\t=bar>", [('starttag', 'a', [('foo', 'bar')])]) self._run_check("<a foo\v=bar>", [('starttag', 'a', [('foo\v', 'bar')])]) self._run_check("<a foo\xa0=bar>", [('starttag', 'a', [('foo\xa0', 'bar')])]) self._run_check("<a foo= bar>", [('starttag', 'a', [('foo', 'bar')])]) self._run_check("<a foo=\tbar>", [('starttag', 'a', [('foo', 'bar')])]) self._run_check("<a foo=\vbar>", [('starttag', 'a', [('foo', '\vbar')])]) self._run_check("<a foo=\xa0bar>", [('starttag', 'a', [('foo', '\xa0bar')])]) def test_attr_values(self): self._run_check("""<a b='xxx\n\txxx' c="yyy\t\nyyy" d='\txyz\n'>""", [("starttag", "a", [("b", "xxx\n\txxx"), ("c", "yyy\t\nyyy"), ("d", "\txyz\n")])]) self._run_check("""<a b='' c="">""", [("starttag", "a", [("b", ""), ("c", "")])]) self._run_check("<a b=\tx c=\ny>", [('starttag', 'a', [('b', 'x'), ('c', 'y')])]) self._run_check("<a b=\v c=\xa0>", [("starttag", "a", [("b", "\v"), ("c", "\xa0")])]) # Regression test for SF patch #669683. self._run_check("<e a=rgb(1,2,3)>", [("starttag", "e", [("a", "rgb(1,2,3)")])]) # Regression test for SF bug #921657. self._run_check( "<a href=mailto:xyz@example.com>", [("starttag", "a", [("href", "mailto:xyz@example.com")])]) def test_attr_nonascii(self): # see issue 7311 self._run_check( "<img src=/foo/bar.png alt=\u4e2d\u6587>", [("starttag", "img", [("src", "/foo/bar.png"), ("alt", "\u4e2d\u6587")])]) self._run_check( "<a title='\u30c6\u30b9\u30c8' href='\u30c6\u30b9\u30c8.html'>", [("starttag", "a", [("title", "\u30c6\u30b9\u30c8"), ("href", "\u30c6\u30b9\u30c8.html")])]) self._run_check( '<a title="\u30c6\u30b9\u30c8" href="\u30c6\u30b9\u30c8.html">', [("starttag", "a", [("title", "\u30c6\u30b9\u30c8"), ("href", "\u30c6\u30b9\u30c8.html")])]) def test_attr_entity_replacement(self): self._run_check( "<a b='&><"''>", [("starttag", "a", [("b", "&><\"'")])]) def test_attr_funky_names(self): self._run_check( "<a a.b='v' c:d=v e-f=v>", [("starttag", "a", [("a.b", "v"), ("c:d", "v"), ("e-f", "v")])]) def test_entityrefs_in_attributes(self): self._run_check( "<html foo='€&aa&unsupported;'>", [("starttag", "html", [("foo", "\u20AC&aa&unsupported;")])]) def test_attr_funky_names2(self): self._run_check( r"<a $><b $=%><c \=/>", [("starttag", "a", [("$", None)]), ("starttag", "b", [("$", "%")]), ("starttag", "c", [("\\", "/")])]) def test_entities_in_attribute_value(self): # see #1200313 for entity in ['&', '&', '&', '&']: self._run_check('<a href="%s">' % entity, [("starttag", "a", [("href", "&")])]) self._run_check("<a href='%s'>" % entity, [("starttag", "a", [("href", "&")])]) self._run_check("<a href=%s>" % entity, [("starttag", "a", [("href", "&")])]) def test_malformed_attributes(self): # see #13357 html = ( "<a href=test'style='color:red;bad1'>test - bad1</a>" "<a href=test'+style='color:red;ba2'>test - bad2</a>" "<a href=test' style='color:red;bad3'>test - bad3</a>" "<a href = test' style='color:red;bad4' >test - bad4</a>" ) expected = [ ('starttag', 'a', [('href', "test'style='color:red;bad1'")]), ('data', 'test - bad1'), ('endtag', 'a'), ('starttag', 'a', [('href', "test'+style='color:red;ba2'")]), ('data', 'test - bad2'), ('endtag', 'a'), ('starttag', 'a', [('href', "test'\xa0style='color:red;bad3'")]), ('data', 'test - bad3'), ('endtag', 'a'), ('starttag', 'a', [('href', "test'\xa0style='color:red;bad4'")]), ('data', 'test - bad4'), ('endtag', 'a'), ] self._run_check(html, expected) def test_malformed_adjacent_attributes(self): # see #12629 self._run_check('<x><y z=""o"" /></x>', [('starttag', 'x', []), ('startendtag', 'y', [('z', ''), ('o""', None)]), ('endtag', 'x')]) self._run_check('<x><y z="""" /></x>', [('starttag', 'x', []), ('startendtag', 'y', [('z', ''), ('""', None)]), ('endtag', 'x')]) # see #755670 for the following 3 tests def test_adjacent_attributes(self): self._run_check('<a width="100%"cellspacing=0>', [("starttag", "a", [("width", "100%"), ("cellspacing","0")])]) self._run_check('<a id="foo"class="bar">', [("starttag", "a", [("id", "foo"), ("class","bar")])]) def test_missing_attribute_value(self): self._run_check('<a v=>', [("starttag", "a", [("v", "")])]) def test_javascript_attribute_value(self): self._run_check("<a href=javascript:popup('/popup/help.html')>", [("starttag", "a", [("href", "javascript:popup('/popup/help.html')")])]) def test_end_tag_in_attribute_value(self): # see #1745761 self._run_check("<a href='http://www.example.org/\">;'>spam</a>", [("starttag", "a", [("href", "http://www.example.org/\">;")]), ("data", "spam"), ("endtag", "a")]) def test_with_unquoted_attributes(self): # see #12008 html = ("<html><body bgcolor=d0ca90 text='181008'>" "<table cellspacing=0 cellpadding=1 width=100% ><tr>" "<td align=left><font size=-1>" "- <a href=/rabota/><span class=en> software-and-i</span></a>" "- <a href='/1/'><span class=en> library</span></a></table>") expected = [ ('starttag', 'html', []), ('starttag', 'body', [('bgcolor', 'd0ca90'), ('text', '181008')]), ('starttag', 'table', [('cellspacing', '0'), ('cellpadding', '1'), ('width', '100%')]), ('starttag', 'tr', []), ('starttag', 'td', [('align', 'left')]), ('starttag', 'font', [('size', '-1')]), ('data', '- '), ('starttag', 'a', [('href', '/rabota/')]), ('starttag', 'span', [('class', 'en')]), ('data', ' software-and-i'), ('endtag', 'span'), ('endtag', 'a'), ('data', '- '), ('starttag', 'a', [('href', '/1/')]), ('starttag', 'span', [('class', 'en')]), ('data', ' library'), ('endtag', 'span'), ('endtag', 'a'), ('endtag', 'table') ] self._run_check(html, expected) def test_comma_between_attributes(self): # see bpo 41478 # HTMLParser preserves duplicate attributes, leaving the task of # removing duplicate attributes to a conformant html tree builder html = ('<div class=bar,baz=asd>' # between attrs (unquoted) '<div class="bar",baz="asd">' # between attrs (quoted) '<div class=bar, baz=asd,>' # after values (unquoted) '<div class="bar", baz="asd",>' # after values (quoted) '<div class="bar",>' # one comma values (quoted) '<div class=,bar baz=,asd>' # before values (unquoted) '<div class=,"bar" baz=,"asd">' # before values (quoted) '<div ,class=bar ,baz=asd>' # before names '<div class,="bar" baz,="asd">' # after names ) expected = [ ('starttag', 'div', [('class', 'bar,baz=asd'),]), ('starttag', 'div', [('class', 'bar'), (',baz', 'asd')]), ('starttag', 'div', [('class', 'bar,'), ('baz', 'asd,')]), ('starttag', 'div', [('class', 'bar'), (',', None), ('baz', 'asd'), (',', None)]), ('starttag', 'div', [('class', 'bar'), (',', None)]), ('starttag', 'div', [('class', ',bar'), ('baz', ',asd')]), ('starttag', 'div', [('class', ',"bar"'), ('baz', ',"asd"')]), ('starttag', 'div', [(',class', 'bar'), (',baz', 'asd')]), ('starttag', 'div', [('class,', 'bar'), ('baz,', 'asd')]), ] self._run_check(html, expected) def test_weird_chars_in_unquoted_attribute_values(self): self._run_check('<form action=bogus|&#()value>', [ ('starttag', 'form', [('action', 'bogus|&#()value')])]) if __name__ == "__main__": unittest.main()