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.216.213
Domains :
Cant Read [ /etc/named.conf ]
User : beriska1
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
opt /
alt /
python35 /
lib64 /
python3.5 /
test /
Delete
Unzip
Name
Size
Permission
Date
Action
__pycache__
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
audiodata
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
capath
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
cjkencodings
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
data
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
decimaltestdata
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
eintrdata
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
encoded_modules
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
imghdrdata
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
sndhdrdata
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
subprocessdata
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
support
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
test_asyncio
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
test_email
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
test_import
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
test_importlib
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
test_json
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
test_tools
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
test_warnings
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
tracedmodules
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
xmltestdata
[ DIR ]
drwxr-xr-x
2026-05-01 04:20
Sine-1000Hz-300ms.aif
60.25
KB
-rw-r--r--
2019-11-02 02:32
__init__.py
47
B
-rw-r--r--
2021-09-24 12:03
__main__.py
55
B
-rw-r--r--
2021-09-24 12:03
_test_multiprocessing.py
129.13
KB
-rw-r--r--
2021-09-24 12:03
allsans.pem
2.12
KB
-rw-r--r--
2019-11-02 02:32
audiotests.py
12.13
KB
-rw-r--r--
2021-09-24 12:03
autotest.py
211
B
-rw-r--r--
2021-09-24 12:03
bad_coding.py
24
B
-rw-r--r--
2021-09-24 12:03
bad_coding2.py
30
B
-rw-r--r--
2021-09-24 12:03
badcert.pem
1.88
KB
-rw-r--r--
2019-11-02 02:32
badkey.pem
2.11
KB
-rw-r--r--
2019-11-02 02:32
badsyntax_3131.py
32
B
-rw-r--r--
2021-09-24 12:03
badsyntax_async1.py
45
B
-rw-r--r--
2021-09-24 12:03
badsyntax_async2.py
45
B
-rw-r--r--
2021-09-24 12:03
badsyntax_async3.py
44
B
-rw-r--r--
2021-09-24 12:03
badsyntax_async4.py
27
B
-rw-r--r--
2021-09-24 12:03
badsyntax_async5.py
33
B
-rw-r--r--
2021-09-24 12:03
badsyntax_async6.py
27
B
-rw-r--r--
2021-09-24 12:03
badsyntax_async7.py
35
B
-rw-r--r--
2021-09-24 12:03
badsyntax_async8.py
37
B
-rw-r--r--
2021-09-24 12:03
badsyntax_future10.py
95
B
-rw-r--r--
2021-09-24 12:03
badsyntax_future3.py
172
B
-rw-r--r--
2021-09-24 12:03
badsyntax_future4.py
153
B
-rw-r--r--
2021-09-24 12:03
badsyntax_future5.py
184
B
-rw-r--r--
2021-09-24 12:03
badsyntax_future6.py
161
B
-rw-r--r--
2021-09-24 12:03
badsyntax_future7.py
196
B
-rw-r--r--
2021-09-24 12:03
badsyntax_future8.py
122
B
-rw-r--r--
2021-09-24 12:03
badsyntax_future9.py
142
B
-rw-r--r--
2021-09-24 12:03
badsyntax_pep3120.py
14
B
-rw-r--r--
2021-09-24 12:03
bisect.py
4.83
KB
-rwxr-xr-x
2021-09-24 12:03
bytecode_helper.py
1.56
KB
-rw-r--r--
2021-09-24 12:03
cfgparser.1
21
B
-rw-r--r--
2019-11-02 02:32
cfgparser.2
19.02
KB
-rw-r--r--
2019-11-02 02:32
cfgparser.3
1.55
KB
-rw-r--r--
2019-11-02 02:32
cmath_testcases.txt
133.86
KB
-rw-r--r--
2019-11-02 02:32
coding20731.py
18
B
-rw-r--r--
2021-09-24 12:03
curses_tests.py
1.22
KB
-rwxr-xr-x
2021-09-24 12:03
datetimetester.py
153.48
KB
-rw-r--r--
2021-09-24 12:03
dh1024.pem
300
B
-rw-r--r--
2019-11-02 02:32
dis_module.py
76
B
-rw-r--r--
2021-09-24 12:03
doctest_aliases.py
240
B
-rw-r--r--
2021-09-24 12:03
double_const.py
1.18
KB
-rw-r--r--
2021-09-24 12:03
empty.vbs
70
B
-rw-r--r--
2019-11-02 02:32
exception_hierarchy.txt
1.75
KB
-rw-r--r--
2019-11-02 02:32
final_a.py
411
B
-rw-r--r--
2021-09-24 12:03
final_b.py
411
B
-rw-r--r--
2021-09-24 12:03
floating_points.txt
15.92
KB
-rw-r--r--
2019-11-02 02:32
fork_wait.py
2.29
KB
-rw-r--r--
2021-09-24 12:03
formatfloat_testcases.txt
7.45
KB
-rw-r--r--
2019-11-02 02:32
future_test1.py
229
B
-rw-r--r--
2021-09-24 12:03
future_test2.py
149
B
-rw-r--r--
2021-09-24 12:03
gdb_sample.py
153
B
-rw-r--r--
2021-09-24 12:03
ieee754.txt
3.21
KB
-rw-r--r--
2019-11-02 02:32
imp_dummy.py
63
B
-rw-r--r--
2021-09-24 12:03
inspect_fodder.py
1.14
KB
-rw-r--r--
2021-09-24 12:03
inspect_fodder2.py
1.77
KB
-rw-r--r--
2021-09-24 12:03
keycert.passwd.pem
1.79
KB
-rw-r--r--
2019-11-02 02:32
keycert.pem
1.74
KB
-rw-r--r--
2019-11-02 02:32
keycert2.pem
1.75
KB
-rw-r--r--
2019-11-02 02:32
keycert3.pem
3.96
KB
-rw-r--r--
2019-11-02 02:32
keycert4.pem
3.96
KB
-rw-r--r--
2019-11-02 02:32
list_tests.py
17.96
KB
-rw-r--r--
2021-09-24 12:03
lock_tests.py
27.46
KB
-rw-r--r--
2021-09-24 12:03
mailcap.txt
1.24
KB
-rw-r--r--
2019-11-02 02:32
make_ssl_certs.py
6.63
KB
-rw-r--r--
2021-09-24 12:03
mapping_tests.py
21.49
KB
-rw-r--r--
2021-09-24 12:03
math_testcases.txt
23.19
KB
-rw-r--r--
2019-11-02 02:32
memory_watchdog.py
859
B
-rw-r--r--
2021-09-24 12:03
mime.types
47.37
KB
-rw-r--r--
2019-11-02 02:32
mock_socket.py
3.53
KB
-rw-r--r--
2021-09-24 12:03
mod_generics_cache.py
224
B
-rw-r--r--
2021-09-24 12:03
mp_fork_bomb.py
448
B
-rw-r--r--
2021-09-24 12:03
mp_preload.py
351
B
-rw-r--r--
2021-09-24 12:03
multibytecodec_support.py
14.44
KB
-rw-r--r--
2021-09-24 12:03
nokia.pem
1.88
KB
-rw-r--r--
2019-11-02 02:32
nullbytecert.pem
5.31
KB
-rw-r--r--
2019-11-02 02:32
nullcert.pem
0
B
-rw-r--r--
2019-11-02 02:32
outstanding_bugs.py
370
B
-rw-r--r--
2021-09-24 12:03
pickletester.py
100.52
KB
-rw-r--r--
2021-09-24 12:03
profilee.py
2.97
KB
-rw-r--r--
2021-09-24 12:03
pstats.pck
65.05
KB
-rw-r--r--
2019-11-02 02:32
pycacert.pem
4.21
KB
-rw-r--r--
2019-11-02 02:32
pycakey.pem
1.66
KB
-rw-r--r--
2019-11-02 02:32
pyclbr_input.py
648
B
-rw-r--r--
2021-09-24 12:03
pydoc_mod.py
708
B
-rw-r--r--
2021-09-24 12:03
pydocfodder.py
6.18
KB
-rw-r--r--
2021-09-24 12:03
pystone.py
7.56
KB
-rwxr-xr-x
2021-09-24 12:03
randv2_32.pck
7.34
KB
-rw-r--r--
2019-11-02 02:32
randv2_64.pck
7.19
KB
-rw-r--r--
2019-11-02 02:32
randv3.pck
7.82
KB
-rw-r--r--
2019-11-02 02:32
re_tests.py
31.05
KB
-rwxr-xr-x
2021-09-24 12:03
regrtest.py
67.22
KB
-rwxr-xr-x
2021-09-24 12:03
relimport.py
27
B
-rw-r--r--
2021-09-24 12:03
reperf.py
538
B
-rw-r--r--
2021-09-24 12:03
revocation.crl
625
B
-rw-r--r--
2019-11-02 02:32
sample_doctest.py
1.02
KB
-rw-r--r--
2021-09-24 12:03
sample_doctest_no_docstrings.py
227
B
-rw-r--r--
2021-09-24 12:03
sample_doctest_no_doctests.py
269
B
-rw-r--r--
2021-09-24 12:03
selfsigned_pythontestdotnet.pem
2.08
KB
-rw-r--r--
2019-11-02 02:32
seq_tests.py
14.08
KB
-rw-r--r--
2021-09-24 12:03
sgml_input.html
8.1
KB
-rw-r--r--
2019-11-02 02:32
sha256.pem
8.15
KB
-rw-r--r--
2019-11-02 02:32
sortperf.py
4.69
KB
-rw-r--r--
2021-09-24 12:03
ssl_cert.pem
867
B
-rw-r--r--
2019-11-02 02:32
ssl_key.passwd.pem
963
B
-rw-r--r--
2019-11-02 02:32
ssl_key.pem
916
B
-rw-r--r--
2019-11-02 02:32
ssl_servers.py
7.08
KB
-rw-r--r--
2021-09-24 12:03
ssltests.py
1.03
KB
-rw-r--r--
2021-09-24 12:03
string_tests.py
63.91
KB
-rw-r--r--
2021-09-24 12:03
talos-2019-0758.pem
1.3
KB
-rw-r--r--
2019-11-02 02:32
test___all__.py
3.72
KB
-rw-r--r--
2021-09-24 12:03
test___future__.py
2.36
KB
-rw-r--r--
2021-09-24 12:03
test__locale.py
7.72
KB
-rw-r--r--
2021-09-24 12:03
test__opcode.py
850
B
-rw-r--r--
2021-09-24 12:03
test__osx_support.py
11.4
KB
-rw-r--r--
2021-09-24 12:03
test_abc.py
13.33
KB
-rw-r--r--
2021-09-24 12:03
test_abstract_numbers.py
1.49
KB
-rw-r--r--
2021-09-24 12:03
test_aifc.py
15.98
KB
-rw-r--r--
2021-09-24 12:03
test_argparse.py
160.89
KB
-rw-r--r--
2021-09-24 12:03
test_array.py
46.68
KB
-rw-r--r--
2021-09-24 12:03
test_asdl_parser.py
3.92
KB
-rw-r--r--
2021-09-24 12:03
test_ast.py
43.83
KB
-rw-r--r--
2021-09-24 12:03
test_asynchat.py
11.25
KB
-rw-r--r--
2021-09-24 12:03
test_asyncore.py
25.95
KB
-rw-r--r--
2021-09-24 12:03
test_atexit.py
4.76
KB
-rw-r--r--
2021-09-24 12:03
test_audioop.py
28.05
KB
-rw-r--r--
2021-09-24 12:03
test_augassign.py
7.47
KB
-rw-r--r--
2021-09-24 12:03
test_base64.py
29.77
KB
-rw-r--r--
2021-09-24 12:03
test_bigaddrspace.py
2.92
KB
-rw-r--r--
2021-09-24 12:03
test_bigmem.py
44.18
KB
-rw-r--r--
2021-09-24 12:03
test_binascii.py
14.02
KB
-rw-r--r--
2021-09-24 12:03
test_binhex.py
1.47
KB
-rw-r--r--
2021-09-24 12:03
test_binop.py
12.77
KB
-rw-r--r--
2021-09-24 12:03
test_bisect.py
13.63
KB
-rw-r--r--
2021-09-24 12:03
test_bool.py
11.91
KB
-rw-r--r--
2021-09-24 12:03
test_buffer.py
158.83
KB
-rw-r--r--
2021-09-24 12:03
test_bufio.py
2.54
KB
-rw-r--r--
2021-09-24 12:03
test_builtin.py
65.17
KB
-rw-r--r--
2021-09-24 12:03
test_bytes.py
57.46
KB
-rw-r--r--
2021-09-24 12:03
test_bz2.py
36.49
KB
-rw-r--r--
2021-09-24 12:03
test_calendar.py
43.59
KB
-rw-r--r--
2021-09-24 12:03
test_call.py
3.01
KB
-rw-r--r--
2021-09-24 12:03
test_capi.py
23.21
KB
-rw-r--r--
2021-09-24 12:03
test_cgi.py
19.33
KB
-rw-r--r--
2021-09-24 12:03
test_cgitb.py
2.44
KB
-rw-r--r--
2021-09-24 12:03
test_charmapcodec.py
1.69
KB
-rw-r--r--
2021-09-24 12:03
test_class.py
15.08
KB
-rw-r--r--
2021-09-24 12:03
test_cmath.py
23.03
KB
-rw-r--r--
2021-09-24 12:03
test_cmd.py
6.11
KB
-rw-r--r--
2021-09-24 12:03
test_cmd_line.py
20.01
KB
-rw-r--r--
2021-09-24 12:03
test_cmd_line_script.py
28.18
KB
-rw-r--r--
2021-09-24 12:03
test_code.py
5.13
KB
-rw-r--r--
2021-09-24 12:03
test_code_module.py
4.14
KB
-rw-r--r--
2021-09-24 12:03
test_codeccallbacks.py
40.88
KB
-rw-r--r--
2021-09-24 12:03
test_codecencodings_cn.py
3.88
KB
-rw-r--r--
2021-09-24 12:03
test_codecencodings_hk.py
726
B
-rw-r--r--
2021-09-24 12:03
test_codecencodings_iso2022.py
1.38
KB
-rw-r--r--
2021-09-24 12:03
test_codecencodings_jp.py
4.82
KB
-rw-r--r--
2021-09-24 12:03
test_codecencodings_kr.py
2.98
KB
-rw-r--r--
2021-09-24 12:03
test_codecencodings_tw.py
706
B
-rw-r--r--
2021-09-24 12:03
test_codecmaps_cn.py
771
B
-rw-r--r--
2021-09-24 12:03
test_codecmaps_hk.py
411
B
-rw-r--r--
2021-09-24 12:03
test_codecmaps_jp.py
1.73
KB
-rw-r--r--
2021-09-24 12:03
test_codecmaps_kr.py
1.19
KB
-rw-r--r--
2021-09-24 12:03
test_codecmaps_tw.py
730
B
-rw-r--r--
2021-09-24 12:03
test_codecs.py
118.79
KB
-rw-r--r--
2021-09-24 12:03
test_codeop.py
7.39
KB
-rw-r--r--
2021-09-24 12:03
test_collections.py
62.14
KB
-rw-r--r--
2021-09-24 12:03
test_colorsys.py
3.83
KB
-rw-r--r--
2021-09-24 12:03
test_compare.py
3.82
KB
-rw-r--r--
2021-09-24 12:03
test_compile.py
26.33
KB
-rw-r--r--
2021-09-24 12:03
test_compileall.py
20.61
KB
-rw-r--r--
2021-09-24 12:03
test_complex.py
28.84
KB
-rw-r--r--
2021-09-24 12:03
test_concurrent_futures.py
25.28
KB
-rw-r--r--
2021-09-24 12:03
test_configparser.py
82.34
KB
-rw-r--r--
2021-09-24 12:03
test_contains.py
2.5
KB
-rw-r--r--
2021-09-24 12:03
test_contextlib.py
29.51
KB
-rw-r--r--
2021-09-24 12:03
test_copy.py
25.77
KB
-rw-r--r--
2021-09-24 12:03
test_copyreg.py
4.04
KB
-rw-r--r--
2021-09-24 12:03
test_coroutines.py
47.08
KB
-rw-r--r--
2021-09-24 12:03
test_cprofile.py
5.43
KB
-rw-r--r--
2021-09-24 12:03
test_crashers.py
1.16
KB
-rw-r--r--
2021-09-24 12:03
test_crypt.py
1.06
KB
-rw-r--r--
2021-09-24 12:03
test_csv.py
42.62
KB
-rw-r--r--
2021-09-24 12:03
test_ctypes.py
184
B
-rw-r--r--
2021-09-24 12:03
test_curses.py
17.6
KB
-rw-r--r--
2021-09-24 12:03
test_datetime.py
1.8
KB
-rw-r--r--
2021-09-24 12:03
test_dbm.py
6.05
KB
-rw-r--r--
2021-09-24 12:03
test_dbm_dumb.py
7.99
KB
-rw-r--r--
2021-09-24 12:03
test_dbm_gnu.py
3.28
KB
-rw-r--r--
2021-09-24 12:03
test_dbm_ndbm.py
2.17
KB
-rw-r--r--
2021-09-24 12:03
test_decimal.py
204.64
KB
-rw-r--r--
2021-09-24 12:03
test_decorators.py
9.48
KB
-rw-r--r--
2021-09-24 12:03
test_defaultdict.py
5.89
KB
-rw-r--r--
2021-09-24 12:03
test_deque.py
32.56
KB
-rw-r--r--
2021-09-24 12:03
test_descr.py
182.08
KB
-rw-r--r--
2021-09-24 12:03
test_descrtut.py
11.5
KB
-rw-r--r--
2021-09-24 12:03
test_devpoll.py
4.53
KB
-rw-r--r--
2021-09-24 12:03
test_dict.py
33.19
KB
-rw-r--r--
2021-09-24 12:03
test_dictcomps.py
3.69
KB
-rw-r--r--
2021-09-24 12:03
test_dictviews.py
10.13
KB
-rw-r--r--
2021-09-24 12:03
test_difflib.py
19.15
KB
-rw-r--r--
2021-09-24 12:03
test_difflib_expect.html
100.86
KB
-rw-r--r--
2019-11-02 02:32
test_dis.py
42.14
KB
-rw-r--r--
2021-09-24 12:03
test_distutils.py
375
B
-rw-r--r--
2021-09-24 12:03
test_doctest.py
93.24
KB
-rw-r--r--
2021-09-24 12:03
test_doctest.txt
300
B
-rw-r--r--
2019-11-02 02:32
test_doctest2.py
2.3
KB
-rw-r--r--
2021-09-24 12:03
test_doctest2.txt
392
B
-rw-r--r--
2019-11-02 02:32
test_doctest3.txt
82
B
-rw-r--r--
2019-11-02 02:32
test_doctest4.txt
244
B
-rw-r--r--
2019-11-02 02:32
test_docxmlrpc.py
8.73
KB
-rw-r--r--
2021-09-24 12:03
test_dummy_thread.py
9.16
KB
-rw-r--r--
2021-09-24 12:03
test_dummy_threading.py
1.7
KB
-rw-r--r--
2021-09-24 12:03
test_dynamic.py
4.31
KB
-rw-r--r--
2021-09-24 12:03
test_dynamicclassattribute.py
9.57
KB
-rw-r--r--
2021-09-24 12:03
test_eintr.py
687
B
-rw-r--r--
2021-09-24 12:03
test_ensurepip.py
11.4
KB
-rw-r--r--
2021-09-24 12:03
test_enum.py
60.52
KB
-rw-r--r--
2021-09-24 12:03
test_enumerate.py
7.68
KB
-rw-r--r--
2021-09-24 12:03
test_eof.py
803
B
-rw-r--r--
2021-09-24 12:03
test_epoll.py
8.62
KB
-rw-r--r--
2021-09-24 12:03
test_errno.py
1.04
KB
-rw-r--r--
2021-09-24 12:03
test_exception_variations.py
3.86
KB
-rw-r--r--
2021-09-24 12:03
test_exceptions.py
40.46
KB
-rw-r--r--
2021-09-24 12:03
test_extcall.py
11.52
KB
-rw-r--r--
2021-09-24 12:03
test_faulthandler.py
23.45
KB
-rw-r--r--
2021-09-24 12:03
test_fcntl.py
5.1
KB
-rw-r--r--
2021-09-24 12:03
test_file.py
11.09
KB
-rw-r--r--
2021-09-24 12:03
test_file_eintr.py
10.6
KB
-rw-r--r--
2021-09-24 12:03
test_filecmp.py
8.69
KB
-rw-r--r--
2021-09-24 12:03
test_fileinput.py
36.77
KB
-rw-r--r--
2021-09-24 12:03
test_fileio.py
18.57
KB
-rw-r--r--
2021-09-24 12:03
test_finalization.py
14.16
KB
-rw-r--r--
2021-09-24 12:03
test_float.py
60.05
KB
-rw-r--r--
2021-09-24 12:03
test_flufl.py
750
B
-rw-r--r--
2021-09-24 12:03
test_fnmatch.py
4.69
KB
-rw-r--r--
2021-09-24 12:03
test_fork1.py
3.74
KB
-rw-r--r--
2021-09-24 12:03
test_format.py
22.57
KB
-rw-r--r--
2021-09-24 12:03
test_fractions.py
25.84
KB
-rw-r--r--
2021-09-24 12:03
test_frame.py
4.37
KB
-rw-r--r--
2021-09-24 12:03
test_ftplib.py
37.08
KB
-rw-r--r--
2021-09-24 12:03
test_funcattrs.py
12.7
KB
-rw-r--r--
2021-09-24 12:03
test_functools.py
74.47
KB
-rw-r--r--
2021-09-24 12:03
test_future.py
3.74
KB
-rw-r--r--
2021-09-24 12:03
test_future3.py
490
B
-rw-r--r--
2021-09-24 12:03
test_future4.py
105
B
-rw-r--r--
2021-09-24 12:03
test_future5.py
510
B
-rw-r--r--
2021-09-24 12:03
test_gc.py
33.37
KB
-rw-r--r--
2021-09-24 12:03
test_gdb.py
36.38
KB
-rw-r--r--
2021-09-24 12:03
test_generators.py
58.2
KB
-rw-r--r--
2021-09-24 12:03
test_genericpath.py
18.36
KB
-rw-r--r--
2021-09-24 12:03
test_genexps.py
7.12
KB
-rw-r--r--
2021-09-24 12:03
test_getargs2.py
36.1
KB
-rw-r--r--
2021-09-24 12:03
test_getopt.py
6.75
KB
-rw-r--r--
2021-09-24 12:03
test_getpass.py
6.29
KB
-rw-r--r--
2021-09-24 12:03
test_gettext.py
32.8
KB
-rw-r--r--
2021-09-24 12:03
test_glob.py
12.39
KB
-rw-r--r--
2021-09-24 12:03
test_global.py
1.25
KB
-rw-r--r--
2021-09-24 12:03
test_grammar.py
36.48
KB
-rw-r--r--
2021-09-24 12:03
test_grp.py
3.22
KB
-rw-r--r--
2021-09-24 12:03
test_gzip.py
22.27
KB
-rw-r--r--
2021-09-24 12:03
test_hash.py
11.44
KB
-rw-r--r--
2021-09-24 12:03
test_hashlib.py
21.44
KB
-rw-r--r--
2021-09-24 12:03
test_heapq.py
14.64
KB
-rw-r--r--
2021-09-24 12:03
test_hmac.py
20.03
KB
-rw-r--r--
2021-09-24 12:03
test_html.py
4.23
KB
-rw-r--r--
2021-09-24 12:03
test_htmlparser.py
31.96
KB
-rw-r--r--
2021-09-24 12:03
test_http_cookiejar.py
74.54
KB
-rw-r--r--
2021-09-24 12:03
test_http_cookies.py
18.17
KB
-rw-r--r--
2021-09-24 12:03
test_httplib.py
65.96
KB
-rw-r--r--
2021-09-24 12:03
test_httpservers.py
38.29
KB
-rw-r--r--
2021-09-24 12:03
test_idle.py
756
B
-rw-r--r--
2021-09-24 12:03
test_imaplib.py
35.46
KB
-rw-r--r--
2021-09-24 12:03
test_imghdr.py
4.37
KB
-rw-r--r--
2021-09-24 12:03
test_imp.py
15.41
KB
-rw-r--r--
2021-09-24 12:03
test_index.py
8.37
KB
-rw-r--r--
2021-09-24 12:03
test_inspect.py
136.84
KB
-rw-r--r--
2021-09-24 12:03
test_int.py
17.71
KB
-rw-r--r--
2021-09-24 12:03
test_int_literal.py
6.89
KB
-rw-r--r--
2021-09-24 12:03
test_io.py
144.79
KB
-rw-r--r--
2021-09-24 12:03
test_ioctl.py
3.19
KB
-rw-r--r--
2021-09-24 12:03
test_ipaddress.py
85.14
KB
-rw-r--r--
2021-09-24 12:03
test_isinstance.py
9.77
KB
-rw-r--r--
2021-09-24 12:03
test_iter.py
31.25
KB
-rw-r--r--
2021-09-24 12:03
test_iterlen.py
7.12
KB
-rw-r--r--
2021-09-24 12:03
test_itertools.py
91.42
KB
-rw-r--r--
2021-09-24 12:03
test_keyword.py
5.7
KB
-rw-r--r--
2021-09-24 12:03
test_keywordonlyarg.py
7.05
KB
-rw-r--r--
2021-09-24 12:03
test_kqueue.py
8.14
KB
-rw-r--r--
2021-09-24 12:03
test_largefile.py
6.4
KB
-rw-r--r--
2021-09-24 12:03
test_lib2to3.py
101
B
-rw-r--r--
2021-09-24 12:03
test_linecache.py
6.43
KB
-rw-r--r--
2021-09-24 12:03
test_list.py
5.33
KB
-rw-r--r--
2021-09-24 12:03
test_listcomps.py
3.76
KB
-rw-r--r--
2021-09-24 12:03
test_locale.py
21.84
KB
-rw-r--r--
2021-09-24 12:03
test_logging.py
147.04
KB
-rw-r--r--
2021-09-24 12:03
test_long.py
48.38
KB
-rw-r--r--
2021-09-24 12:03
test_longexp.py
233
B
-rw-r--r--
2021-09-24 12:03
test_lzma.py
76.59
KB
-rw-r--r--
2021-09-24 12:03
test_macpath.py
6.04
KB
-rw-r--r--
2021-09-24 12:03
test_macurl2path.py
1.8
KB
-rw-r--r--
2021-09-24 12:03
test_mailbox.py
90.51
KB
-rw-r--r--
2021-09-24 12:03
test_mailcap.py
9.89
KB
-rw-r--r--
2021-09-24 12:03
test_marshal.py
17.7
KB
-rw-r--r--
2021-09-24 12:03
test_math.py
53.51
KB
-rw-r--r--
2021-09-24 12:03
test_memoryio.py
30.24
KB
-rw-r--r--
2021-09-24 12:03
test_memoryview.py
17.44
KB
-rw-r--r--
2021-09-24 12:03
test_metaclass.py
6.2
KB
-rw-r--r--
2021-09-24 12:03
test_mimetypes.py
4.08
KB
-rw-r--r--
2021-09-24 12:03
test_minidom.py
63.91
KB
-rw-r--r--
2021-09-24 12:03
test_mmap.py
27.3
KB
-rw-r--r--
2021-09-24 12:03
test_module.py
8.44
KB
-rw-r--r--
2021-09-24 12:03
test_modulefinder.py
9.05
KB
-rw-r--r--
2021-09-24 12:03
test_msilib.py
1.38
KB
-rw-r--r--
2021-09-24 12:03
test_multibytecodec.py
10.07
KB
-rw-r--r--
2021-09-24 12:03
test_multiprocessing_fork.py
174
B
-rw-r--r--
2021-09-24 12:03
test_multiprocessing_forkserver.py
180
B
-rw-r--r--
2021-09-24 12:03
test_multiprocessing_main_handling.py
11.26
KB
-rw-r--r--
2021-09-24 12:03
test_multiprocessing_spawn.py
175
B
-rw-r--r--
2021-09-24 12:03
test_netrc.py
4.5
KB
-rw-r--r--
2021-09-24 12:03
test_nis.py
1.14
KB
-rw-r--r--
2021-09-24 12:03
test_nntplib.py
60.53
KB
-rw-r--r--
2021-09-24 12:03
test_normalization.py
3.34
KB
-rw-r--r--
2021-09-24 12:03
test_ntpath.py
21.4
KB
-rw-r--r--
2021-09-24 12:03
test_numeric_tower.py
7.18
KB
-rw-r--r--
2021-09-24 12:03
test_opcodes.py
2.53
KB
-rw-r--r--
2021-09-24 12:03
test_openpty.py
600
B
-rw-r--r--
2021-09-24 12:03
test_operator.py
22.78
KB
-rw-r--r--
2021-09-24 12:03
test_optparse.py
60.8
KB
-rw-r--r--
2021-09-24 12:03
test_ordered_dict.py
26
KB
-rw-r--r--
2021-09-24 12:03
test_os.py
120.02
KB
-rw-r--r--
2021-09-24 12:03
test_ossaudiodev.py
7.05
KB
-rw-r--r--
2021-09-24 12:03
test_osx_env.py
1.3
KB
-rw-r--r--
2021-09-24 12:03
test_parser.py
29.6
KB
-rw-r--r--
2021-09-24 12:03
test_pathlib.py
85.31
KB
-rw-r--r--
2021-09-24 12:03
test_pdb.py
34.08
KB
-rw-r--r--
2021-09-24 12:03
test_peepholer.py
12.33
KB
-rw-r--r--
2021-09-24 12:03
test_pep247.py
2.12
KB
-rw-r--r--
2021-09-24 12:03
test_pep277.py
6.84
KB
-rw-r--r--
2021-09-24 12:03
test_pep3120.py
1.15
KB
-rw-r--r--
2021-09-24 12:03
test_pep3131.py
902
B
-rw-r--r--
2021-09-24 12:03
test_pep3151.py
7.24
KB
-rw-r--r--
2021-09-24 12:03
test_pep352.py
6.88
KB
-rw-r--r--
2021-09-24 12:03
test_pep380.py
28.8
KB
-rw-r--r--
2021-09-24 12:03
test_pep479.py
943
B
-rw-r--r--
2021-09-24 12:03
test_pickle.py
16.07
KB
-rw-r--r--
2021-09-24 12:03
test_pickletools.py
2.37
KB
-rw-r--r--
2021-09-24 12:03
test_pipes.py
6.32
KB
-rw-r--r--
2021-09-24 12:03
test_pkg.py
9.48
KB
-rw-r--r--
2021-09-24 12:03
test_pkgimport.py
2.67
KB
-rw-r--r--
2021-09-24 12:03
test_pkgutil.py
17.13
KB
-rw-r--r--
2021-09-24 12:03
test_platform.py
14.44
KB
-rw-r--r--
2021-09-24 12:03
test_plistlib.py
23.38
KB
-rw-r--r--
2021-09-24 12:03
test_poll.py
6.46
KB
-rw-r--r--
2021-09-24 12:03
test_popen.py
1.98
KB
-rw-r--r--
2021-09-24 12:03
test_poplib.py
16.25
KB
-rw-r--r--
2021-09-24 12:03
test_posix.py
51.69
KB
-rw-r--r--
2021-09-24 12:03
test_posixpath.py
26.01
KB
-rw-r--r--
2021-09-24 12:03
test_pow.py
4.38
KB
-rw-r--r--
2021-09-24 12:03
test_pprint.py
43.49
KB
-rw-r--r--
2021-09-24 12:03
test_print.py
4.16
KB
-rw-r--r--
2021-09-24 12:03
test_profile.py
7.61
KB
-rw-r--r--
2021-09-24 12:03
test_property.py
8.34
KB
-rw-r--r--
2021-09-24 12:03
test_pstats.py
1.17
KB
-rw-r--r--
2021-09-24 12:03
test_pty.py
10.9
KB
-rw-r--r--
2021-09-24 12:03
test_pulldom.py
12.08
KB
-rw-r--r--
2021-09-24 12:03
test_pwd.py
4.08
KB
-rw-r--r--
2021-09-24 12:03
test_py_compile.py
5.21
KB
-rw-r--r--
2021-09-24 12:03
test_pyclbr.py
6.79
KB
-rw-r--r--
2021-09-24 12:03
test_pydoc.py
39.47
KB
-rw-r--r--
2021-09-24 12:03
test_pyexpat.py
26.52
KB
-rw-r--r--
2021-09-24 12:03
test_queue.py
12.71
KB
-rw-r--r--
2021-09-24 12:03
test_quopri.py
7.78
KB
-rw-r--r--
2021-09-24 12:03
test_raise.py
11.03
KB
-rw-r--r--
2021-09-24 12:03
test_random.py
32.47
KB
-rw-r--r--
2021-09-24 12:03
test_range.py
24.19
KB
-rw-r--r--
2021-09-24 12:03
test_re.py
88.39
KB
-rw-r--r--
2021-09-24 12:03
test_readline.py
11.42
KB
-rw-r--r--
2021-09-24 12:03
test_regrtest.py
34.03
KB
-rw-r--r--
2021-09-24 12:03
test_reprlib.py
15.12
KB
-rw-r--r--
2021-09-24 12:03
test_resource.py
6.98
KB
-rw-r--r--
2021-09-24 12:03
test_richcmp.py
10.77
KB
-rw-r--r--
2021-09-24 12:03
test_rlcompleter.py
4.68
KB
-rw-r--r--
2021-09-24 12:03
test_robotparser.py
7.35
KB
-rw-r--r--
2021-09-24 12:03
test_runpy.py
30.95
KB
-rw-r--r--
2021-09-24 12:03
test_sax.py
43.59
KB
-rw-r--r--
2021-09-24 12:03
test_sched.py
6.43
KB
-rw-r--r--
2021-09-24 12:03
test_scope.py
19.7
KB
-rw-r--r--
2021-09-24 12:03
test_script_helper.py
5.02
KB
-rw-r--r--
2021-09-24 12:03
test_select.py
2.65
KB
-rw-r--r--
2021-09-24 12:03
test_selectors.py
16.27
KB
-rw-r--r--
2021-09-24 12:03
test_set.py
63.58
KB
-rw-r--r--
2021-09-24 12:03
test_setcomps.py
3.7
KB
-rw-r--r--
2021-09-24 12:03
test_shelve.py
6.24
KB
-rw-r--r--
2021-09-24 12:03
test_shlex.py
6.09
KB
-rw-r--r--
2021-09-24 12:03
test_shutil.py
74.79
KB
-rw-r--r--
2021-09-24 12:03
test_signal.py
38.1
KB
-rw-r--r--
2021-09-24 12:03
test_site.py
19.2
KB
-rw-r--r--
2021-09-24 12:03
test_slice.py
8.25
KB
-rw-r--r--
2021-09-24 12:03
test_smtpd.py
40.7
KB
-rw-r--r--
2021-09-24 12:03
test_smtplib.py
48.76
KB
-rw-r--r--
2021-09-24 12:03
test_smtpnet.py
2.7
KB
-rw-r--r--
2021-09-24 12:03
test_sndhdr.py
1.43
KB
-rw-r--r--
2021-09-24 12:03
test_socket.py
198.65
KB
-rw-r--r--
2021-09-24 12:03
test_socketserver.py
10.42
KB
-rw-r--r--
2021-09-24 12:03
test_sort.py
8.47
KB
-rw-r--r--
2021-09-24 12:03
test_source_encoding.py
7.88
KB
-rw-r--r--
2021-09-24 12:03
test_spwd.py
2.29
KB
-rw-r--r--
2021-09-24 12:03
test_sqlite.py
893
B
-rw-r--r--
2021-09-24 12:03
test_ssl.py
151.89
KB
-rw-r--r--
2021-09-24 12:03
test_startfile.py
1.17
KB
-rw-r--r--
2021-09-24 12:03
test_stat.py
7.99
KB
-rw-r--r--
2021-09-24 12:03
test_statistics.py
68.88
KB
-rw-r--r--
2021-09-24 12:03
test_strftime.py
7.42
KB
-rw-r--r--
2021-09-24 12:03
test_string.py
17.73
KB
-rw-r--r--
2021-09-24 12:03
test_stringprep.py
3.04
KB
-rw-r--r--
2021-09-24 12:03
test_strlit.py
7.96
KB
-rw-r--r--
2021-09-24 12:03
test_strptime.py
28.83
KB
-rw-r--r--
2021-09-24 12:03
test_strtod.py
20.06
KB
-rw-r--r--
2021-09-24 12:03
test_struct.py
26.99
KB
-rw-r--r--
2021-09-24 12:03
test_structmembers.py
4.7
KB
-rw-r--r--
2021-09-24 12:03
test_structseq.py
3.87
KB
-rw-r--r--
2021-09-24 12:03
test_subprocess.py
118.75
KB
-rw-r--r--
2021-09-24 12:03
test_sunau.py
4.55
KB
-rw-r--r--
2021-09-24 12:03
test_sundry.py
2.08
KB
-rw-r--r--
2021-09-24 12:03
test_super.py
4.73
KB
-rw-r--r--
2021-09-24 12:03
test_support.py
12.39
KB
-rw-r--r--
2021-09-24 12:03
test_symtable.py
6.17
KB
-rw-r--r--
2021-09-24 12:03
test_syntax.py
18.75
KB
-rw-r--r--
2021-09-24 12:03
test_sys.py
44.78
KB
-rw-r--r--
2021-09-24 12:03
test_sys_setprofile.py
10.9
KB
-rw-r--r--
2021-09-24 12:03
test_sys_settrace.py
24.93
KB
-rw-r--r--
2021-09-24 12:03
test_sysconfig.py
17.68
KB
-rw-r--r--
2021-09-24 12:03
test_syslog.py
1.15
KB
-rw-r--r--
2021-09-24 12:03
test_tarfile.py
91.51
KB
-rw-r--r--
2021-09-24 12:03
test_tcl.py
27.43
KB
-rw-r--r--
2021-09-24 12:03
test_telnetlib.py
12.56
KB
-rw-r--r--
2021-09-24 12:03
test_tempfile.py
50.21
KB
-rw-r--r--
2021-09-24 12:03
test_textwrap.py
37.69
KB
-rw-r--r--
2021-09-24 12:03
test_thread.py
8.06
KB
-rw-r--r--
2021-09-24 12:03
test_threaded_import.py
8.52
KB
-rw-r--r--
2021-09-24 12:03
test_threadedtempfile.py
1.89
KB
-rw-r--r--
2021-09-24 12:03
test_threading.py
38.92
KB
-rw-r--r--
2021-09-24 12:03
test_threading_local.py
6.13
KB
-rw-r--r--
2021-09-24 12:03
test_threadsignals.py
9.22
KB
-rw-r--r--
2021-09-24 12:03
test_time.py
38.01
KB
-rw-r--r--
2021-09-24 12:03
test_timeit.py
13.61
KB
-rw-r--r--
2021-09-24 12:03
test_timeout.py
11.11
KB
-rw-r--r--
2021-09-24 12:03
test_tix.py
756
B
-rw-r--r--
2021-09-24 12:03
test_tk.py
362
B
-rw-r--r--
2021-09-24 12:03
test_tokenize.py
58.62
KB
-rw-r--r--
2021-09-24 12:03
test_trace.py
14.58
KB
-rw-r--r--
2021-09-24 12:03
test_traceback.py
34.72
KB
-rw-r--r--
2021-09-24 12:03
test_tracemalloc.py
30.1
KB
-rw-r--r--
2021-09-24 12:03
test_ttk_guionly.py
756
B
-rw-r--r--
2021-09-24 12:03
test_ttk_textonly.py
309
B
-rw-r--r--
2021-09-24 12:03
test_tuple.py
7.35
KB
-rw-r--r--
2021-09-24 12:03
test_turtle.py
12.36
KB
-rw-r--r--
2021-09-24 12:03
test_typechecks.py
2.55
KB
-rw-r--r--
2021-09-24 12:03
test_types.py
52.54
KB
-rw-r--r--
2021-09-24 12:03
test_typing.py
79.92
KB
-rw-r--r--
2021-09-24 12:03
test_ucn.py
9.35
KB
-rw-r--r--
2021-09-24 12:03
test_unary.py
1.63
KB
-rw-r--r--
2021-09-24 12:03
test_unicode.py
127.39
KB
-rw-r--r--
2021-09-24 12:03
test_unicode_file.py
5.73
KB
-rw-r--r--
2021-09-24 12:03
test_unicodedata.py
11.89
KB
-rw-r--r--
2021-09-24 12:03
test_unittest.py
286
B
-rw-r--r--
2021-09-24 12:03
test_univnewlines.py
3.83
KB
-rw-r--r--
2021-09-24 12:03
test_unpack.py
2.57
KB
-rw-r--r--
2021-09-24 12:03
test_unpack_ex.py
8.74
KB
-rw-r--r--
2021-09-24 12:03
test_urllib.py
66.43
KB
-rw-r--r--
2021-09-24 12:03
test_urllib2.py
71.83
KB
-rw-r--r--
2021-09-24 12:03
test_urllib2_localnet.py
24.11
KB
-rw-r--r--
2021-09-24 12:03
test_urllib2net.py
12.36
KB
-rw-r--r--
2021-09-24 12:03
test_urllib_response.py
1.69
KB
-rw-r--r--
2021-09-24 12:03
test_urllibnet.py
8.84
KB
-rw-r--r--
2021-09-24 12:03
test_urlparse.py
55.89
KB
-rw-r--r--
2021-09-24 12:03
test_userdict.py
7.66
KB
-rw-r--r--
2021-09-24 12:03
test_userlist.py
1.82
KB
-rw-r--r--
2021-09-24 12:03
test_userstring.py
1.46
KB
-rw-r--r--
2021-09-24 12:03
test_uu.py
7.39
KB
-rw-r--r--
2021-09-24 12:03
test_uuid.py
22.12
KB
-rw-r--r--
2021-09-24 12:03
test_venv.py
17.43
KB
-rw-r--r--
2021-09-24 12:03
test_wait3.py
1.16
KB
-rw-r--r--
2021-09-24 12:03
test_wait4.py
1.15
KB
-rw-r--r--
2021-09-24 12:03
test_wave.py
3.93
KB
-rw-r--r--
2021-09-24 12:03
test_weakref.py
64.45
KB
-rw-r--r--
2021-09-24 12:03
test_weakset.py
15.08
KB
-rw-r--r--
2021-09-24 12:03
test_webbrowser.py
6.32
KB
-rw-r--r--
2021-09-24 12:03
test_winreg.py
20.52
KB
-rw-r--r--
2021-09-24 12:03
test_winsound.py
3.72
KB
-rw-r--r--
2021-09-24 12:03
test_with.py
25.68
KB
-rw-r--r--
2021-09-24 12:03
test_wsgiref.py
27.08
KB
-rw-r--r--
2021-09-24 12:03
test_xdrlib.py
2.17
KB
-rw-r--r--
2021-09-24 12:03
test_xml_dom_minicompat.py
4.18
KB
-rw-r--r--
2021-09-24 12:03
test_xml_etree.py
112.18
KB
-rw-r--r--
2021-09-24 12:03
test_xml_etree_c.py
4.3
KB
-rw-r--r--
2021-09-24 12:03
test_xmlrpc.py
51.75
KB
-rw-r--r--
2021-09-24 12:03
test_xmlrpc_net.py
1.03
KB
-rw-r--r--
2021-09-24 12:03
test_zipapp.py
13.74
KB
-rw-r--r--
2021-09-24 12:03
test_zipfile.py
85.1
KB
-rw-r--r--
2021-09-24 12:03
test_zipfile64.py
5.72
KB
-rw-r--r--
2021-09-24 12:03
test_zipimport.py
26.9
KB
-rw-r--r--
2021-09-24 12:03
test_zipimport_support.py
10.47
KB
-rw-r--r--
2021-09-24 12:03
test_zlib.py
32.46
KB
-rw-r--r--
2021-09-24 12:03
testcodec.py
1.02
KB
-rw-r--r--
2021-09-24 12:03
testtar.tar
425
KB
-rw-r--r--
2019-11-02 02:32
tf_inherit_check.py
714
B
-rw-r--r--
2021-09-24 12:03
threaded_import_hangers.py
1.45
KB
-rw-r--r--
2021-09-24 12:03
time_hashlib.py
2.83
KB
-rw-r--r--
2021-09-24 12:03
tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt
444
B
-rw-r--r--
2019-11-02 02:32
tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt
303
B
-rw-r--r--
2019-11-02 02:32
tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt
421
B
-rw-r--r--
2019-11-02 02:32
tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt
327
B
-rw-r--r--
2019-11-02 02:32
tokenize_tests.txt
2.65
KB
-rw-r--r--
2019-11-02 02:32
win_console_handler.py
1.38
KB
-rw-r--r--
2021-09-24 12:03
wrongcert.pem
1.84
KB
-rw-r--r--
2019-11-02 02:32
xmltests.py
499
B
-rw-r--r--
2021-09-24 12:03
zip_cp437_header.zip
270
B
-rw-r--r--
2019-11-02 02:32
zipdir.zip
374
B
-rw-r--r--
2019-11-02 02:32
Save
Rename
''' Tests for fileinput module. Nick Mathewson ''' import os import sys import re import fileinput import collections import builtins import unittest try: import bz2 except ImportError: bz2 = None try: import gzip except ImportError: gzip = None from io import BytesIO, StringIO from fileinput import FileInput, hook_encoded from test.support import verbose, TESTFN, run_unittest, check_warnings from test.support import unlink as safe_unlink from unittest import mock # The fileinput module has 2 interfaces: the FileInput class which does # all the work, and a few functions (input, etc.) that use a global _state # variable. # Write lines (a list of lines) to temp file number i, and return the # temp file's name. def writeTmp(i, lines, mode='w'): # opening in text mode is the default name = TESTFN + str(i) f = open(name, mode) for line in lines: f.write(line) f.close() return name def remove_tempfiles(*names): for name in names: if name: safe_unlink(name) class LineReader: def __init__(self): self._linesread = [] @property def linesread(self): try: return self._linesread[:] finally: self._linesread = [] def openhook(self, filename, mode): self.it = iter(filename.splitlines(True)) return self def readline(self, size=None): line = next(self.it, '') self._linesread.append(line) return line def readlines(self, hint=-1): lines = [] size = 0 while True: line = self.readline() if not line: return lines lines.append(line) size += len(line) if size >= hint: return lines def close(self): pass class BufferSizesTests(unittest.TestCase): def test_buffer_sizes(self): # First, run the tests with default and teeny buffer size. for round, bs in (0, 0), (1, 30): t1 = t2 = t3 = t4 = None try: t1 = writeTmp(1, ["Line %s of file 1\n" % (i+1) for i in range(15)]) t2 = writeTmp(2, ["Line %s of file 2\n" % (i+1) for i in range(10)]) t3 = writeTmp(3, ["Line %s of file 3\n" % (i+1) for i in range(5)]) t4 = writeTmp(4, ["Line %s of file 4\n" % (i+1) for i in range(1)]) self.buffer_size_test(t1, t2, t3, t4, bs, round) finally: remove_tempfiles(t1, t2, t3, t4) def buffer_size_test(self, t1, t2, t3, t4, bs=0, round=0): pat = re.compile(r'LINE (\d+) OF FILE (\d+)') start = 1 + round*6 if verbose: print('%s. Simple iteration (bs=%s)' % (start+0, bs)) fi = FileInput(files=(t1, t2, t3, t4), bufsize=bs) lines = list(fi) fi.close() self.assertEqual(len(lines), 31) self.assertEqual(lines[4], 'Line 5 of file 1\n') self.assertEqual(lines[30], 'Line 1 of file 4\n') self.assertEqual(fi.lineno(), 31) self.assertEqual(fi.filename(), t4) if verbose: print('%s. Status variables (bs=%s)' % (start+1, bs)) fi = FileInput(files=(t1, t2, t3, t4), bufsize=bs) s = "x" while s and s != 'Line 6 of file 2\n': s = fi.readline() self.assertEqual(fi.filename(), t2) self.assertEqual(fi.lineno(), 21) self.assertEqual(fi.filelineno(), 6) self.assertFalse(fi.isfirstline()) self.assertFalse(fi.isstdin()) if verbose: print('%s. Nextfile (bs=%s)' % (start+2, bs)) fi.nextfile() self.assertEqual(fi.readline(), 'Line 1 of file 3\n') self.assertEqual(fi.lineno(), 22) fi.close() if verbose: print('%s. Stdin (bs=%s)' % (start+3, bs)) fi = FileInput(files=(t1, t2, t3, t4, '-'), bufsize=bs) savestdin = sys.stdin try: sys.stdin = StringIO("Line 1 of stdin\nLine 2 of stdin\n") lines = list(fi) self.assertEqual(len(lines), 33) self.assertEqual(lines[32], 'Line 2 of stdin\n') self.assertEqual(fi.filename(), '<stdin>') fi.nextfile() finally: sys.stdin = savestdin if verbose: print('%s. Boundary conditions (bs=%s)' % (start+4, bs)) fi = FileInput(files=(t1, t2, t3, t4), bufsize=bs) self.assertEqual(fi.lineno(), 0) self.assertEqual(fi.filename(), None) fi.nextfile() self.assertEqual(fi.lineno(), 0) self.assertEqual(fi.filename(), None) if verbose: print('%s. Inplace (bs=%s)' % (start+5, bs)) savestdout = sys.stdout try: fi = FileInput(files=(t1, t2, t3, t4), inplace=1, bufsize=bs) for line in fi: line = line[:-1].upper() print(line) fi.close() finally: sys.stdout = savestdout fi = FileInput(files=(t1, t2, t3, t4), bufsize=bs) for line in fi: self.assertEqual(line[-1], '\n') m = pat.match(line[:-1]) self.assertNotEqual(m, None) self.assertEqual(int(m.group(1)), fi.filelineno()) fi.close() class UnconditionallyRaise: def __init__(self, exception_type): self.exception_type = exception_type self.invoked = False def __call__(self, *args, **kwargs): self.invoked = True raise self.exception_type() class FileInputTests(unittest.TestCase): def test_zero_byte_files(self): t1 = t2 = t3 = t4 = None try: t1 = writeTmp(1, [""]) t2 = writeTmp(2, [""]) t3 = writeTmp(3, ["The only line there is.\n"]) t4 = writeTmp(4, [""]) fi = FileInput(files=(t1, t2, t3, t4)) line = fi.readline() self.assertEqual(line, 'The only line there is.\n') self.assertEqual(fi.lineno(), 1) self.assertEqual(fi.filelineno(), 1) self.assertEqual(fi.filename(), t3) line = fi.readline() self.assertFalse(line) self.assertEqual(fi.lineno(), 1) self.assertEqual(fi.filelineno(), 0) self.assertEqual(fi.filename(), t4) fi.close() finally: remove_tempfiles(t1, t2, t3, t4) def test_files_that_dont_end_with_newline(self): t1 = t2 = None try: t1 = writeTmp(1, ["A\nB\nC"]) t2 = writeTmp(2, ["D\nE\nF"]) fi = FileInput(files=(t1, t2)) lines = list(fi) self.assertEqual(lines, ["A\n", "B\n", "C", "D\n", "E\n", "F"]) self.assertEqual(fi.filelineno(), 3) self.assertEqual(fi.lineno(), 6) finally: remove_tempfiles(t1, t2) ## def test_unicode_filenames(self): ## # XXX A unicode string is always returned by writeTmp. ## # So is this needed? ## try: ## t1 = writeTmp(1, ["A\nB"]) ## encoding = sys.getfilesystemencoding() ## if encoding is None: ## encoding = 'ascii' ## fi = FileInput(files=str(t1, encoding)) ## lines = list(fi) ## self.assertEqual(lines, ["A\n", "B"]) ## finally: ## remove_tempfiles(t1) def test_fileno(self): t1 = t2 = None try: t1 = writeTmp(1, ["A\nB"]) t2 = writeTmp(2, ["C\nD"]) fi = FileInput(files=(t1, t2)) self.assertEqual(fi.fileno(), -1) line =next( fi) self.assertNotEqual(fi.fileno(), -1) fi.nextfile() self.assertEqual(fi.fileno(), -1) line = list(fi) self.assertEqual(fi.fileno(), -1) finally: remove_tempfiles(t1, t2) def test_opening_mode(self): try: # invalid mode, should raise ValueError fi = FileInput(mode="w") self.fail("FileInput should reject invalid mode argument") except ValueError: pass t1 = None try: # try opening in universal newline mode t1 = writeTmp(1, [b"A\nB\r\nC\rD"], mode="wb") with check_warnings(('', DeprecationWarning)): fi = FileInput(files=t1, mode="U") with check_warnings(('', DeprecationWarning)): lines = list(fi) self.assertEqual(lines, ["A\n", "B\n", "C\n", "D"]) finally: remove_tempfiles(t1) def test_stdin_binary_mode(self): with mock.patch('sys.stdin') as m_stdin: m_stdin.buffer = BytesIO(b'spam, bacon, sausage, and spam') fi = FileInput(files=['-'], mode='rb') lines = list(fi) self.assertEqual(lines, [b'spam, bacon, sausage, and spam']) def test_detached_stdin_binary_mode(self): orig_stdin = sys.stdin try: sys.stdin = BytesIO(b'spam, bacon, sausage, and spam') self.assertFalse(hasattr(sys.stdin, 'buffer')) fi = FileInput(files=['-'], mode='rb') lines = list(fi) self.assertEqual(lines, [b'spam, bacon, sausage, and spam']) finally: sys.stdin = orig_stdin def test_file_opening_hook(self): try: # cannot use openhook and inplace mode fi = FileInput(inplace=1, openhook=lambda f, m: None) self.fail("FileInput should raise if both inplace " "and openhook arguments are given") except ValueError: pass try: fi = FileInput(openhook=1) self.fail("FileInput should check openhook for being callable") except ValueError: pass class CustomOpenHook: def __init__(self): self.invoked = False def __call__(self, *args): self.invoked = True return open(*args) t = writeTmp(1, ["\n"]) self.addCleanup(remove_tempfiles, t) custom_open_hook = CustomOpenHook() with FileInput([t], openhook=custom_open_hook) as fi: fi.readline() self.assertTrue(custom_open_hook.invoked, "openhook not invoked") def test_readline(self): with open(TESTFN, 'wb') as f: f.write(b'A\nB\r\nC\r') # Fill TextIOWrapper buffer. f.write(b'123456789\n' * 1000) # Issue #20501: readline() shouldn't read whole file. f.write(b'\x80') self.addCleanup(safe_unlink, TESTFN) with FileInput(files=TESTFN, openhook=hook_encoded('ascii')) as fi: try: self.assertEqual(fi.readline(), 'A\n') self.assertEqual(fi.readline(), 'B\n') self.assertEqual(fi.readline(), 'C\n') except UnicodeDecodeError: self.fail('Read to end of file') with self.assertRaises(UnicodeDecodeError): # Read to the end of file. list(fi) self.assertEqual(fi.readline(), '') self.assertEqual(fi.readline(), '') def test_readline_binary_mode(self): with open(TESTFN, 'wb') as f: f.write(b'A\nB\r\nC\rD') self.addCleanup(safe_unlink, TESTFN) with FileInput(files=TESTFN, mode='rb') as fi: self.assertEqual(fi.readline(), b'A\n') self.assertEqual(fi.readline(), b'B\r\n') self.assertEqual(fi.readline(), b'C\rD') # Read to the end of file. self.assertEqual(fi.readline(), b'') self.assertEqual(fi.readline(), b'') def test_context_manager(self): try: t1 = writeTmp(1, ["A\nB\nC"]) t2 = writeTmp(2, ["D\nE\nF"]) with FileInput(files=(t1, t2)) as fi: lines = list(fi) self.assertEqual(lines, ["A\n", "B\n", "C", "D\n", "E\n", "F"]) self.assertEqual(fi.filelineno(), 3) self.assertEqual(fi.lineno(), 6) self.assertEqual(fi._files, ()) finally: remove_tempfiles(t1, t2) def test_close_on_exception(self): try: t1 = writeTmp(1, [""]) with FileInput(files=t1) as fi: raise OSError except OSError: self.assertEqual(fi._files, ()) finally: remove_tempfiles(t1) def test_empty_files_list_specified_to_constructor(self): with FileInput(files=[]) as fi: self.assertEqual(fi._files, ('-',)) def test__getitem__(self): """Tests invoking FileInput.__getitem__() with the current line number""" t = writeTmp(1, ["line1\n", "line2\n"]) self.addCleanup(remove_tempfiles, t) with FileInput(files=[t]) as fi: retval1 = fi[0] self.assertEqual(retval1, "line1\n") retval2 = fi[1] self.assertEqual(retval2, "line2\n") def test__getitem__invalid_key(self): """Tests invoking FileInput.__getitem__() with an index unequal to the line number""" t = writeTmp(1, ["line1\n", "line2\n"]) self.addCleanup(remove_tempfiles, t) with FileInput(files=[t]) as fi: with self.assertRaises(RuntimeError) as cm: fi[1] self.assertEqual(cm.exception.args, ("accessing lines out of order",)) def test__getitem__eof(self): """Tests invoking FileInput.__getitem__() with the line number but at end-of-input""" t = writeTmp(1, []) self.addCleanup(remove_tempfiles, t) with FileInput(files=[t]) as fi: with self.assertRaises(IndexError) as cm: fi[0] self.assertEqual(cm.exception.args, ("end of input reached",)) def test_nextfile_oserror_deleting_backup(self): """Tests invoking FileInput.nextfile() when the attempt to delete the backup file would raise OSError. This error is expected to be silently ignored""" os_unlink_orig = os.unlink os_unlink_replacement = UnconditionallyRaise(OSError) try: t = writeTmp(1, ["\n"]) self.addCleanup(remove_tempfiles, t) with FileInput(files=[t], inplace=True) as fi: next(fi) # make sure the file is opened os.unlink = os_unlink_replacement fi.nextfile() finally: os.unlink = os_unlink_orig # sanity check to make sure that our test scenario was actually hit self.assertTrue(os_unlink_replacement.invoked, "os.unlink() was not invoked") def test_readline_os_fstat_raises_OSError(self): """Tests invoking FileInput.readline() when os.fstat() raises OSError. This exception should be silently discarded.""" os_fstat_orig = os.fstat os_fstat_replacement = UnconditionallyRaise(OSError) try: t = writeTmp(1, ["\n"]) self.addCleanup(remove_tempfiles, t) with FileInput(files=[t], inplace=True) as fi: os.fstat = os_fstat_replacement fi.readline() finally: os.fstat = os_fstat_orig # sanity check to make sure that our test scenario was actually hit self.assertTrue(os_fstat_replacement.invoked, "os.fstat() was not invoked") @unittest.skipIf(not hasattr(os, "chmod"), "os.chmod does not exist") def test_readline_os_chmod_raises_OSError(self): """Tests invoking FileInput.readline() when os.chmod() raises OSError. This exception should be silently discarded.""" os_chmod_orig = os.chmod os_chmod_replacement = UnconditionallyRaise(OSError) try: t = writeTmp(1, ["\n"]) self.addCleanup(remove_tempfiles, t) with FileInput(files=[t], inplace=True) as fi: os.chmod = os_chmod_replacement fi.readline() finally: os.chmod = os_chmod_orig # sanity check to make sure that our test scenario was actually hit self.assertTrue(os_chmod_replacement.invoked, "os.fstat() was not invoked") def test_fileno_when_ValueError_raised(self): class FilenoRaisesValueError(UnconditionallyRaise): def __init__(self): UnconditionallyRaise.__init__(self, ValueError) def fileno(self): self.__call__() unconditionally_raise_ValueError = FilenoRaisesValueError() t = writeTmp(1, ["\n"]) self.addCleanup(remove_tempfiles, t) with FileInput(files=[t]) as fi: file_backup = fi._file try: fi._file = unconditionally_raise_ValueError result = fi.fileno() finally: fi._file = file_backup # make sure the file gets cleaned up # sanity check to make sure that our test scenario was actually hit self.assertTrue(unconditionally_raise_ValueError.invoked, "_file.fileno() was not invoked") self.assertEqual(result, -1, "fileno() should return -1") def test_readline_buffering(self): src = LineReader() with FileInput(files=['line1\nline2', 'line3\n'], openhook=src.openhook) as fi: self.assertEqual(src.linesread, []) self.assertEqual(fi.readline(), 'line1\n') self.assertEqual(src.linesread, ['line1\n']) self.assertEqual(fi.readline(), 'line2') self.assertEqual(src.linesread, ['line2']) self.assertEqual(fi.readline(), 'line3\n') self.assertEqual(src.linesread, ['', 'line3\n']) self.assertEqual(fi.readline(), '') self.assertEqual(src.linesread, ['']) self.assertEqual(fi.readline(), '') self.assertEqual(src.linesread, []) def test_iteration_buffering(self): src = LineReader() with FileInput(files=['line1\nline2', 'line3\n'], openhook=src.openhook) as fi: self.assertEqual(src.linesread, []) self.assertEqual(next(fi), 'line1\n') self.assertEqual(src.linesread, ['line1\n']) self.assertEqual(next(fi), 'line2') self.assertEqual(src.linesread, ['line2']) self.assertEqual(next(fi), 'line3\n') self.assertEqual(src.linesread, ['', 'line3\n']) self.assertRaises(StopIteration, next, fi) self.assertEqual(src.linesread, ['']) self.assertRaises(StopIteration, next, fi) self.assertEqual(src.linesread, []) class MockFileInput: """A class that mocks out fileinput.FileInput for use during unit tests""" def __init__(self, files=None, inplace=False, backup="", bufsize=0, mode="r", openhook=None): self.files = files self.inplace = inplace self.backup = backup self.bufsize = bufsize self.mode = mode self.openhook = openhook self._file = None self.invocation_counts = collections.defaultdict(lambda: 0) self.return_values = {} def close(self): self.invocation_counts["close"] += 1 def nextfile(self): self.invocation_counts["nextfile"] += 1 return self.return_values["nextfile"] def filename(self): self.invocation_counts["filename"] += 1 return self.return_values["filename"] def lineno(self): self.invocation_counts["lineno"] += 1 return self.return_values["lineno"] def filelineno(self): self.invocation_counts["filelineno"] += 1 return self.return_values["filelineno"] def fileno(self): self.invocation_counts["fileno"] += 1 return self.return_values["fileno"] def isfirstline(self): self.invocation_counts["isfirstline"] += 1 return self.return_values["isfirstline"] def isstdin(self): self.invocation_counts["isstdin"] += 1 return self.return_values["isstdin"] class BaseFileInputGlobalMethodsTest(unittest.TestCase): """Base class for unit tests for the global function of the fileinput module.""" def setUp(self): self._orig_state = fileinput._state self._orig_FileInput = fileinput.FileInput fileinput.FileInput = MockFileInput def tearDown(self): fileinput.FileInput = self._orig_FileInput fileinput._state = self._orig_state def assertExactlyOneInvocation(self, mock_file_input, method_name): # assert that the method with the given name was invoked once actual_count = mock_file_input.invocation_counts[method_name] self.assertEqual(actual_count, 1, method_name) # assert that no other unexpected methods were invoked actual_total_count = len(mock_file_input.invocation_counts) self.assertEqual(actual_total_count, 1) class Test_fileinput_input(BaseFileInputGlobalMethodsTest): """Unit tests for fileinput.input()""" def test_state_is_not_None_and_state_file_is_not_None(self): """Tests invoking fileinput.input() when fileinput._state is not None and its _file attribute is also not None. Expect RuntimeError to be raised with a meaningful error message and for fileinput._state to *not* be modified.""" instance = MockFileInput() instance._file = object() fileinput._state = instance with self.assertRaises(RuntimeError) as cm: fileinput.input() self.assertEqual(("input() already active",), cm.exception.args) self.assertIs(instance, fileinput._state, "fileinput._state") def test_state_is_not_None_and_state_file_is_None(self): """Tests invoking fileinput.input() when fileinput._state is not None but its _file attribute *is* None. Expect it to create and return a new fileinput.FileInput object with all method parameters passed explicitly to the __init__() method; also ensure that fileinput._state is set to the returned instance.""" instance = MockFileInput() instance._file = None fileinput._state = instance self.do_test_call_input() def test_state_is_None(self): """Tests invoking fileinput.input() when fileinput._state is None Expect it to create and return a new fileinput.FileInput object with all method parameters passed explicitly to the __init__() method; also ensure that fileinput._state is set to the returned instance.""" fileinput._state = None self.do_test_call_input() def do_test_call_input(self): """Tests that fileinput.input() creates a new fileinput.FileInput object, passing the given parameters unmodified to fileinput.FileInput.__init__(). Note that this test depends on the monkey patching of fileinput.FileInput done by setUp().""" files = object() inplace = object() backup = object() bufsize = object() mode = object() openhook = object() # call fileinput.input() with different values for each argument result = fileinput.input(files=files, inplace=inplace, backup=backup, bufsize=bufsize, mode=mode, openhook=openhook) # ensure fileinput._state was set to the returned object self.assertIs(result, fileinput._state, "fileinput._state") # ensure the parameters to fileinput.input() were passed directly # to FileInput.__init__() self.assertIs(files, result.files, "files") self.assertIs(inplace, result.inplace, "inplace") self.assertIs(backup, result.backup, "backup") self.assertIs(bufsize, result.bufsize, "bufsize") self.assertIs(mode, result.mode, "mode") self.assertIs(openhook, result.openhook, "openhook") class Test_fileinput_close(BaseFileInputGlobalMethodsTest): """Unit tests for fileinput.close()""" def test_state_is_None(self): """Tests that fileinput.close() does nothing if fileinput._state is None""" fileinput._state = None fileinput.close() self.assertIsNone(fileinput._state) def test_state_is_not_None(self): """Tests that fileinput.close() invokes close() on fileinput._state and sets _state=None""" instance = MockFileInput() fileinput._state = instance fileinput.close() self.assertExactlyOneInvocation(instance, "close") self.assertIsNone(fileinput._state) class Test_fileinput_nextfile(BaseFileInputGlobalMethodsTest): """Unit tests for fileinput.nextfile()""" def test_state_is_None(self): """Tests fileinput.nextfile() when fileinput._state is None. Ensure that it raises RuntimeError with a meaningful error message and does not modify fileinput._state""" fileinput._state = None with self.assertRaises(RuntimeError) as cm: fileinput.nextfile() self.assertEqual(("no active input()",), cm.exception.args) self.assertIsNone(fileinput._state) def test_state_is_not_None(self): """Tests fileinput.nextfile() when fileinput._state is not None. Ensure that it invokes fileinput._state.nextfile() exactly once, returns whatever it returns, and does not modify fileinput._state to point to a different object.""" nextfile_retval = object() instance = MockFileInput() instance.return_values["nextfile"] = nextfile_retval fileinput._state = instance retval = fileinput.nextfile() self.assertExactlyOneInvocation(instance, "nextfile") self.assertIs(retval, nextfile_retval) self.assertIs(fileinput._state, instance) class Test_fileinput_filename(BaseFileInputGlobalMethodsTest): """Unit tests for fileinput.filename()""" def test_state_is_None(self): """Tests fileinput.filename() when fileinput._state is None. Ensure that it raises RuntimeError with a meaningful error message and does not modify fileinput._state""" fileinput._state = None with self.assertRaises(RuntimeError) as cm: fileinput.filename() self.assertEqual(("no active input()",), cm.exception.args) self.assertIsNone(fileinput._state) def test_state_is_not_None(self): """Tests fileinput.filename() when fileinput._state is not None. Ensure that it invokes fileinput._state.filename() exactly once, returns whatever it returns, and does not modify fileinput._state to point to a different object.""" filename_retval = object() instance = MockFileInput() instance.return_values["filename"] = filename_retval fileinput._state = instance retval = fileinput.filename() self.assertExactlyOneInvocation(instance, "filename") self.assertIs(retval, filename_retval) self.assertIs(fileinput._state, instance) class Test_fileinput_lineno(BaseFileInputGlobalMethodsTest): """Unit tests for fileinput.lineno()""" def test_state_is_None(self): """Tests fileinput.lineno() when fileinput._state is None. Ensure that it raises RuntimeError with a meaningful error message and does not modify fileinput._state""" fileinput._state = None with self.assertRaises(RuntimeError) as cm: fileinput.lineno() self.assertEqual(("no active input()",), cm.exception.args) self.assertIsNone(fileinput._state) def test_state_is_not_None(self): """Tests fileinput.lineno() when fileinput._state is not None. Ensure that it invokes fileinput._state.lineno() exactly once, returns whatever it returns, and does not modify fileinput._state to point to a different object.""" lineno_retval = object() instance = MockFileInput() instance.return_values["lineno"] = lineno_retval fileinput._state = instance retval = fileinput.lineno() self.assertExactlyOneInvocation(instance, "lineno") self.assertIs(retval, lineno_retval) self.assertIs(fileinput._state, instance) class Test_fileinput_filelineno(BaseFileInputGlobalMethodsTest): """Unit tests for fileinput.filelineno()""" def test_state_is_None(self): """Tests fileinput.filelineno() when fileinput._state is None. Ensure that it raises RuntimeError with a meaningful error message and does not modify fileinput._state""" fileinput._state = None with self.assertRaises(RuntimeError) as cm: fileinput.filelineno() self.assertEqual(("no active input()",), cm.exception.args) self.assertIsNone(fileinput._state) def test_state_is_not_None(self): """Tests fileinput.filelineno() when fileinput._state is not None. Ensure that it invokes fileinput._state.filelineno() exactly once, returns whatever it returns, and does not modify fileinput._state to point to a different object.""" filelineno_retval = object() instance = MockFileInput() instance.return_values["filelineno"] = filelineno_retval fileinput._state = instance retval = fileinput.filelineno() self.assertExactlyOneInvocation(instance, "filelineno") self.assertIs(retval, filelineno_retval) self.assertIs(fileinput._state, instance) class Test_fileinput_fileno(BaseFileInputGlobalMethodsTest): """Unit tests for fileinput.fileno()""" def test_state_is_None(self): """Tests fileinput.fileno() when fileinput._state is None. Ensure that it raises RuntimeError with a meaningful error message and does not modify fileinput._state""" fileinput._state = None with self.assertRaises(RuntimeError) as cm: fileinput.fileno() self.assertEqual(("no active input()",), cm.exception.args) self.assertIsNone(fileinput._state) def test_state_is_not_None(self): """Tests fileinput.fileno() when fileinput._state is not None. Ensure that it invokes fileinput._state.fileno() exactly once, returns whatever it returns, and does not modify fileinput._state to point to a different object.""" fileno_retval = object() instance = MockFileInput() instance.return_values["fileno"] = fileno_retval instance.fileno_retval = fileno_retval fileinput._state = instance retval = fileinput.fileno() self.assertExactlyOneInvocation(instance, "fileno") self.assertIs(retval, fileno_retval) self.assertIs(fileinput._state, instance) class Test_fileinput_isfirstline(BaseFileInputGlobalMethodsTest): """Unit tests for fileinput.isfirstline()""" def test_state_is_None(self): """Tests fileinput.isfirstline() when fileinput._state is None. Ensure that it raises RuntimeError with a meaningful error message and does not modify fileinput._state""" fileinput._state = None with self.assertRaises(RuntimeError) as cm: fileinput.isfirstline() self.assertEqual(("no active input()",), cm.exception.args) self.assertIsNone(fileinput._state) def test_state_is_not_None(self): """Tests fileinput.isfirstline() when fileinput._state is not None. Ensure that it invokes fileinput._state.isfirstline() exactly once, returns whatever it returns, and does not modify fileinput._state to point to a different object.""" isfirstline_retval = object() instance = MockFileInput() instance.return_values["isfirstline"] = isfirstline_retval fileinput._state = instance retval = fileinput.isfirstline() self.assertExactlyOneInvocation(instance, "isfirstline") self.assertIs(retval, isfirstline_retval) self.assertIs(fileinput._state, instance) class Test_fileinput_isstdin(BaseFileInputGlobalMethodsTest): """Unit tests for fileinput.isstdin()""" def test_state_is_None(self): """Tests fileinput.isstdin() when fileinput._state is None. Ensure that it raises RuntimeError with a meaningful error message and does not modify fileinput._state""" fileinput._state = None with self.assertRaises(RuntimeError) as cm: fileinput.isstdin() self.assertEqual(("no active input()",), cm.exception.args) self.assertIsNone(fileinput._state) def test_state_is_not_None(self): """Tests fileinput.isstdin() when fileinput._state is not None. Ensure that it invokes fileinput._state.isstdin() exactly once, returns whatever it returns, and does not modify fileinput._state to point to a different object.""" isstdin_retval = object() instance = MockFileInput() instance.return_values["isstdin"] = isstdin_retval fileinput._state = instance retval = fileinput.isstdin() self.assertExactlyOneInvocation(instance, "isstdin") self.assertIs(retval, isstdin_retval) self.assertIs(fileinput._state, instance) class InvocationRecorder: def __init__(self): self.invocation_count = 0 def __call__(self, *args, **kwargs): self.invocation_count += 1 self.last_invocation = (args, kwargs) class Test_hook_compressed(unittest.TestCase): """Unit tests for fileinput.hook_compressed()""" def setUp(self): self.fake_open = InvocationRecorder() def test_empty_string(self): self.do_test_use_builtin_open("", 1) def test_no_ext(self): self.do_test_use_builtin_open("abcd", 2) @unittest.skipUnless(gzip, "Requires gzip and zlib") def test_gz_ext_fake(self): original_open = gzip.open gzip.open = self.fake_open try: result = fileinput.hook_compressed("test.gz", 3) finally: gzip.open = original_open self.assertEqual(self.fake_open.invocation_count, 1) self.assertEqual(self.fake_open.last_invocation, (("test.gz", 3), {})) @unittest.skipUnless(bz2, "Requires bz2") def test_bz2_ext_fake(self): original_open = bz2.BZ2File bz2.BZ2File = self.fake_open try: result = fileinput.hook_compressed("test.bz2", 4) finally: bz2.BZ2File = original_open self.assertEqual(self.fake_open.invocation_count, 1) self.assertEqual(self.fake_open.last_invocation, (("test.bz2", 4), {})) def test_blah_ext(self): self.do_test_use_builtin_open("abcd.blah", 5) def test_gz_ext_builtin(self): self.do_test_use_builtin_open("abcd.Gz", 6) def test_bz2_ext_builtin(self): self.do_test_use_builtin_open("abcd.Bz2", 7) def do_test_use_builtin_open(self, filename, mode): original_open = self.replace_builtin_open(self.fake_open) try: result = fileinput.hook_compressed(filename, mode) finally: self.replace_builtin_open(original_open) self.assertEqual(self.fake_open.invocation_count, 1) self.assertEqual(self.fake_open.last_invocation, ((filename, mode), {})) @staticmethod def replace_builtin_open(new_open_func): original_open = builtins.open builtins.open = new_open_func return original_open class Test_hook_encoded(unittest.TestCase): """Unit tests for fileinput.hook_encoded()""" def test(self): encoding = object() result = fileinput.hook_encoded(encoding) fake_open = InvocationRecorder() original_open = builtins.open builtins.open = fake_open try: filename = object() mode = object() open_result = result(filename, mode) finally: builtins.open = original_open self.assertEqual(fake_open.invocation_count, 1) args, kwargs = fake_open.last_invocation self.assertIs(args[0], filename) self.assertIs(args[1], mode) self.assertIs(kwargs.pop('encoding'), encoding) self.assertFalse(kwargs) def test_modes(self): with open(TESTFN, 'wb') as f: # UTF-7 is a convenient, seldom used encoding f.write(b'A\nB\r\nC\rD+IKw-') self.addCleanup(safe_unlink, TESTFN) def check(mode, expected_lines): with FileInput(files=TESTFN, mode=mode, openhook=hook_encoded('utf-7')) as fi: lines = list(fi) self.assertEqual(lines, expected_lines) check('r', ['A\n', 'B\n', 'C\n', 'D\u20ac']) with self.assertWarns(DeprecationWarning): check('rU', ['A\n', 'B\n', 'C\n', 'D\u20ac']) with self.assertWarns(DeprecationWarning): check('U', ['A\n', 'B\n', 'C\n', 'D\u20ac']) with self.assertRaises(ValueError): check('rb', ['A\n', 'B\r\n', 'C\r', 'D\u20ac']) if __name__ == "__main__": unittest.main()