Windows NT DGPENSV2LPKMN 10.0 build 14393 (Windows Server 2016) AMD64
Apache/2.4.46 (Win64) OpenSSL/1.1.1h PHP/7.3.25
: 172.16.0.66 | : 172.16.0.254
Cant Read [ /etc/named.conf ]
7.3.25
SYSTEM
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
[ A ]
[ C ]
[ D ]
C: /
laragon /
bin /
python /
python-3.10 /
Lib /
test /
[ HOME SHELL ]
Name
Size
Permission
Action
__pycache__
[ DIR ]
drwxrwxrwx
audiodata
[ DIR ]
drwxrwxrwx
capath
[ DIR ]
drwxrwxrwx
cjkencodings
[ DIR ]
drwxrwxrwx
crashers
[ DIR ]
drwxrwxrwx
data
[ DIR ]
drwxrwxrwx
decimaltestdata
[ DIR ]
drwxrwxrwx
dtracedata
[ DIR ]
drwxrwxrwx
encoded_modules
[ DIR ]
drwxrwxrwx
imghdrdata
[ DIR ]
drwxrwxrwx
leakers
[ DIR ]
drwxrwxrwx
libregrtest
[ DIR ]
drwxrwxrwx
sndhdrdata
[ DIR ]
drwxrwxrwx
subprocessdata
[ DIR ]
drwxrwxrwx
support
[ DIR ]
drwxrwxrwx
test_asyncio
[ DIR ]
drwxrwxrwx
test_email
[ DIR ]
drwxrwxrwx
test_import
[ DIR ]
drwxrwxrwx
test_importlib
[ DIR ]
drwxrwxrwx
test_json
[ DIR ]
drwxrwxrwx
test_peg_generator
[ DIR ]
drwxrwxrwx
test_tools
[ DIR ]
drwxrwxrwx
test_warnings
[ DIR ]
drwxrwxrwx
test_zoneinfo
[ DIR ]
drwxrwxrwx
tracedmodules
[ DIR ]
drwxrwxrwx
xmltestdata
[ DIR ]
drwxrwxrwx
ziptestdata
[ DIR ]
drwxrwxrwx
Sine-1000Hz-300ms.aif
60.25
KB
-rw-rw-rw-
__init__.py
48
B
-rw-rw-rw-
__main__.py
43
B
-rw-rw-rw-
_test_atexit.py
3.75
KB
-rw-rw-rw-
_test_eintr.py
18.17
KB
-rw-rw-rw-
_test_embed_set_config.py
8.81
KB
-rw-rw-rw-
_test_multiprocessing.py
199.1
KB
-rw-rw-rw-
_typed_dict_helper.py
512
B
-rw-rw-rw-
allsans.pem
10.03
KB
-rw-rw-rw-
ann_module.py
1.15
KB
-rw-rw-rw-
ann_module2.py
555
B
-rw-rw-rw-
ann_module3.py
466
B
-rw-rw-rw-
ann_module4.py
86
B
-rw-rw-rw-
ann_module5.py
212
B
-rw-rw-rw-
ann_module6.py
145
B
-rw-rw-rw-
ann_module7.py
306
B
-rw-rw-rw-
audiotest.au
27.48
KB
-rw-rw-rw-
audiotests.py
12.46
KB
-rw-rw-rw-
audit-tests.py
11.09
KB
-rw-rw-rw-
autotest.py
214
B
-rw-rw-rw-
bad_coding.py
25
B
-rw-rw-rw-
bad_coding2.py
32
B
-rw-rw-rw-
bad_getattr.py
65
B
-rw-rw-rw-
bad_getattr2.py
84
B
-rw-rw-rw-
bad_getattr3.py
144
B
-rw-rw-rw-
badcert.pem
1.92
KB
-rw-rw-rw-
badkey.pem
2.15
KB
-rw-rw-rw-
badsyntax_3131.py
34
B
-rw-rw-rw-
badsyntax_future10.py
98
B
-rw-rw-rw-
badsyntax_future3.py
182
B
-rw-rw-rw-
badsyntax_future4.py
163
B
-rw-rw-rw-
badsyntax_future5.py
196
B
-rw-rw-rw-
badsyntax_future6.py
171
B
-rw-rw-rw-
badsyntax_future7.py
207
B
-rw-rw-rw-
badsyntax_future8.py
132
B
-rw-rw-rw-
badsyntax_future9.py
152
B
-rw-rw-rw-
badsyntax_pep3120.py
15
B
-rw-rw-rw-
bisect_cmd.py
5.39
KB
-rw-rw-rw-
cfgparser.1
70
B
-rw-rw-rw-
cfgparser.2
19.54
KB
-rw-rw-rw-
cfgparser.3
1.62
KB
-rw-rw-rw-
clinic.test
97.34
KB
-rw-rw-rw-
cmath_testcases.txt
143.5
KB
-rw-rw-rw-
coding20731.py
22
B
-rw-rw-rw-
curses_tests.py
1.26
KB
-rw-rw-rw-
dataclass_module_1.py
869
B
-rw-rw-rw-
dataclass_module_1_str.py
867
B
-rw-rw-rw-
dataclass_module_2.py
788
B
-rw-rw-rw-
dataclass_module_2_str.py
786
B
-rw-rw-rw-
dataclass_textanno.py
138
B
-rw-rw-rw-
datetimetester.py
251.38
KB
-rw-rw-rw-
dis_module.py
81
B
-rw-rw-rw-
doctest_aliases.py
253
B
-rw-rw-rw-
doctest_lineno.py
964
B
-rw-rw-rw-
double_const.py
1.21
KB
-rw-rw-rw-
empty.vbs
70
B
-rw-rw-rw-
exception_hierarchy.txt
1.87
KB
-rw-rw-rw-
ffdh3072.pem
2.2
KB
-rw-rw-rw-
final_a.py
430
B
-rw-rw-rw-
final_b.py
430
B
-rw-rw-rw-
floating_points.txt
16.92
KB
-rw-rw-rw-
fork_wait.py
2.31
KB
-rw-rw-rw-
formatfloat_testcases.txt
7.8
KB
-rw-rw-rw-
future_test1.py
240
B
-rw-rw-rw-
future_test2.py
159
B
-rw-rw-rw-
gdb_sample.py
165
B
-rw-rw-rw-
good_getattr.py
209
B
-rw-rw-rw-
idnsans.pem
9.88
KB
-rw-rw-rw-
ieee754.txt
3.39
KB
-rw-rw-rw-
imp_dummy.py
66
B
-rw-rw-rw-
inspect_fodder.py
1.99
KB
-rw-rw-rw-
inspect_fodder2.py
3.64
KB
-rw-rw-rw-
inspect_stock_annotations.py
537
B
-rw-rw-rw-
inspect_stringized_annotations...
646
B
-rw-rw-rw-
inspect_stringized_annotations...
63
B
-rw-rw-rw-
keycert.passwd.pem
4.19
KB
-rw-rw-rw-
keycert.pem
4.03
KB
-rw-rw-rw-
keycert2.pem
4.05
KB
-rw-rw-rw-
keycert3.pem
9.39
KB
-rw-rw-rw-
keycert4.pem
9.4
KB
-rw-rw-rw-
keycertecc.pem
5.61
KB
-rw-rw-rw-
list_tests.py
17.2
KB
-rw-rw-rw-
lock_tests.py
31.14
KB
-rw-rw-rw-
mailcap.txt
1.28
KB
-rw-rw-rw-
make_ssl_certs.py
9.55
KB
-rw-rw-rw-
mapping_tests.py
22.49
KB
-rw-rw-rw-
math_testcases.txt
23.8
KB
-rw-rw-rw-
memory_watchdog.py
887
B
-rw-rw-rw-
mime.types
48.78
KB
-rw-rw-rw-
mock_socket.py
3.86
KB
-rw-rw-rw-
mod_generics_cache.py
1.18
KB
-rw-rw-rw-
mp_fork_bomb.py
466
B
-rw-rw-rw-
mp_preload.py
369
B
-rw-rw-rw-
multibytecodec_support.py
14.56
KB
-rw-rw-rw-
nokia.pem
1.91
KB
-rw-rw-rw-
nosan.pem
7.67
KB
-rw-rw-rw-
nullbytecert.pem
5.4
KB
-rw-rw-rw-
nullcert.pem
0
B
-rw-rw-rw-
pickletester.py
142.98
KB
-rw-rw-rw-
profilee.py
3.08
KB
-rw-rw-rw-
pstats.pck
65.05
KB
-rw-rw-rw-
pycacert.pem
5.63
KB
-rw-rw-rw-
pycakey.pem
2.46
KB
-rw-rw-rw-
pyclbr_input.py
681
B
-rw-rw-rw-
pydoc_mod.py
1010
B
-rw-rw-rw-
pydocfodder.py
6.39
KB
-rw-rw-rw-
pythoninfo.py
24.41
KB
-rw-rw-rw-
randv2_32.pck
7.34
KB
-rw-rw-rw-
randv2_64.pck
7.19
KB
-rw-rw-rw-
randv3.pck
7.82
KB
-rw-rw-rw-
re_tests.py
26.48
KB
-rw-rw-rw-
recursion.tar
516
B
-rw-rw-rw-
regrtest.py
1.31
KB
-rw-rw-rw-
relimport.py
28
B
-rw-rw-rw-
reperf.py
561
B
-rw-rw-rw-
revocation.crl
814
B
-rw-rw-rw-
sample_doctest.py
1.09
KB
-rw-rw-rw-
sample_doctest_no_docstrings.p...
239
B
-rw-rw-rw-
sample_doctest_no_doctests.py
284
B
-rw-rw-rw-
secp384r1.pem
263
B
-rw-rw-rw-
selfsigned_pythontestdotnet.pe...
2.11
KB
-rw-rw-rw-
seq_tests.py
15.29
KB
-rw-rw-rw-
sgml_input.html
8.31
KB
-rw-rw-rw-
signalinterproctester.py
2.82
KB
-rw-rw-rw-
sortperf.py
4.86
KB
-rw-rw-rw-
ssl_cert.pem
1.56
KB
-rw-rw-rw-
ssl_key.passwd.pem
2.63
KB
-rw-rw-rw-
ssl_key.pem
2.47
KB
-rw-rw-rw-
ssl_servers.py
7.31
KB
-rw-rw-rw-
ssltests.py
1.06
KB
-rw-rw-rw-
string_tests.py
69.47
KB
-rw-rw-rw-
talos-2019-0758.pem
1.32
KB
-rw-rw-rw-
test___all__.py
4.66
KB
-rw-rw-rw-
test___future__.py
2.42
KB
-rw-rw-rw-
test__locale.py
8.02
KB
-rw-rw-rw-
test__opcode.py
3.11
KB
-rw-rw-rw-
test__osx_support.py
13.96
KB
-rw-rw-rw-
test__xxsubinterpreters.py
81.21
KB
-rw-rw-rw-
test_abc.py
23.85
KB
-rw-rw-rw-
test_abstract_numbers.py
1.54
KB
-rw-rw-rw-
test_aifc.py
18.2
KB
-rw-rw-rw-
test_argparse.py
185.85
KB
-rw-rw-rw-
test_array.py
56.79
KB
-rw-rw-rw-
test_asdl_parser.py
4.57
KB
-rw-rw-rw-
test_ast.py
107.34
KB
-rw-rw-rw-
test_asyncgen.py
48.43
KB
-rw-rw-rw-
test_asynchat.py
9.68
KB
-rw-rw-rw-
test_asyncore.py
26.95
KB
-rw-rw-rw-
test_atexit.py
3.25
KB
-rw-rw-rw-
test_audioop.py
28.79
KB
-rw-rw-rw-
test_audit.py
5.56
KB
-rw-rw-rw-
test_augassign.py
8
KB
-rw-rw-rw-
test_base64.py
35.28
KB
-rw-rw-rw-
test_baseexception.py
7.05
KB
-rw-rw-rw-
test_bdb.py
44.64
KB
-rw-rw-rw-
test_bigaddrspace.py
2.93
KB
-rw-rw-rw-
test_bigmem.py
46.01
KB
-rw-rw-rw-
test_binascii.py
19.72
KB
-rw-rw-rw-
test_binhex.py
2.17
KB
-rw-rw-rw-
test_binop.py
14.57
KB
-rw-rw-rw-
test_bisect.py
16.09
KB
-rw-rw-rw-
test_bool.py
12.89
KB
-rw-rw-rw-
test_buffer.py
164.64
KB
-rw-rw-rw-
test_bufio.py
2.65
KB
-rw-rw-rw-
test_builtin.py
87.93
KB
-rw-rw-rw-
test_bytes.py
78.01
KB
-rw-rw-rw-
test_bz2.py
38.22
KB
-rw-rw-rw-
test_c_locale_coercion.py
19.35
KB
-rw-rw-rw-
test_calendar.py
51.76
KB
-rw-rw-rw-
test_call.py
26.95
KB
-rw-rw-rw-
test_capi.py
41.78
KB
-rw-rw-rw-
test_cgi.py
22.89
KB
-rw-rw-rw-
test_cgitb.py
2.61
KB
-rw-rw-rw-
test_charmapcodec.py
1.83
KB
-rw-rw-rw-
test_check_c_globals.py
773
B
-rw-rw-rw-
test_class.py
18.07
KB
-rw-rw-rw-
test_clinic.py
22.35
KB
-rw-rw-rw-
test_cmath.py
24.71
KB
-rw-rw-rw-
test_cmd.py
6.34
KB
-rw-rw-rw-
test_cmd_line.py
36.79
KB
-rw-rw-rw-
test_cmd_line_script.py
33.44
KB
-rw-rw-rw-
test_code.py
13.11
KB
-rw-rw-rw-
test_code_module.py
5.69
KB
-rw-rw-rw-
test_codeccallbacks.py
48.64
KB
-rw-rw-rw-
test_codecencodings_cn.py
3.95
KB
-rw-rw-rw-
test_codecencodings_hk.py
723
B
-rw-rw-rw-
test_codecencodings_iso2022.py
1.4
KB
-rw-rw-rw-
test_codecencodings_jp.py
4.92
KB
-rw-rw-rw-
test_codecencodings_kr.py
3.02
KB
-rw-rw-rw-
test_codecencodings_tw.py
703
B
-rw-rw-rw-
test_codecmaps_cn.py
772
B
-rw-rw-rw-
test_codecmaps_hk.py
401
B
-rw-rw-rw-
test_codecmaps_jp.py
1.76
KB
-rw-rw-rw-
test_codecmaps_kr.py
1.2
KB
-rw-rw-rw-
test_codecmaps_tw.py
732
B
-rw-rw-rw-
test_codecs.py
136.49
KB
-rw-rw-rw-
test_codeop.py
8.65
KB
-rw-rw-rw-
test_collections.py
94.1
KB
-rw-rw-rw-
test_colorsys.py
3.93
KB
-rw-rw-rw-
test_compare.py
3.85
KB
-rw-rw-rw-
test_compile.py
45.9
KB
-rw-rw-rw-
test_compileall.py
47.1
KB
-rw-rw-rw-
test_complex.py
33.54
KB
-rw-rw-rw-
test_concurrent_futures.py
57.2
KB
-rw-rw-rw-
test_configparser.py
87.49
KB
-rw-rw-rw-
test_contains.py
3.46
KB
-rw-rw-rw-
test_context.py
31.7
KB
-rw-rw-rw-
test_contextlib.py
36.33
KB
-rw-rw-rw-
test_contextlib_async.py
19.36
KB
-rw-rw-rw-
test_copy.py
27.28
KB
-rw-rw-rw-
test_copyreg.py
4.52
KB
-rw-rw-rw-
test_coroutines.py
65.27
KB
-rw-rw-rw-
test_cprofile.py
6.45
KB
-rw-rw-rw-
test_crashers.py
1.21
KB
-rw-rw-rw-
test_crypt.py
4.25
KB
-rw-rw-rw-
test_csv.py
52.95
KB
-rw-rw-rw-
test_ctypes.py
209
B
-rw-rw-rw-
test_curses.py
47.87
KB
-rw-rw-rw-
test_dataclasses.py
129.65
KB
-rw-rw-rw-
test_datetime.py
2.37
KB
-rw-rw-rw-
test_dbm.py
6.3
KB
-rw-rw-rw-
test_dbm_dumb.py
10.97
KB
-rw-rw-rw-
test_dbm_gnu.py
6.68
KB
-rw-rw-rw-
test_dbm_ndbm.py
5.24
KB
-rw-rw-rw-
test_decimal.py
214.93
KB
-rw-rw-rw-
test_decorators.py
14.87
KB
-rw-rw-rw-
test_defaultdict.py
6.31
KB
-rw-rw-rw-
test_deque.py
34.67
KB
-rw-rw-rw-
test_descr.py
198.27
KB
-rw-rw-rw-
test_descrtut.py
12.03
KB
-rw-rw-rw-
test_devpoll.py
4.58
KB
-rw-rw-rw-
test_dict.py
52.3
KB
-rw-rw-rw-
test_dict_version.py
6.28
KB
-rw-rw-rw-
test_dictcomps.py
5.28
KB
-rw-rw-rw-
test_dictviews.py
13.81
KB
-rw-rw-rw-
test_difflib.py
22.02
KB
-rw-rw-rw-
test_difflib_expect.html
101.36
KB
-rw-rw-rw-
test_dis.py
57.74
KB
-rw-rw-rw-
test_distutils.py
615
B
-rw-rw-rw-
test_doctest.py
104.21
KB
-rw-rw-rw-
test_doctest.txt
317
B
-rw-rw-rw-
test_doctest2.py
2.48
KB
-rw-rw-rw-
test_doctest2.txt
406
B
-rw-rw-rw-
test_doctest3.txt
87
B
-rw-rw-rw-
test_doctest4.txt
255
B
-rw-rw-rw-
test_docxmlrpc.py
8.88
KB
-rw-rw-rw-
test_dtrace.py
5.31
KB
-rw-rw-rw-
test_dynamic.py
4.43
KB
-rw-rw-rw-
test_dynamicclassattribute.py
9.86
KB
-rw-rw-rw-
test_eintr.py
604
B
-rw-rw-rw-
test_embed.py
57.38
KB
-rw-rw-rw-
test_ensurepip.py
12.55
KB
-rw-rw-rw-
test_enum.py
124.47
KB
-rw-rw-rw-
test_enumerate.py
8.74
KB
-rw-rw-rw-
test_eof.py
3.1
KB
-rw-rw-rw-
test_epoll.py
9.39
KB
-rw-rw-rw-
test_errno.py
1.08
KB
-rw-rw-rw-
test_exception_hierarchy.py
7.63
KB
-rw-rw-rw-
test_exception_variations.py
4.03
KB
-rw-rw-rw-
test_exceptions.py
93.28
KB
-rw-rw-rw-
test_extcall.py
14.57
KB
-rw-rw-rw-
test_faulthandler.py
30.98
KB
-rw-rw-rw-
test_fcntl.py
7.64
KB
-rw-rw-rw-
test_file.py
12.12
KB
-rw-rw-rw-
test_file_eintr.py
10.86
KB
-rw-rw-rw-
test_filecmp.py
10.57
KB
-rw-rw-rw-
test_fileinput.py
40.5
KB
-rw-rw-rw-
test_fileio.py
20.53
KB
-rw-rw-rw-
test_finalization.py
15.18
KB
-rw-rw-rw-
test_float.py
67.75
KB
-rw-rw-rw-
test_flufl.py
1.59
KB
-rw-rw-rw-
test_fnmatch.py
11.38
KB
-rw-rw-rw-
test_fork1.py
3.34
KB
-rw-rw-rw-
test_format.py
24.42
KB
-rw-rw-rw-
test_fractions.py
30.41
KB
-rw-rw-rw-
test_frame.py
6.44
KB
-rw-rw-rw-
test_frozen.py
972
B
-rw-rw-rw-
test_fstring.py
53.85
KB
-rw-rw-rw-
test_ftplib.py
43.12
KB
-rw-rw-rw-
test_funcattrs.py
15.29
KB
-rw-rw-rw-
test_functools.py
105.51
KB
-rw-rw-rw-
test_future.py
15.27
KB
-rw-rw-rw-
test_future3.py
516
B
-rw-rw-rw-
test_future4.py
233
B
-rw-rw-rw-
test_future5.py
531
B
-rw-rw-rw-
test_gc.py
47.3
KB
-rw-rw-rw-
test_gdb.py
42.7
KB
-rw-rw-rw-
test_generator_stop.py
977
B
-rw-rw-rw-
test_generators.py
66.11
KB
-rw-rw-rw-
test_genericalias.py
13.1
KB
-rw-rw-rw-
test_genericclass.py
9.56
KB
-rw-rw-rw-
test_genericpath.py
22.4
KB
-rw-rw-rw-
test_genexps.py
7.92
KB
-rw-rw-rw-
test_getargs2.py
55.19
KB
-rw-rw-rw-
test_getopt.py
6.96
KB
-rw-rw-rw-
test_getpass.py
6.45
KB
-rw-rw-rw-
test_gettext.py
42.36
KB
-rw-rw-rw-
test_glob.py
15.72
KB
-rw-rw-rw-
test_global.py
1.44
KB
-rw-rw-rw-
test_grammar.py
64.47
KB
-rw-rw-rw-
test_graphlib.py
8.59
KB
-rw-rw-rw-
test_grp.py
3.65
KB
-rw-rw-rw-
test_gzip.py
31.45
KB
-rw-rw-rw-
test_hash.py
11.79
KB
-rw-rw-rw-
test_hashlib.py
45.59
KB
-rw-rw-rw-
test_heapq.py
16.91
KB
-rw-rw-rw-
test_hmac.py
26.05
KB
-rw-rw-rw-
test_html.py
4.33
KB
-rw-rw-rw-
test_htmlparser.py
33.7
KB
-rw-rw-rw-
test_http_cookiejar.py
80.28
KB
-rw-rw-rw-
test_http_cookies.py
19.18
KB
-rw-rw-rw-
test_httplib.py
81.2
KB
-rw-rw-rw-
test_httpservers.py
54.65
KB
-rw-rw-rw-
test_idle.py
1.02
KB
-rw-rw-rw-
test_imaplib.py
43.19
KB
-rw-rw-rw-
test_imghdr.py
4.83
KB
-rw-rw-rw-
test_imp.py
18.38
KB
-rw-rw-rw-
test_index.py
8.64
KB
-rw-rw-rw-
test_inspect.py
175.5
KB
-rw-rw-rw-
test_int.py
21.27
KB
-rw-rw-rw-
test_int_literal.py
7.03
KB
-rw-rw-rw-
test_interpreters.py
23.21
KB
-rw-rw-rw-
test_io.py
175.17
KB
-rw-rw-rw-
test_ioctl.py
3.33
KB
-rw-rw-rw-
test_ipaddress.py
119.32
KB
-rw-rw-rw-
test_isinstance.py
13.31
KB
-rw-rw-rw-
test_iter.py
33.93
KB
-rw-rw-rw-
test_iterlen.py
7.32
KB
-rw-rw-rw-
test_itertools.py
108.41
KB
-rw-rw-rw-
test_keyword.py
1.27
KB
-rw-rw-rw-
test_keywordonlyarg.py
7.07
KB
-rw-rw-rw-
test_kqueue.py
9.01
KB
-rw-rw-rw-
test_largefile.py
10.26
KB
-rw-rw-rw-
test_lib2to3.py
327
B
-rw-rw-rw-
test_linecache.py
9.92
KB
-rw-rw-rw-
test_list.py
7.76
KB
-rw-rw-rw-
test_listcomps.py
4.33
KB
-rw-rw-rw-
test_lltrace.py
3.22
KB
-rw-rw-rw-
test_locale.py
25.29
KB
-rw-rw-rw-
test_logging.py
200.75
KB
-rw-rw-rw-
test_long.py
55.19
KB
-rw-rw-rw-
test_longexp.py
243
B
-rw-rw-rw-
test_lzma.py
90.07
KB
-rw-rw-rw-
test_mailbox.py
94.04
KB
-rw-rw-rw-
test_mailcap.py
10.25
KB
-rw-rw-rw-
test_marshal.py
21.04
KB
-rw-rw-rw-
test_math.py
92.69
KB
-rw-rw-rw-
test_memoryio.py
32.33
KB
-rw-rw-rw-
test_memoryview.py
22.01
KB
-rw-rw-rw-
test_metaclass.py
6.47
KB
-rw-rw-rw-
test_mimetypes.py
14.17
KB
-rw-rw-rw-
test_minidom.py
69.82
KB
-rw-rw-rw-
test_mmap.py
31.71
KB
-rw-rw-rw-
test_module.py
12.71
KB
-rw-rw-rw-
test_modulefinder.py
12.63
KB
-rw-rw-rw-
test_msilib.py
5.57
KB
-rw-rw-rw-
test_multibytecodec.py
16.15
KB
-rw-rw-rw-
test_multiprocessing_fork.py
496
B
-rw-rw-rw-
test_multiprocessing_forkserve...
408
B
-rw-rw-rw-
test_multiprocessing_main_hand...
11.86
KB
-rw-rw-rw-
test_multiprocessing_spawn.py
289
B
-rw-rw-rw-
test_named_expressions.py
21.21
KB
-rw-rw-rw-
test_netrc.py
6.17
KB
-rw-rw-rw-
test_nis.py
1.21
KB
-rw-rw-rw-
test_nntplib.py
64.29
KB
-rw-rw-rw-
test_ntpath.py
39.52
KB
-rw-rw-rw-
test_numeric_tower.py
7.38
KB
-rw-rw-rw-
test_opcache.py
552
B
-rw-rw-rw-
test_opcodes.py
3.72
KB
-rw-rw-rw-
test_openpty.py
621
B
-rw-rw-rw-
test_operator.py
24.67
KB
-rw-rw-rw-
test_optparse.py
62.64
KB
-rw-rw-rw-
test_ordered_dict.py
32.49
KB
-rw-rw-rw-
test_os.py
171.84
KB
-rw-rw-rw-
test_ossaudiodev.py
7.27
KB
-rw-rw-rw-
test_osx_env.py
1.34
KB
-rw-rw-rw-
test_pathlib.py
112.53
KB
-rw-rw-rw-
test_patma.py
87.9
KB
-rw-rw-rw-
test_pdb.py
64.45
KB
-rw-rw-rw-
test_peepholer.py
20.29
KB
-rw-rw-rw-
test_pickle.py
20.25
KB
-rw-rw-rw-
test_picklebuffer.py
5.14
KB
-rw-rw-rw-
test_pickletools.py
4.23
KB
-rw-rw-rw-
test_pipes.py
6.91
KB
-rw-rw-rw-
test_pkg.py
9.88
KB
-rw-rw-rw-
test_pkgutil.py
21.79
KB
-rw-rw-rw-
test_platform.py
20.25
KB
-rw-rw-rw-
test_plistlib.py
39.71
KB
-rw-rw-rw-
test_poll.py
7.5
KB
-rw-rw-rw-
test_popen.py
2.14
KB
-rw-rw-rw-
test_poplib.py
18.07
KB
-rw-rw-rw-
test_positional_only_arg.py
18.2
KB
-rw-rw-rw-
test_posix.py
88.67
KB
-rw-rw-rw-
test_posixpath.py
32.73
KB
-rw-rw-rw-
test_pow.py
5.58
KB
-rw-rw-rw-
test_pprint.py
51.51
KB
-rw-rw-rw-
test_print.py
7.94
KB
-rw-rw-rw-
test_profile.py
8.9
KB
-rw-rw-rw-
test_property.py
11.15
KB
-rw-rw-rw-
test_pstats.py
3.4
KB
-rw-rw-rw-
test_pty.py
17.29
KB
-rw-rw-rw-
test_pulldom.py
13.01
KB
-rw-rw-rw-
test_pwd.py
4.3
KB
-rw-rw-rw-
test_py_compile.py
11.72
KB
-rw-rw-rw-
test_pyclbr.py
10.09
KB
-rw-rw-rw-
test_pydoc.py
62.14
KB
-rw-rw-rw-
test_pyexpat.py
27.41
KB
-rw-rw-rw-
test_queue.py
21.15
KB
-rw-rw-rw-
test_quopri.py
7.98
KB
-rw-rw-rw-
test_raise.py
13.94
KB
-rw-rw-rw-
test_random.py
56.48
KB
-rw-rw-rw-
test_range.py
25.32
KB
-rw-rw-rw-
test_re.py
115.07
KB
-rw-rw-rw-
test_readline.py
14.59
KB
-rw-rw-rw-
test_regrtest.py
50.82
KB
-rw-rw-rw-
test_repl.py
4.06
KB
-rw-rw-rw-
test_reprlib.py
15.53
KB
-rw-rw-rw-
test_resource.py
7.21
KB
-rw-rw-rw-
test_richcmp.py
12.26
KB
-rw-rw-rw-
test_rlcompleter.py
7.26
KB
-rw-rw-rw-
test_robotparser.py
11.26
KB
-rw-rw-rw-
test_runpy.py
34.68
KB
-rw-rw-rw-
test_sax.py
54.48
KB
-rw-rw-rw-
test_sched.py
7.04
KB
-rw-rw-rw-
test_scope.py
20.58
KB
-rw-rw-rw-
test_script_helper.py
5.9
KB
-rw-rw-rw-
test_secrets.py
4.4
KB
-rw-rw-rw-
test_select.py
3.42
KB
-rw-rw-rw-
test_selectors.py
18.83
KB
-rw-rw-rw-
test_set.py
71.11
KB
-rw-rw-rw-
test_setcomps.py
4.31
KB
-rw-rw-rw-
test_shelve.py
6.23
KB
-rw-rw-rw-
test_shlex.py
13.84
KB
-rw-rw-rw-
test_shutil.py
107.56
KB
-rw-rw-rw-
test_signal.py
49.74
KB
-rw-rw-rw-
test_site.py
26.96
KB
-rw-rw-rw-
test_slice.py
8.5
KB
-rw-rw-rw-
test_smtpd.py
41.65
KB
-rw-rw-rw-
test_smtplib.py
61.57
KB
-rw-rw-rw-
test_smtpnet.py
3.07
KB
-rw-rw-rw-
test_sndhdr.py
1.46
KB
-rw-rw-rw-
test_socket.py
252.04
KB
-rw-rw-rw-
test_socketserver.py
18.4
KB
-rw-rw-rw-
test_sort.py
13.8
KB
-rw-rw-rw-
test_source_encoding.py
8.87
KB
-rw-rw-rw-
test_spwd.py
2.8
KB
-rw-rw-rw-
test_sqlite.py
1014
B
-rw-rw-rw-
test_ssl.py
210.65
KB
-rw-rw-rw-
test_startfile.py
1.74
KB
-rw-rw-rw-
test_stat.py
8.82
KB
-rw-rw-rw-
test_statistics.py
115.88
KB
-rw-rw-rw-
test_strftime.py
7.74
KB
-rw-rw-rw-
test_string.py
20.27
KB
-rw-rw-rw-
test_string_literals.py
10.11
KB
-rw-rw-rw-
test_stringprep.py
3.13
KB
-rw-rw-rw-
test_strptime.py
35.14
KB
-rw-rw-rw-
test_strtod.py
20.48
KB
-rw-rw-rw-
test_struct.py
37.06
KB
-rw-rw-rw-
test_structmembers.py
4.95
KB
-rw-rw-rw-
test_structseq.py
4.55
KB
-rw-rw-rw-
test_subclassinit.py
8.39
KB
-rw-rw-rw-
test_subprocess.py
159.59
KB
-rw-rw-rw-
test_sunau.py
6.14
KB
-rw-rw-rw-
test_sundry.py
2.16
KB
-rw-rw-rw-
test_super.py
9.91
KB
-rw-rw-rw-
test_support.py
26.03
KB
-rw-rw-rw-
test_symtable.py
9.61
KB
-rw-rw-rw-
test_syntax.py
53.26
KB
-rw-rw-rw-
test_sys.py
59.63
KB
-rw-rw-rw-
test_sys_setprofile.py
13.63
KB
-rw-rw-rw-
test_sys_settrace.py
64.46
KB
-rw-rw-rw-
test_sysconfig.py
19.37
KB
-rw-rw-rw-
test_syslog.py
1.21
KB
-rw-rw-rw-
test_tabnanny.py
13.78
KB
-rw-rw-rw-
test_tarfile.py
109.76
KB
-rw-rw-rw-
test_tcl.py
32.33
KB
-rw-rw-rw-
test_telnetlib.py
13.14
KB
-rw-rw-rw-
test_tempfile.py
62.68
KB
-rw-rw-rw-
test_textwrap.py
42.94
KB
-rw-rw-rw-
test_thread.py
8.81
KB
-rw-rw-rw-
test_threadedtempfile.py
1.94
KB
-rw-rw-rw-
test_threading.py
61.15
KB
-rw-rw-rw-
test_threading_local.py
6.5
KB
-rw-rw-rw-
test_threadsignals.py
10.35
KB
-rw-rw-rw-
test_time.py
40.99
KB
-rw-rw-rw-
test_timeit.py
15.59
KB
-rw-rw-rw-
test_timeout.py
11.29
KB
-rw-rw-rw-
test_tix.py
1.09
KB
-rw-rw-rw-
test_tk.py
566
B
-rw-rw-rw-
test_tokenize.py
65.47
KB
-rw-rw-rw-
test_trace.py
20.52
KB
-rw-rw-rw-
test_traceback.py
55.98
KB
-rw-rw-rw-
test_tracemalloc.py
40.23
KB
-rw-rw-rw-
test_ttk_guionly.py
1
KB
-rw-rw-rw-
test_ttk_textonly.py
17.15
KB
-rw-rw-rw-
test_tuple.py
19.33
KB
-rw-rw-rw-
test_turtle.py
13.18
KB
-rw-rw-rw-
test_type_annotations.py
3.8
KB
-rw-rw-rw-
test_type_comments.py
10.94
KB
-rw-rw-rw-
test_typechecks.py
2.62
KB
-rw-rw-rw-
test_types.py
77.73
KB
-rw-rw-rw-
test_typing.py
180.27
KB
-rw-rw-rw-
test_ucn.py
9.75
KB
-rw-rw-rw-
test_unary.py
1.68
KB
-rw-rw-rw-
test_unicode.py
137.87
KB
-rw-rw-rw-
test_unicode_file.py
5.84
KB
-rw-rw-rw-
test_unicode_file_functions.py
6.92
KB
-rw-rw-rw-
test_unicode_identifiers.py
1016
B
-rw-rw-rw-
test_unicodedata.py
16.3
KB
-rw-rw-rw-
test_unittest.py
242
B
-rw-rw-rw-
test_univnewlines.py
4
KB
-rw-rw-rw-
test_unpack.py
3.16
KB
-rw-rw-rw-
test_unpack_ex.py
10.3
KB
-rw-rw-rw-
test_unparse.py
18.82
KB
-rw-rw-rw-
test_urllib.py
71.74
KB
-rw-rw-rw-
test_urllib2.py
79.4
KB
-rw-rw-rw-
test_urllib2_localnet.py
26.18
KB
-rw-rw-rw-
test_urllib2net.py
14.44
KB
-rw-rw-rw-
test_urllib_response.py
1.95
KB
-rw-rw-rw-
test_urllibnet.py
9.55
KB
-rw-rw-rw-
test_urlparse.py
65.64
KB
-rw-rw-rw-
test_userdict.py
7.78
KB
-rw-rw-rw-
test_userlist.py
2.04
KB
-rw-rw-rw-
test_userstring.py
2.47
KB
-rw-rw-rw-
test_utf8_mode.py
10.56
KB
-rw-rw-rw-
test_utf8source.py
1.19
KB
-rw-rw-rw-
test_uu.py
8.35
KB
-rw-rw-rw-
test_uuid.py
40.87
KB
-rw-rw-rw-
test_venv.py
23.15
KB
-rw-rw-rw-
test_wait3.py
1.86
KB
-rw-rw-rw-
test_wait4.py
1.2
KB
-rw-rw-rw-
test_wave.py
6.67
KB
-rw-rw-rw-
test_weakref.py
76.97
KB
-rw-rw-rw-
test_weakset.py
15.86
KB
-rw-rw-rw-
test_webbrowser.py
10.92
KB
-rw-rw-rw-
test_winconsoleio.py
6.77
KB
-rw-rw-rw-
test_winreg.py
21.77
KB
-rw-rw-rw-
test_winsound.py
4.76
KB
-rw-rw-rw-
test_with.py
26.73
KB
-rw-rw-rw-
test_wsgiref.py
31.04
KB
-rw-rw-rw-
test_xdrlib.py
2.25
KB
-rw-rw-rw-
test_xml_dom_minicompat.py
4.32
KB
-rw-rw-rw-
test_xml_etree.py
163.5
KB
-rw-rw-rw-
test_xml_etree_c.py
8.72
KB
-rw-rw-rw-
test_xmlrpc.py
58.75
KB
-rw-rw-rw-
test_xmlrpc_net.py
985
B
-rw-rw-rw-
test_xxlimited.py
2.21
KB
-rw-rw-rw-
test_xxtestfuzz.py
715
B
-rw-rw-rw-
test_yield_from.py
31.12
KB
-rw-rw-rw-
test_zipapp.py
16.32
KB
-rw-rw-rw-
test_zipfile.py
125.43
KB
-rw-rw-rw-
test_zipfile64.py
6
KB
-rw-rw-rw-
test_zipimport.py
34.41
KB
-rw-rw-rw-
test_zipimport_support.py
10.7
KB
-rw-rw-rw-
test_zlib.py
35.2
KB
-rw-rw-rw-
testcodec.py
1.07
KB
-rw-rw-rw-
testtar.tar
425
KB
-rw-rw-rw-
testtar.tar.xz
172
B
-rw-rw-rw-
tf_inherit_check.py
741
B
-rw-rw-rw-
time_hashlib.py
2.96
KB
-rw-rw-rw-
tokenize_tests-latin1-coding-c...
456
B
-rw-rw-rw-
tokenize_tests-no-coding-cooki...
313
B
-rw-rw-rw-
tokenize_tests-utf8-coding-coo...
434
B
-rw-rw-rw-
tokenize_tests-utf8-coding-coo...
338
B
-rw-rw-rw-
tokenize_tests.txt
2.84
KB
-rw-rw-rw-
win_console_handler.py
1.43
KB
-rw-rw-rw-
xmltests.py
520
B
-rw-rw-rw-
zip_cp437_header.zip
270
B
-rw-rw-rw-
zipdir.zip
374
B
-rw-rw-rw-
Delete
Unzip
Zip
${this.title}
Close
Code Editor : test_ntpath.py
import ntpath import os import sys import unittest import warnings from test.support import os_helper from test.support import TestFailed from test.support.os_helper import FakePath from test import test_genericpath from tempfile import TemporaryFile try: import nt except ImportError: # Most tests can complete without the nt module, # but for those that require it we import here. nt = None try: ntpath._getfinalpathname except AttributeError: HAVE_GETFINALPATHNAME = False else: HAVE_GETFINALPATHNAME = True try: import ctypes except ImportError: HAVE_GETSHORTPATHNAME = False else: HAVE_GETSHORTPATHNAME = True def _getshortpathname(path): GSPN = ctypes.WinDLL("kernel32", use_last_error=True).GetShortPathNameW GSPN.argtypes = [ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_uint32] GSPN.restype = ctypes.c_uint32 result_len = GSPN(path, None, 0) if not result_len: raise OSError("failed to get short path name 0x{:08X}" .format(ctypes.get_last_error())) result = ctypes.create_unicode_buffer(result_len) result_len = GSPN(path, result, result_len) return result[:result_len] def _norm(path): if isinstance(path, (bytes, str, os.PathLike)): return ntpath.normcase(os.fsdecode(path)) elif hasattr(path, "__iter__"): return tuple(ntpath.normcase(os.fsdecode(p)) for p in path) return path def tester(fn, wantResult): fn = fn.replace("\\", "\\\\") gotResult = eval(fn) if wantResult != gotResult and _norm(wantResult) != _norm(gotResult): raise TestFailed("%s should return: %s but returned: %s" \ %(str(fn), str(wantResult), str(gotResult))) # then with bytes fn = fn.replace("('", "(b'") fn = fn.replace('("', '(b"') fn = fn.replace("['", "[b'") fn = fn.replace('["', '[b"') fn = fn.replace(", '", ", b'") fn = fn.replace(', "', ', b"') fn = os.fsencode(fn).decode('latin1') fn = fn.encode('ascii', 'backslashreplace').decode('ascii') with warnings.catch_warnings(): warnings.simplefilter("ignore", DeprecationWarning) gotResult = eval(fn) if _norm(wantResult) != _norm(gotResult): raise TestFailed("%s should return: %s but returned: %s" \ %(str(fn), str(wantResult), repr(gotResult))) class NtpathTestCase(unittest.TestCase): def assertPathEqual(self, path1, path2): if path1 == path2 or _norm(path1) == _norm(path2): return self.assertEqual(path1, path2) def assertPathIn(self, path, pathset): self.assertIn(_norm(path), _norm(pathset)) class TestNtpath(NtpathTestCase): def test_splitext(self): tester('ntpath.splitext("foo.ext")', ('foo', '.ext')) tester('ntpath.splitext("/foo/foo.ext")', ('/foo/foo', '.ext')) tester('ntpath.splitext(".ext")', ('.ext', '')) tester('ntpath.splitext("\\foo.ext\\foo")', ('\\foo.ext\\foo', '')) tester('ntpath.splitext("foo.ext\\")', ('foo.ext\\', '')) tester('ntpath.splitext("")', ('', '')) tester('ntpath.splitext("foo.bar.ext")', ('foo.bar', '.ext')) tester('ntpath.splitext("xx/foo.bar.ext")', ('xx/foo.bar', '.ext')) tester('ntpath.splitext("xx\\foo.bar.ext")', ('xx\\foo.bar', '.ext')) tester('ntpath.splitext("c:a/b\\c.d")', ('c:a/b\\c', '.d')) def test_splitdrive(self): tester('ntpath.splitdrive("c:\\foo\\bar")', ('c:', '\\foo\\bar')) tester('ntpath.splitdrive("c:/foo/bar")', ('c:', '/foo/bar')) tester('ntpath.splitdrive("\\\\conky\\mountpoint\\foo\\bar")', ('\\\\conky\\mountpoint', '\\foo\\bar')) tester('ntpath.splitdrive("//conky/mountpoint/foo/bar")', ('//conky/mountpoint', '/foo/bar')) tester('ntpath.splitdrive("\\\\\\conky\\mountpoint\\foo\\bar")', ('', '\\\\\\conky\\mountpoint\\foo\\bar')) tester('ntpath.splitdrive("///conky/mountpoint/foo/bar")', ('', '///conky/mountpoint/foo/bar')) tester('ntpath.splitdrive("\\\\conky\\\\mountpoint\\foo\\bar")', ('', '\\\\conky\\\\mountpoint\\foo\\bar')) tester('ntpath.splitdrive("//conky//mountpoint/foo/bar")', ('', '//conky//mountpoint/foo/bar')) # Issue #19911: UNC part containing U+0130 self.assertEqual(ntpath.splitdrive('//conky/MOUNTPOİNT/foo/bar'), ('//conky/MOUNTPOİNT', '/foo/bar')) def test_split(self): tester('ntpath.split("c:\\foo\\bar")', ('c:\\foo', 'bar')) tester('ntpath.split("\\\\conky\\mountpoint\\foo\\bar")', ('\\\\conky\\mountpoint\\foo', 'bar')) tester('ntpath.split("c:\\")', ('c:\\', '')) tester('ntpath.split("\\\\conky\\mountpoint\\")', ('\\\\conky\\mountpoint\\', '')) tester('ntpath.split("c:/")', ('c:/', '')) tester('ntpath.split("//conky/mountpoint/")', ('//conky/mountpoint/', '')) def test_isabs(self): tester('ntpath.isabs("c:\\")', 1) tester('ntpath.isabs("\\\\conky\\mountpoint\\")', 1) tester('ntpath.isabs("\\foo")', 1) tester('ntpath.isabs("\\foo\\bar")', 1) def test_commonprefix(self): tester('ntpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])', "/home/swen") tester('ntpath.commonprefix(["\\home\\swen\\spam", "\\home\\swen\\eggs"])', "\\home\\swen\\") tester('ntpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])', "/home/swen/spam") def test_join(self): tester('ntpath.join("")', '') tester('ntpath.join("", "", "")', '') tester('ntpath.join("a")', 'a') tester('ntpath.join("/a")', '/a') tester('ntpath.join("\\a")', '\\a') tester('ntpath.join("a:")', 'a:') tester('ntpath.join("a:", "\\b")', 'a:\\b') tester('ntpath.join("a", "\\b")', '\\b') tester('ntpath.join("a", "b", "c")', 'a\\b\\c') tester('ntpath.join("a\\", "b", "c")', 'a\\b\\c') tester('ntpath.join("a", "b\\", "c")', 'a\\b\\c') tester('ntpath.join("a", "b", "\\c")', '\\c') tester('ntpath.join("d:\\", "\\pleep")', 'd:\\pleep') tester('ntpath.join("d:\\", "a", "b")', 'd:\\a\\b') tester("ntpath.join('', 'a')", 'a') tester("ntpath.join('', '', '', '', 'a')", 'a') tester("ntpath.join('a', '')", 'a\\') tester("ntpath.join('a', '', '', '', '')", 'a\\') tester("ntpath.join('a\\', '')", 'a\\') tester("ntpath.join('a\\', '', '', '', '')", 'a\\') tester("ntpath.join('a/', '')", 'a/') tester("ntpath.join('a/b', 'x/y')", 'a/b\\x/y') tester("ntpath.join('/a/b', 'x/y')", '/a/b\\x/y') tester("ntpath.join('/a/b/', 'x/y')", '/a/b/x/y') tester("ntpath.join('c:', 'x/y')", 'c:x/y') tester("ntpath.join('c:a/b', 'x/y')", 'c:a/b\\x/y') tester("ntpath.join('c:a/b/', 'x/y')", 'c:a/b/x/y') tester("ntpath.join('c:/', 'x/y')", 'c:/x/y') tester("ntpath.join('c:/a/b', 'x/y')", 'c:/a/b\\x/y') tester("ntpath.join('c:/a/b/', 'x/y')", 'c:/a/b/x/y') tester("ntpath.join('//computer/share', 'x/y')", '//computer/share\\x/y') tester("ntpath.join('//computer/share/', 'x/y')", '//computer/share/x/y') tester("ntpath.join('//computer/share/a/b', 'x/y')", '//computer/share/a/b\\x/y') tester("ntpath.join('a/b', '/x/y')", '/x/y') tester("ntpath.join('/a/b', '/x/y')", '/x/y') tester("ntpath.join('c:', '/x/y')", 'c:/x/y') tester("ntpath.join('c:a/b', '/x/y')", 'c:/x/y') tester("ntpath.join('c:/', '/x/y')", 'c:/x/y') tester("ntpath.join('c:/a/b', '/x/y')", 'c:/x/y') tester("ntpath.join('//computer/share', '/x/y')", '//computer/share/x/y') tester("ntpath.join('//computer/share/', '/x/y')", '//computer/share/x/y') tester("ntpath.join('//computer/share/a', '/x/y')", '//computer/share/x/y') tester("ntpath.join('c:', 'C:x/y')", 'C:x/y') tester("ntpath.join('c:a/b', 'C:x/y')", 'C:a/b\\x/y') tester("ntpath.join('c:/', 'C:x/y')", 'C:/x/y') tester("ntpath.join('c:/a/b', 'C:x/y')", 'C:/a/b\\x/y') for x in ('', 'a/b', '/a/b', 'c:', 'c:a/b', 'c:/', 'c:/a/b', '//computer/share', '//computer/share/', '//computer/share/a/b'): for y in ('d:', 'd:x/y', 'd:/', 'd:/x/y', '//machine/common', '//machine/common/', '//machine/common/x/y'): tester("ntpath.join(%r, %r)" % (x, y), y) tester("ntpath.join('\\\\computer\\share\\', 'a', 'b')", '\\\\computer\\share\\a\\b') tester("ntpath.join('\\\\computer\\share', 'a', 'b')", '\\\\computer\\share\\a\\b') tester("ntpath.join('\\\\computer\\share', 'a\\b')", '\\\\computer\\share\\a\\b') tester("ntpath.join('//computer/share/', 'a', 'b')", '//computer/share/a\\b') tester("ntpath.join('//computer/share', 'a', 'b')", '//computer/share\\a\\b') tester("ntpath.join('//computer/share', 'a/b')", '//computer/share\\a/b') def test_normpath(self): tester("ntpath.normpath('A//////././//.//B')", r'A\B') tester("ntpath.normpath('A/./B')", r'A\B') tester("ntpath.normpath('A/foo/../B')", r'A\B') tester("ntpath.normpath('C:A//B')", r'C:A\B') tester("ntpath.normpath('D:A/./B')", r'D:A\B') tester("ntpath.normpath('e:A/foo/../B')", r'e:A\B') tester("ntpath.normpath('C:///A//B')", r'C:\A\B') tester("ntpath.normpath('D:///A/./B')", r'D:\A\B') tester("ntpath.normpath('e:///A/foo/../B')", r'e:\A\B') tester("ntpath.normpath('..')", r'..') tester("ntpath.normpath('.')", r'.') tester("ntpath.normpath('')", r'.') tester("ntpath.normpath('/')", '\\') tester("ntpath.normpath('c:/')", 'c:\\') tester("ntpath.normpath('/../.././..')", '\\') tester("ntpath.normpath('c:/../../..')", 'c:\\') tester("ntpath.normpath('../.././..')", r'..\..\..') tester("ntpath.normpath('K:../.././..')", r'K:..\..\..') tester("ntpath.normpath('C:////a/b')", r'C:\a\b') tester("ntpath.normpath('//machine/share//a/b')", r'\\machine\share\a\b') tester("ntpath.normpath('\\\\.\\NUL')", r'\\.\NUL') tester("ntpath.normpath('\\\\?\\D:/XY\\Z')", r'\\?\D:/XY\Z') def test_realpath_curdir(self): expected = ntpath.normpath(os.getcwd()) tester("ntpath.realpath('.')", expected) tester("ntpath.realpath('./.')", expected) tester("ntpath.realpath('/'.join(['.'] * 100))", expected) tester("ntpath.realpath('.\\.')", expected) tester("ntpath.realpath('\\'.join(['.'] * 100))", expected) def test_realpath_pardir(self): expected = ntpath.normpath(os.getcwd()) tester("ntpath.realpath('..')", ntpath.dirname(expected)) tester("ntpath.realpath('../..')", ntpath.dirname(ntpath.dirname(expected))) tester("ntpath.realpath('/'.join(['..'] * 50))", ntpath.splitdrive(expected)[0] + '\\') tester("ntpath.realpath('..\\..')", ntpath.dirname(ntpath.dirname(expected))) tester("ntpath.realpath('\\'.join(['..'] * 50))", ntpath.splitdrive(expected)[0] + '\\') @os_helper.skip_unless_symlink @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_basic(self): ABSTFN = ntpath.abspath(os_helper.TESTFN) open(ABSTFN, "wb").close() self.addCleanup(os_helper.unlink, ABSTFN) self.addCleanup(os_helper.unlink, ABSTFN + "1") os.symlink(ABSTFN, ABSTFN + "1") self.assertPathEqual(ntpath.realpath(ABSTFN + "1"), ABSTFN) self.assertPathEqual(ntpath.realpath(os.fsencode(ABSTFN + "1")), os.fsencode(ABSTFN)) @os_helper.skip_unless_symlink @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_strict(self): # Bug #43757: raise FileNotFoundError in strict mode if we encounter # a path that does not exist. ABSTFN = ntpath.abspath(os_helper.TESTFN) os.symlink(ABSTFN + "1", ABSTFN) self.addCleanup(os_helper.unlink, ABSTFN) self.assertRaises(FileNotFoundError, ntpath.realpath, ABSTFN, strict=True) self.assertRaises(FileNotFoundError, ntpath.realpath, ABSTFN + "2", strict=True) @os_helper.skip_unless_symlink @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_relative(self): ABSTFN = ntpath.abspath(os_helper.TESTFN) open(ABSTFN, "wb").close() self.addCleanup(os_helper.unlink, ABSTFN) self.addCleanup(os_helper.unlink, ABSTFN + "1") os.symlink(ABSTFN, ntpath.relpath(ABSTFN + "1")) self.assertPathEqual(ntpath.realpath(ABSTFN + "1"), ABSTFN) @os_helper.skip_unless_symlink @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_broken_symlinks(self): ABSTFN = ntpath.abspath(os_helper.TESTFN) os.mkdir(ABSTFN) self.addCleanup(os_helper.rmtree, ABSTFN) with os_helper.change_cwd(ABSTFN): os.mkdir("subdir") os.chdir("subdir") os.symlink(".", "recursive") os.symlink("..", "parent") os.chdir("..") os.symlink(".", "self") os.symlink("missing", "broken") os.symlink(r"broken\bar", "broken1") os.symlink(r"self\self\broken", "broken2") os.symlink(r"subdir\parent\subdir\parent\broken", "broken3") os.symlink(ABSTFN + r"\broken", "broken4") os.symlink(r"recursive\..\broken", "broken5") self.assertPathEqual(ntpath.realpath("broken"), ABSTFN + r"\missing") self.assertPathEqual(ntpath.realpath(r"broken\foo"), ABSTFN + r"\missing\foo") # bpo-38453: We no longer recursively resolve segments of relative # symlinks that the OS cannot resolve. self.assertPathEqual(ntpath.realpath(r"broken1"), ABSTFN + r"\broken\bar") self.assertPathEqual(ntpath.realpath(r"broken1\baz"), ABSTFN + r"\broken\bar\baz") self.assertPathEqual(ntpath.realpath("broken2"), ABSTFN + r"\self\self\missing") self.assertPathEqual(ntpath.realpath("broken3"), ABSTFN + r"\subdir\parent\subdir\parent\missing") self.assertPathEqual(ntpath.realpath("broken4"), ABSTFN + r"\missing") self.assertPathEqual(ntpath.realpath("broken5"), ABSTFN + r"\missing") self.assertPathEqual(ntpath.realpath(b"broken"), os.fsencode(ABSTFN + r"\missing")) self.assertPathEqual(ntpath.realpath(rb"broken\foo"), os.fsencode(ABSTFN + r"\missing\foo")) self.assertPathEqual(ntpath.realpath(rb"broken1"), os.fsencode(ABSTFN + r"\broken\bar")) self.assertPathEqual(ntpath.realpath(rb"broken1\baz"), os.fsencode(ABSTFN + r"\broken\bar\baz")) self.assertPathEqual(ntpath.realpath(b"broken2"), os.fsencode(ABSTFN + r"\self\self\missing")) self.assertPathEqual(ntpath.realpath(rb"broken3"), os.fsencode(ABSTFN + r"\subdir\parent\subdir\parent\missing")) self.assertPathEqual(ntpath.realpath(b"broken4"), os.fsencode(ABSTFN + r"\missing")) self.assertPathEqual(ntpath.realpath(b"broken5"), os.fsencode(ABSTFN + r"\missing")) @os_helper.skip_unless_symlink @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_symlink_loops(self): # Symlink loops in non-strict mode are non-deterministic as to which # path is returned, but it will always be the fully resolved path of # one member of the cycle ABSTFN = ntpath.abspath(os_helper.TESTFN) self.addCleanup(os_helper.unlink, ABSTFN) self.addCleanup(os_helper.unlink, ABSTFN + "1") self.addCleanup(os_helper.unlink, ABSTFN + "2") self.addCleanup(os_helper.unlink, ABSTFN + "y") self.addCleanup(os_helper.unlink, ABSTFN + "c") self.addCleanup(os_helper.unlink, ABSTFN + "a") os.symlink(ABSTFN, ABSTFN) self.assertPathEqual(ntpath.realpath(ABSTFN), ABSTFN) os.symlink(ABSTFN + "1", ABSTFN + "2") os.symlink(ABSTFN + "2", ABSTFN + "1") expected = (ABSTFN + "1", ABSTFN + "2") self.assertPathIn(ntpath.realpath(ABSTFN + "1"), expected) self.assertPathIn(ntpath.realpath(ABSTFN + "2"), expected) self.assertPathIn(ntpath.realpath(ABSTFN + "1\\x"), (ntpath.join(r, "x") for r in expected)) self.assertPathEqual(ntpath.realpath(ABSTFN + "1\\.."), ntpath.dirname(ABSTFN)) self.assertPathEqual(ntpath.realpath(ABSTFN + "1\\..\\x"), ntpath.dirname(ABSTFN) + "\\x") os.symlink(ABSTFN + "x", ABSTFN + "y") self.assertPathEqual(ntpath.realpath(ABSTFN + "1\\..\\" + ntpath.basename(ABSTFN) + "y"), ABSTFN + "x") self.assertPathIn(ntpath.realpath(ABSTFN + "1\\..\\" + ntpath.basename(ABSTFN) + "1"), expected) os.symlink(ntpath.basename(ABSTFN) + "a\\b", ABSTFN + "a") self.assertPathEqual(ntpath.realpath(ABSTFN + "a"), ABSTFN + "a") os.symlink("..\\" + ntpath.basename(ntpath.dirname(ABSTFN)) + "\\" + ntpath.basename(ABSTFN) + "c", ABSTFN + "c") self.assertPathEqual(ntpath.realpath(ABSTFN + "c"), ABSTFN + "c") # Test using relative path as well. self.assertPathEqual(ntpath.realpath(ntpath.basename(ABSTFN)), ABSTFN) @os_helper.skip_unless_symlink @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_symlink_loops_strict(self): # Symlink loops raise OSError in strict mode ABSTFN = ntpath.abspath(os_helper.TESTFN) self.addCleanup(os_helper.unlink, ABSTFN) self.addCleanup(os_helper.unlink, ABSTFN + "1") self.addCleanup(os_helper.unlink, ABSTFN + "2") self.addCleanup(os_helper.unlink, ABSTFN + "y") self.addCleanup(os_helper.unlink, ABSTFN + "c") self.addCleanup(os_helper.unlink, ABSTFN + "a") os.symlink(ABSTFN, ABSTFN) self.assertRaises(OSError, ntpath.realpath, ABSTFN, strict=True) os.symlink(ABSTFN + "1", ABSTFN + "2") os.symlink(ABSTFN + "2", ABSTFN + "1") self.assertRaises(OSError, ntpath.realpath, ABSTFN + "1", strict=True) self.assertRaises(OSError, ntpath.realpath, ABSTFN + "2", strict=True) self.assertRaises(OSError, ntpath.realpath, ABSTFN + "1\\x", strict=True) # Windows eliminates '..' components before resolving links, so the # following call is not expected to raise. self.assertPathEqual(ntpath.realpath(ABSTFN + "1\\..", strict=True), ntpath.dirname(ABSTFN)) self.assertRaises(OSError, ntpath.realpath, ABSTFN + "1\\..\\x", strict=True) os.symlink(ABSTFN + "x", ABSTFN + "y") self.assertRaises(OSError, ntpath.realpath, ABSTFN + "1\\..\\" + ntpath.basename(ABSTFN) + "y", strict=True) self.assertRaises(OSError, ntpath.realpath, ABSTFN + "1\\..\\" + ntpath.basename(ABSTFN) + "1", strict=True) os.symlink(ntpath.basename(ABSTFN) + "a\\b", ABSTFN + "a") self.assertRaises(OSError, ntpath.realpath, ABSTFN + "a", strict=True) os.symlink("..\\" + ntpath.basename(ntpath.dirname(ABSTFN)) + "\\" + ntpath.basename(ABSTFN) + "c", ABSTFN + "c") self.assertRaises(OSError, ntpath.realpath, ABSTFN + "c", strict=True) # Test using relative path as well. self.assertRaises(OSError, ntpath.realpath, ntpath.basename(ABSTFN), strict=True) @os_helper.skip_unless_symlink @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_symlink_prefix(self): ABSTFN = ntpath.abspath(os_helper.TESTFN) self.addCleanup(os_helper.unlink, ABSTFN + "3") self.addCleanup(os_helper.unlink, "\\\\?\\" + ABSTFN + "3.") self.addCleanup(os_helper.unlink, ABSTFN + "3link") self.addCleanup(os_helper.unlink, ABSTFN + "3.link") with open(ABSTFN + "3", "wb") as f: f.write(b'0') os.symlink(ABSTFN + "3", ABSTFN + "3link") with open("\\\\?\\" + ABSTFN + "3.", "wb") as f: f.write(b'1') os.symlink("\\\\?\\" + ABSTFN + "3.", ABSTFN + "3.link") self.assertPathEqual(ntpath.realpath(ABSTFN + "3link"), ABSTFN + "3") self.assertPathEqual(ntpath.realpath(ABSTFN + "3.link"), "\\\\?\\" + ABSTFN + "3.") # Resolved paths should be usable to open target files with open(ntpath.realpath(ABSTFN + "3link"), "rb") as f: self.assertEqual(f.read(), b'0') with open(ntpath.realpath(ABSTFN + "3.link"), "rb") as f: self.assertEqual(f.read(), b'1') # When the prefix is included, it is not stripped self.assertPathEqual(ntpath.realpath("\\\\?\\" + ABSTFN + "3link"), "\\\\?\\" + ABSTFN + "3") self.assertPathEqual(ntpath.realpath("\\\\?\\" + ABSTFN + "3.link"), "\\\\?\\" + ABSTFN + "3.") @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') def test_realpath_nul(self): tester("ntpath.realpath('NUL')", r'\\.\NUL') @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') @unittest.skipUnless(HAVE_GETSHORTPATHNAME, 'need _getshortpathname') def test_realpath_cwd(self): ABSTFN = ntpath.abspath(os_helper.TESTFN) os_helper.unlink(ABSTFN) os_helper.rmtree(ABSTFN) os.mkdir(ABSTFN) self.addCleanup(os_helper.rmtree, ABSTFN) test_dir_long = ntpath.join(ABSTFN, "MyVeryLongDirectoryName") os.mkdir(test_dir_long) test_dir_short = _getshortpathname(test_dir_long) test_file_long = ntpath.join(test_dir_long, "file.txt") test_file_short = ntpath.join(test_dir_short, "file.txt") with open(test_file_long, "wb") as f: f.write(b"content") self.assertPathEqual(test_file_long, ntpath.realpath(test_file_short)) with os_helper.change_cwd(test_dir_long): self.assertPathEqual(test_file_long, ntpath.realpath("file.txt")) with os_helper.change_cwd(test_dir_long.lower()): self.assertPathEqual(test_file_long, ntpath.realpath("file.txt")) with os_helper.change_cwd(test_dir_short): self.assertPathEqual(test_file_long, ntpath.realpath("file.txt")) def test_expandvars(self): with os_helper.EnvironmentVarGuard() as env: env.clear() env["foo"] = "bar" env["{foo"] = "baz1" env["{foo}"] = "baz2" tester('ntpath.expandvars("foo")', "foo") tester('ntpath.expandvars("$foo bar")', "bar bar") tester('ntpath.expandvars("${foo}bar")', "barbar") tester('ntpath.expandvars("$[foo]bar")', "$[foo]bar") tester('ntpath.expandvars("$bar bar")', "$bar bar") tester('ntpath.expandvars("$?bar")', "$?bar") tester('ntpath.expandvars("$foo}bar")', "bar}bar") tester('ntpath.expandvars("${foo")', "${foo") tester('ntpath.expandvars("${{foo}}")', "baz1}") tester('ntpath.expandvars("$foo$foo")', "barbar") tester('ntpath.expandvars("$bar$bar")', "$bar$bar") tester('ntpath.expandvars("%foo% bar")', "bar bar") tester('ntpath.expandvars("%foo%bar")', "barbar") tester('ntpath.expandvars("%foo%%foo%")', "barbar") tester('ntpath.expandvars("%%foo%%foo%foo%")', "%foo%foobar") tester('ntpath.expandvars("%?bar%")', "%?bar%") tester('ntpath.expandvars("%foo%%bar")', "bar%bar") tester('ntpath.expandvars("\'%foo%\'%bar")', "\'%foo%\'%bar") tester('ntpath.expandvars("bar\'%foo%")', "bar\'%foo%") @unittest.skipUnless(os_helper.FS_NONASCII, 'need os_helper.FS_NONASCII') def test_expandvars_nonascii(self): def check(value, expected): tester('ntpath.expandvars(%r)' % value, expected) with os_helper.EnvironmentVarGuard() as env: env.clear() nonascii = os_helper.FS_NONASCII env['spam'] = nonascii env[nonascii] = 'ham' + nonascii check('$spam bar', '%s bar' % nonascii) check('$%s bar' % nonascii, '$%s bar' % nonascii) check('${spam}bar', '%sbar' % nonascii) check('${%s}bar' % nonascii, 'ham%sbar' % nonascii) check('$spam}bar', '%s}bar' % nonascii) check('$%s}bar' % nonascii, '$%s}bar' % nonascii) check('%spam% bar', '%s bar' % nonascii) check('%{}% bar'.format(nonascii), 'ham%s bar' % nonascii) check('%spam%bar', '%sbar' % nonascii) check('%{}%bar'.format(nonascii), 'ham%sbar' % nonascii) def test_expanduser(self): tester('ntpath.expanduser("test")', 'test') with os_helper.EnvironmentVarGuard() as env: env.clear() tester('ntpath.expanduser("~test")', '~test') env['HOMEDRIVE'] = 'C:\\' env['HOMEPATH'] = 'Users\\eric' env['USERNAME'] = 'eric' tester('ntpath.expanduser("~test")', 'C:\\Users\\test') tester('ntpath.expanduser("~")', 'C:\\Users\\eric') del env['HOMEDRIVE'] tester('ntpath.expanduser("~test")', 'Users\\test') tester('ntpath.expanduser("~")', 'Users\\eric') env.clear() env['USERPROFILE'] = 'C:\\Users\\eric' env['USERNAME'] = 'eric' tester('ntpath.expanduser("~test")', 'C:\\Users\\test') tester('ntpath.expanduser("~")', 'C:\\Users\\eric') tester('ntpath.expanduser("~test\\foo\\bar")', 'C:\\Users\\test\\foo\\bar') tester('ntpath.expanduser("~test/foo/bar")', 'C:\\Users\\test/foo/bar') tester('ntpath.expanduser("~\\foo\\bar")', 'C:\\Users\\eric\\foo\\bar') tester('ntpath.expanduser("~/foo/bar")', 'C:\\Users\\eric/foo/bar') # bpo-36264: ignore `HOME` when set on windows env.clear() env['HOME'] = 'F:\\' env['USERPROFILE'] = 'C:\\Users\\eric' env['USERNAME'] = 'eric' tester('ntpath.expanduser("~test")', 'C:\\Users\\test') tester('ntpath.expanduser("~")', 'C:\\Users\\eric') # bpo-39899: don't guess another user's home directory if # `%USERNAME% != basename(%USERPROFILE%)` env.clear() env['USERPROFILE'] = 'C:\\Users\\eric' env['USERNAME'] = 'idle' tester('ntpath.expanduser("~test")', '~test') tester('ntpath.expanduser("~")', 'C:\\Users\\eric') @unittest.skipUnless(nt, "abspath requires 'nt' module") def test_abspath(self): tester('ntpath.abspath("C:\\")', "C:\\") with os_helper.temp_cwd(os_helper.TESTFN) as cwd_dir: # bpo-31047 tester('ntpath.abspath("")', cwd_dir) tester('ntpath.abspath(" ")', cwd_dir + "\\ ") tester('ntpath.abspath("?")', cwd_dir + "\\?") drive, _ = ntpath.splitdrive(cwd_dir) tester('ntpath.abspath("/abc/")', drive + "\\abc") def test_relpath(self): tester('ntpath.relpath("a")', 'a') tester('ntpath.relpath(ntpath.abspath("a"))', 'a') tester('ntpath.relpath("a/b")', 'a\\b') tester('ntpath.relpath("../a/b")', '..\\a\\b') with os_helper.temp_cwd(os_helper.TESTFN) as cwd_dir: currentdir = ntpath.basename(cwd_dir) tester('ntpath.relpath("a", "../b")', '..\\'+currentdir+'\\a') tester('ntpath.relpath("a/b", "../c")', '..\\'+currentdir+'\\a\\b') tester('ntpath.relpath("a", "b/c")', '..\\..\\a') tester('ntpath.relpath("c:/foo/bar/bat", "c:/x/y")', '..\\..\\foo\\bar\\bat') tester('ntpath.relpath("//conky/mountpoint/a", "//conky/mountpoint/b/c")', '..\\..\\a') tester('ntpath.relpath("a", "a")', '.') tester('ntpath.relpath("/foo/bar/bat", "/x/y/z")', '..\\..\\..\\foo\\bar\\bat') tester('ntpath.relpath("/foo/bar/bat", "/foo/bar")', 'bat') tester('ntpath.relpath("/foo/bar/bat", "/")', 'foo\\bar\\bat') tester('ntpath.relpath("/", "/foo/bar/bat")', '..\\..\\..') tester('ntpath.relpath("/foo/bar/bat", "/x")', '..\\foo\\bar\\bat') tester('ntpath.relpath("/x", "/foo/bar/bat")', '..\\..\\..\\x') tester('ntpath.relpath("/", "/")', '.') tester('ntpath.relpath("/a", "/a")', '.') tester('ntpath.relpath("/a/b", "/a/b")', '.') tester('ntpath.relpath("c:/foo", "C:/FOO")', '.') def test_commonpath(self): def check(paths, expected): tester(('ntpath.commonpath(%r)' % paths).replace('\\\\', '\\'), expected) def check_error(exc, paths): self.assertRaises(exc, ntpath.commonpath, paths) self.assertRaises(exc, ntpath.commonpath, [os.fsencode(p) for p in paths]) self.assertRaises(ValueError, ntpath.commonpath, []) check_error(ValueError, ['C:\\Program Files', 'Program Files']) check_error(ValueError, ['C:\\Program Files', 'C:Program Files']) check_error(ValueError, ['\\Program Files', 'Program Files']) check_error(ValueError, ['Program Files', 'C:\\Program Files']) check(['C:\\Program Files'], 'C:\\Program Files') check(['C:\\Program Files', 'C:\\Program Files'], 'C:\\Program Files') check(['C:\\Program Files\\', 'C:\\Program Files'], 'C:\\Program Files') check(['C:\\Program Files\\', 'C:\\Program Files\\'], 'C:\\Program Files') check(['C:\\\\Program Files', 'C:\\Program Files\\\\'], 'C:\\Program Files') check(['C:\\.\\Program Files', 'C:\\Program Files\\.'], 'C:\\Program Files') check(['C:\\', 'C:\\bin'], 'C:\\') check(['C:\\Program Files', 'C:\\bin'], 'C:\\') check(['C:\\Program Files', 'C:\\Program Files\\Bar'], 'C:\\Program Files') check(['C:\\Program Files\\Foo', 'C:\\Program Files\\Bar'], 'C:\\Program Files') check(['C:\\Program Files', 'C:\\Projects'], 'C:\\') check(['C:\\Program Files\\', 'C:\\Projects'], 'C:\\') check(['C:\\Program Files\\Foo', 'C:/Program Files/Bar'], 'C:\\Program Files') check(['C:\\Program Files\\Foo', 'c:/program files/bar'], 'C:\\Program Files') check(['c:/program files/bar', 'C:\\Program Files\\Foo'], 'c:\\program files') check_error(ValueError, ['C:\\Program Files', 'D:\\Program Files']) check(['spam'], 'spam') check(['spam', 'spam'], 'spam') check(['spam', 'alot'], '') check(['and\\jam', 'and\\spam'], 'and') check(['and\\\\jam', 'and\\spam\\\\'], 'and') check(['and\\.\\jam', '.\\and\\spam'], 'and') check(['and\\jam', 'and\\spam', 'alot'], '') check(['and\\jam', 'and\\spam', 'and'], 'and') check(['C:and\\jam', 'C:and\\spam'], 'C:and') check([''], '') check(['', 'spam\\alot'], '') check_error(ValueError, ['', '\\spam\\alot']) self.assertRaises(TypeError, ntpath.commonpath, [b'C:\\Program Files', 'C:\\Program Files\\Foo']) self.assertRaises(TypeError, ntpath.commonpath, [b'C:\\Program Files', 'Program Files\\Foo']) self.assertRaises(TypeError, ntpath.commonpath, [b'Program Files', 'C:\\Program Files\\Foo']) self.assertRaises(TypeError, ntpath.commonpath, ['C:\\Program Files', b'C:\\Program Files\\Foo']) self.assertRaises(TypeError, ntpath.commonpath, ['C:\\Program Files', b'Program Files\\Foo']) self.assertRaises(TypeError, ntpath.commonpath, ['Program Files', b'C:\\Program Files\\Foo']) def test_sameopenfile(self): with TemporaryFile() as tf1, TemporaryFile() as tf2: # Make sure the same file is really the same self.assertTrue(ntpath.sameopenfile(tf1.fileno(), tf1.fileno())) # Make sure different files are really different self.assertFalse(ntpath.sameopenfile(tf1.fileno(), tf2.fileno())) # Make sure invalid values don't cause issues on win32 if sys.platform == "win32": with self.assertRaises(OSError): # Invalid file descriptors shouldn't display assert # dialogs (#4804) ntpath.sameopenfile(-1, -1) def test_ismount(self): self.assertTrue(ntpath.ismount("c:\\")) self.assertTrue(ntpath.ismount("C:\\")) self.assertTrue(ntpath.ismount("c:/")) self.assertTrue(ntpath.ismount("C:/")) self.assertTrue(ntpath.ismount("\\\\.\\c:\\")) self.assertTrue(ntpath.ismount("\\\\.\\C:\\")) self.assertTrue(ntpath.ismount(b"c:\\")) self.assertTrue(ntpath.ismount(b"C:\\")) self.assertTrue(ntpath.ismount(b"c:/")) self.assertTrue(ntpath.ismount(b"C:/")) self.assertTrue(ntpath.ismount(b"\\\\.\\c:\\")) self.assertTrue(ntpath.ismount(b"\\\\.\\C:\\")) with os_helper.temp_dir() as d: self.assertFalse(ntpath.ismount(d)) if sys.platform == "win32": # # Make sure the current folder isn't the root folder # (or any other volume root). The drive-relative # locations below cannot then refer to mount points # drive, path = ntpath.splitdrive(sys.executable) with os_helper.change_cwd(ntpath.dirname(sys.executable)): self.assertFalse(ntpath.ismount(drive.lower())) self.assertFalse(ntpath.ismount(drive.upper())) self.assertTrue(ntpath.ismount("\\\\localhost\\c$")) self.assertTrue(ntpath.ismount("\\\\localhost\\c$\\")) self.assertTrue(ntpath.ismount(b"\\\\localhost\\c$")) self.assertTrue(ntpath.ismount(b"\\\\localhost\\c$\\")) def assertEqualCI(self, s1, s2): """Assert that two strings are equal ignoring case differences.""" self.assertEqual(s1.lower(), s2.lower()) @unittest.skipUnless(nt, "OS helpers require 'nt' module") def test_nt_helpers(self): # Trivial validation that the helpers do not break, and support both # unicode and bytes (UTF-8) paths executable = nt._getfinalpathname(sys.executable) for path in executable, os.fsencode(executable): volume_path = nt._getvolumepathname(path) path_drive = ntpath.splitdrive(path)[0] volume_path_drive = ntpath.splitdrive(volume_path)[0] self.assertEqualCI(path_drive, volume_path_drive) cap, free = nt._getdiskusage(sys.exec_prefix) self.assertGreater(cap, 0) self.assertGreater(free, 0) b_cap, b_free = nt._getdiskusage(sys.exec_prefix.encode()) # Free space may change, so only test the capacity is equal self.assertEqual(b_cap, cap) self.assertGreater(b_free, 0) for path in [sys.prefix, sys.executable]: final_path = nt._getfinalpathname(path) self.assertIsInstance(final_path, str) self.assertGreater(len(final_path), 0) b_final_path = nt._getfinalpathname(path.encode()) self.assertIsInstance(b_final_path, bytes) self.assertGreater(len(b_final_path), 0) class NtCommonTest(test_genericpath.CommonTest, unittest.TestCase): pathmodule = ntpath attributes = ['relpath'] class PathLikeTests(NtpathTestCase): path = ntpath def setUp(self): self.file_name = os_helper.TESTFN self.file_path = FakePath(os_helper.TESTFN) self.addCleanup(os_helper.unlink, self.file_name) with open(self.file_name, 'xb', 0) as file: file.write(b"test_ntpath.PathLikeTests") def _check_function(self, func): self.assertPathEqual(func(self.file_path), func(self.file_name)) def test_path_normcase(self): self._check_function(self.path.normcase) if sys.platform == 'win32': self.assertEqual(ntpath.normcase('\u03a9\u2126'), 'ωΩ') def test_path_isabs(self): self._check_function(self.path.isabs) def test_path_join(self): self.assertEqual(self.path.join('a', FakePath('b'), 'c'), self.path.join('a', 'b', 'c')) def test_path_split(self): self._check_function(self.path.split) def test_path_splitext(self): self._check_function(self.path.splitext) def test_path_splitdrive(self): self._check_function(self.path.splitdrive) def test_path_basename(self): self._check_function(self.path.basename) def test_path_dirname(self): self._check_function(self.path.dirname) def test_path_islink(self): self._check_function(self.path.islink) def test_path_lexists(self): self._check_function(self.path.lexists) def test_path_ismount(self): self._check_function(self.path.ismount) def test_path_expanduser(self): self._check_function(self.path.expanduser) def test_path_expandvars(self): self._check_function(self.path.expandvars) def test_path_normpath(self): self._check_function(self.path.normpath) def test_path_abspath(self): self._check_function(self.path.abspath) def test_path_realpath(self): self._check_function(self.path.realpath) def test_path_relpath(self): self._check_function(self.path.relpath) def test_path_commonpath(self): common_path = self.path.commonpath([self.file_path, self.file_name]) self.assertPathEqual(common_path, self.file_name) def test_path_isdir(self): self._check_function(self.path.isdir) if __name__ == "__main__": unittest.main()
Close