test_path.py
420 lines
| 14.3 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r1617 | # encoding: utf-8 | ||
Brian Granger
|
r2498 | """Tests for IPython.utils.path.py""" | ||
Brian Granger
|
r1617 | |||
#----------------------------------------------------------------------------- | ||||
Matthias BUSSONNIER
|
r5390 | # Copyright (C) 2008-2011 The IPython Development Team | ||
Brian Granger
|
r1617 | # | ||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
Robert Kern
|
r4688 | from __future__ import with_statement | ||
Fernando Perez
|
r1843 | import os | ||
import shutil | ||||
import sys | ||||
import tempfile | ||||
Thomas Kluyver
|
r4891 | from io import StringIO | ||
Jorgen Stenarson
|
r1751 | |||
Jorgen Stenarson
|
r1801 | from os.path import join, abspath, split | ||
Fernando Perez
|
r1843 | |||
Jorgen Stenarson
|
r1802 | import nose.tools as nt | ||
Brian Granger
|
r1617 | |||
Fernando Perez
|
r1843 | from nose import with_setup | ||
Brian Granger
|
r1617 | |||
Fernando Perez
|
r1843 | import IPython | ||
Fernando Perez
|
r2436 | from IPython.testing import decorators as dec | ||
bgranger
|
r2513 | from IPython.testing.decorators import skip_if_not_win32, skip_win32 | ||
Thomas Kluyver
|
r4901 | from IPython.testing.tools import make_tempfile, AssertPrints | ||
MinRK
|
r4475 | from IPython.utils import path, io | ||
Thomas Kluyver
|
r4764 | from IPython.utils import py3compat | ||
Fernando Perez
|
r1843 | |||
# Platform-dependent imports | ||||
Jorgen Stenarson
|
r1750 | try: | ||
import _winreg as wreg | ||||
except ImportError: | ||||
Jorgen Stenarson
|
r1793 | #Fake _winreg module on none windows platforms | ||
Thomas Kluyver
|
r4764 | import types | ||
wr_name = "winreg" if py3compat.PY3 else "_winreg" | ||||
sys.modules[wr_name] = types.ModuleType(wr_name) | ||||
Jorgen Stenarson
|
r1793 | import _winreg as wreg | ||
#Add entries that needs to be stubbed by the testing code | ||||
(wreg.OpenKey, wreg.QueryValueEx,) = (None, None) | ||||
Bernardo B. Marques
|
r4872 | |||
Thomas Kluyver
|
r4764 | try: | ||
reload | ||||
except NameError: # Python 3 | ||||
from imp import reload | ||||
Jorgen Stenarson
|
r1750 | |||
Fernando Perez
|
r1843 | #----------------------------------------------------------------------------- | ||
# Globals | ||||
#----------------------------------------------------------------------------- | ||||
env = os.environ | ||||
TEST_FILE_PATH = split(abspath(__file__))[0] | ||||
TMP_TEST_DIR = tempfile.mkdtemp() | ||||
HOME_TEST_DIR = join(TMP_TEST_DIR, "home_test_dir") | ||||
MinRK
|
r3347 | XDG_TEST_DIR = join(HOME_TEST_DIR, "xdg_test_dir") | ||
Fernando Perez
|
r2449 | IP_TEST_DIR = join(HOME_TEST_DIR,'.ipython') | ||
Jorgen Stenarson
|
r1804 | # | ||
# Setup/teardown functions/decorators | ||||
Jorgen Stenarson
|
r1803 | # | ||
def setup(): | ||||
Jorgen Stenarson
|
r1805 | """Setup testenvironment for the module: | ||
Bernardo B. Marques
|
r4872 | |||
Jorgen Stenarson
|
r1805 | - Adds dummy home dir tree | ||
""" | ||||
Fernando Perez
|
r1843 | # Do not mask exceptions here. In particular, catching WindowsError is a | ||
# problem because that exception is only defined on Windows... | ||||
os.makedirs(IP_TEST_DIR) | ||||
MinRK
|
r3347 | os.makedirs(os.path.join(XDG_TEST_DIR, 'ipython')) | ||
Jorgen Stenarson
|
r1803 | |||
Brian Granger
|
r2505 | |||
Jorgen Stenarson
|
r1803 | def teardown(): | ||
Jorgen Stenarson
|
r1805 | """Teardown testenvironment for the module: | ||
Bernardo B. Marques
|
r4872 | |||
Jorgen Stenarson
|
r1805 | - Remove dummy home dir tree | ||
""" | ||||
Fernando Perez
|
r1843 | # Note: we remove the parent test dir, which is the root of all test | ||
# subdirs we may have created. Use shutil instead of os.removedirs, so | ||||
# that non-empty directories are all recursively removed. | ||||
shutil.rmtree(TMP_TEST_DIR) | ||||
Jorgen Stenarson
|
r1803 | |||
Brian Granger
|
r2505 | |||
Jorgen Stenarson
|
r1750 | def setup_environment(): | ||
Bernardo B. Marques
|
r4872 | """Setup testenvironment for some functions that are tested | ||
Jorgen Stenarson
|
r1805 | in this module. In particular this functions stores attributes | ||
and other things that we need to stub in some test functions. | ||||
Bernardo B. Marques
|
r4872 | This needs to be done on a function level and not module level because | ||
Jorgen Stenarson
|
r1805 | each testfunction needs a pristine environment. | ||
""" | ||||
Jorgen Stenarson
|
r1750 | global oldstuff, platformstuff | ||
Robert Kern
|
r4688 | oldstuff = (env.copy(), os.name, path.get_home_dir, IPython.__file__, os.getcwd()) | ||
Jorgen Stenarson
|
r1750 | |||
Jorgen Stenarson
|
r1796 | if os.name == 'nt': | ||
platformstuff = (wreg.OpenKey, wreg.QueryValueEx,) | ||||
Jorgen Stenarson
|
r1750 | |||
Brian Granger
|
r2505 | |||
Jorgen Stenarson
|
r1750 | def teardown_environment(): | ||
Jorgen Stenarson
|
r1805 | """Restore things that were remebered by the setup_environment function | ||
""" | ||||
Robert Kern
|
r4688 | (oldenv, os.name, path.get_home_dir, IPython.__file__, old_wd) = oldstuff | ||
os.chdir(old_wd) | ||||
MinRK
|
r4475 | reload(path) | ||
Bernardo B. Marques
|
r4872 | |||
Jorgen Stenarson
|
r1750 | for key in env.keys(): | ||
if key not in oldenv: | ||||
del env[key] | ||||
env.update(oldenv) | ||||
if hasattr(sys, 'frozen'): | ||||
del sys.frozen | ||||
Jorgen Stenarson
|
r1796 | if os.name == 'nt': | ||
(wreg.OpenKey, wreg.QueryValueEx,) = platformstuff | ||||
Jorgen Stenarson
|
r1750 | |||
Jorgen Stenarson
|
r1805 | # Build decorator that uses the setup_environment/setup_environment | ||
Fernando Perez
|
r2436 | with_environment = with_setup(setup_environment, teardown_environment) | ||
Jorgen Stenarson
|
r1750 | |||
Jorgen Stenarson
|
r1820 | @skip_if_not_win32 | ||
Fernando Perez
|
r2436 | @with_environment | ||
Jorgen Stenarson
|
r1745 | def test_get_home_dir_1(): | ||
Jorgen Stenarson
|
r1746 | """Testcase for py2exe logic, un-compressed lib | ||
""" | ||||
Jorgen Stenarson
|
r1796 | sys.frozen = True | ||
Bernardo B. Marques
|
r4872 | |||
Jorgen Stenarson
|
r1746 | #fake filename for IPython.__init__ | ||
Jorgen Stenarson
|
r1855 | IPython.__file__ = abspath(join(HOME_TEST_DIR, "Lib/IPython/__init__.py")) | ||
Bernardo B. Marques
|
r4872 | |||
bgranger
|
r2513 | home_dir = path.get_home_dir() | ||
Fernando Perez
|
r1843 | nt.assert_equal(home_dir, abspath(HOME_TEST_DIR)) | ||
Brian Granger
|
r2505 | |||
Jorgen Stenarson
|
r1812 | @skip_if_not_win32 | ||
Fernando Perez
|
r2436 | @with_environment | ||
Jorgen Stenarson
|
r1800 | def test_get_home_dir_2(): | ||
Jorgen Stenarson
|
r1746 | """Testcase for py2exe logic, compressed lib | ||
""" | ||||
Jorgen Stenarson
|
r1801 | sys.frozen = True | ||
Jorgen Stenarson
|
r1746 | #fake filename for IPython.__init__ | ||
Jorgen Stenarson
|
r1855 | IPython.__file__ = abspath(join(HOME_TEST_DIR, "Library.zip/IPython/__init__.py")).lower() | ||
Bernardo B. Marques
|
r4872 | |||
MinRK
|
r5384 | home_dir = path.get_home_dir(True) | ||
Fernando Perez
|
r1843 | nt.assert_equal(home_dir, abspath(HOME_TEST_DIR).lower()) | ||
Jorgen Stenarson
|
r1746 | |||
Brian Granger
|
r2505 | |||
Fernando Perez
|
r2436 | @with_environment | ||
Jorgen Stenarson
|
r1800 | def test_get_home_dir_3(): | ||
MinRK
|
r5383 | """get_home_dir() uses $HOME if set""" | ||
Fernando Perez
|
r1843 | env["HOME"] = HOME_TEST_DIR | ||
MinRK
|
r5384 | home_dir = path.get_home_dir(True) | ||
MinRK
|
r6123 | # get_home_dir expands symlinks | ||
nt.assert_equal(home_dir, os.path.realpath(env["HOME"])) | ||||
Jorgen Stenarson
|
r1745 | |||
Brian Granger
|
r2505 | |||
Fernando Perez
|
r2436 | @with_environment | ||
Jorgen Stenarson
|
r1800 | def test_get_home_dir_4(): | ||
MinRK
|
r5383 | """get_home_dir() still works if $HOME is not set""" | ||
Bernardo B. Marques
|
r4872 | |||
Jorgen Stenarson
|
r1812 | if 'HOME' in env: del env['HOME'] | ||
MinRK
|
r5383 | # this should still succeed, but we don't know what the answer should be | ||
MinRK
|
r5384 | home = path.get_home_dir(True) | ||
MinRK
|
r5383 | nt.assert_true(path._writable_dir(home)) | ||
Brian Granger
|
r2505 | |||
Fernando Perez
|
r2436 | @with_environment | ||
Jorgen Stenarson
|
r1800 | def test_get_home_dir_5(): | ||
MinRK
|
r5383 | """raise HomeDirError if $HOME is specified, but not a writable dir""" | ||
env['HOME'] = abspath(HOME_TEST_DIR+'garbage') | ||||
MinRK
|
r5385 | # set os.name = posix, to prevent My Documents fallback on Windows | ||
os.name = 'posix' | ||||
MinRK
|
r5384 | nt.assert_raises(path.HomeDirError, path.get_home_dir, True) | ||
Fernando Perez
|
r3373 | |||
Bernardo B. Marques
|
r4872 | |||
bgranger
|
r2513 | # Should we stub wreg fully so we can run the test on all platforms? | ||
@skip_if_not_win32 | ||||
@with_environment | ||||
def test_get_home_dir_8(): | ||||
"""Using registry hack for 'My Documents', os=='nt' | ||||
Bernardo B. Marques
|
r4872 | |||
bgranger
|
r2513 | HOMESHARE, HOMEDRIVE, HOMEPATH, USERPROFILE and others are missing. | ||
Jorgen Stenarson
|
r1746 | """ | ||
Jorgen Stenarson
|
r1796 | os.name = 'nt' | ||
Fernando Perez
|
r2447 | # Remove from stub environment all keys that may be set | ||
for key in ['HOME', 'HOMESHARE', 'HOMEDRIVE', 'HOMEPATH', 'USERPROFILE']: | ||||
env.pop(key, None) | ||||
Jorgen Stenarson
|
r1746 | |||
#Stub windows registry functions | ||||
Jorgen Stenarson
|
r1796 | def OpenKey(x, y): | ||
Jorgen Stenarson
|
r1746 | class key: | ||
def Close(self): | ||||
pass | ||||
return key() | ||||
Jorgen Stenarson
|
r1796 | def QueryValueEx(x, y): | ||
Fernando Perez
|
r1843 | return [abspath(HOME_TEST_DIR)] | ||
Jorgen Stenarson
|
r1746 | |||
Jorgen Stenarson
|
r1796 | wreg.OpenKey = OpenKey | ||
wreg.QueryValueEx = QueryValueEx | ||||
Jorgen Stenarson
|
r1746 | |||
Brian Granger
|
r2505 | home_dir = path.get_home_dir() | ||
Fernando Perez
|
r1843 | nt.assert_equal(home_dir, abspath(HOME_TEST_DIR)) | ||
Jorgen Stenarson
|
r1745 | |||
Jorgen Stenarson
|
r1750 | |||
Fernando Perez
|
r2436 | @with_environment | ||
Jorgen Stenarson
|
r1749 | def test_get_ipython_dir_1(): | ||
Jorgen Stenarson
|
r1805 | """test_get_ipython_dir_1, Testcase to see if we can call get_ipython_dir without Exceptions.""" | ||
Min RK
|
r4105 | env_ipdir = os.path.join("someplace", ".ipython") | ||
MinRK
|
r4475 | path._writable_dir = lambda path: True | ||
Bradley M. Froehle
|
r6700 | env['IPYTHONDIR'] = env_ipdir | ||
Brian Granger
|
r2505 | ipdir = path.get_ipython_dir() | ||
Min RK
|
r4105 | nt.assert_equal(ipdir, env_ipdir) | ||
Jorgen Stenarson
|
r1749 | |||
Fernando Perez
|
r2436 | @with_environment | ||
Jorgen Stenarson
|
r1800 | def test_get_ipython_dir_2(): | ||
Jorgen Stenarson
|
r1805 | """test_get_ipython_dir_2, Testcase to see if we can call get_ipython_dir without Exceptions.""" | ||
Brian Granger
|
r2505 | path.get_home_dir = lambda : "someplace" | ||
MinRK
|
r4475 | path.get_xdg_dir = lambda : None | ||
path._writable_dir = lambda path: True | ||||
Jorgen Stenarson
|
r1796 | os.name = "posix" | ||
Fernando Perez
|
r2449 | env.pop('IPYTHON_DIR', None) | ||
env.pop('IPYTHONDIR', None) | ||||
MinRK
|
r3347 | env.pop('XDG_CONFIG_HOME', None) | ||
Brian Granger
|
r2505 | ipdir = path.get_ipython_dir() | ||
Fernando Perez
|
r2392 | nt.assert_equal(ipdir, os.path.join("someplace", ".ipython")) | ||
Jorgen Stenarson
|
r1749 | |||
MinRK
|
r3347 | @with_environment | ||
def test_get_ipython_dir_3(): | ||||
"""test_get_ipython_dir_3, use XDG if defined, and .ipython doesn't exist.""" | ||||
path.get_home_dir = lambda : "someplace" | ||||
MinRK
|
r4475 | path._writable_dir = lambda path: True | ||
MinRK
|
r3347 | os.name = "posix" | ||
env.pop('IPYTHON_DIR', None) | ||||
env.pop('IPYTHONDIR', None) | ||||
env['XDG_CONFIG_HOME'] = XDG_TEST_DIR | ||||
ipdir = path.get_ipython_dir() | ||||
nt.assert_equal(ipdir, os.path.join(XDG_TEST_DIR, "ipython")) | ||||
@with_environment | ||||
def test_get_ipython_dir_4(): | ||||
"""test_get_ipython_dir_4, use XDG if both exist.""" | ||||
path.get_home_dir = lambda : HOME_TEST_DIR | ||||
os.name = "posix" | ||||
env.pop('IPYTHON_DIR', None) | ||||
env.pop('IPYTHONDIR', None) | ||||
env['XDG_CONFIG_HOME'] = XDG_TEST_DIR | ||||
xdg_ipdir = os.path.join(XDG_TEST_DIR, "ipython") | ||||
ipdir = path.get_ipython_dir() | ||||
nt.assert_equal(ipdir, xdg_ipdir) | ||||
@with_environment | ||||
def test_get_ipython_dir_5(): | ||||
"""test_get_ipython_dir_5, use .ipython if exists and XDG defined, but doesn't exist.""" | ||||
MinRK
|
r3896 | path.get_home_dir = lambda : HOME_TEST_DIR | ||
MinRK
|
r3347 | os.name = "posix" | ||
env.pop('IPYTHON_DIR', None) | ||||
env.pop('IPYTHONDIR', None) | ||||
env['XDG_CONFIG_HOME'] = XDG_TEST_DIR | ||||
os.rmdir(os.path.join(XDG_TEST_DIR, 'ipython')) | ||||
ipdir = path.get_ipython_dir() | ||||
nt.assert_equal(ipdir, IP_TEST_DIR) | ||||
@with_environment | ||||
def test_get_ipython_dir_6(): | ||||
"""test_get_ipython_dir_6, use XDG if defined and neither exist.""" | ||||
MinRK
|
r4475 | xdg = os.path.join(HOME_TEST_DIR, 'somexdg') | ||
os.mkdir(xdg) | ||||
shutil.rmtree(os.path.join(HOME_TEST_DIR, '.ipython')) | ||||
path.get_home_dir = lambda : HOME_TEST_DIR | ||||
path.get_xdg_dir = lambda : xdg | ||||
MinRK
|
r3347 | os.name = "posix" | ||
env.pop('IPYTHON_DIR', None) | ||||
env.pop('IPYTHONDIR', None) | ||||
MinRK
|
r4475 | env.pop('XDG_CONFIG_HOME', None) | ||
xdg_ipdir = os.path.join(xdg, "ipython") | ||||
MinRK
|
r3347 | ipdir = path.get_ipython_dir() | ||
nt.assert_equal(ipdir, xdg_ipdir) | ||||
@with_environment | ||||
MinRK
|
r3896 | def test_get_ipython_dir_7(): | ||
Bradley M. Froehle
|
r6700 | """test_get_ipython_dir_7, test home directory expansion on IPYTHONDIR""" | ||
MinRK
|
r4475 | path._writable_dir = lambda path: True | ||
Min RK
|
r4105 | home_dir = os.path.expanduser('~') | ||
Bradley M. Froehle
|
r6700 | env['IPYTHONDIR'] = os.path.join('~', 'somewhere') | ||
MinRK
|
r3896 | ipdir = path.get_ipython_dir() | ||
nt.assert_equal(ipdir, os.path.join(home_dir, 'somewhere')) | ||||
@with_environment | ||||
MinRK
|
r3347 | def test_get_xdg_dir_1(): | ||
"""test_get_xdg_dir_1, check xdg_dir""" | ||||
reload(path) | ||||
MinRK
|
r4475 | path._writable_dir = lambda path: True | ||
MinRK
|
r3347 | path.get_home_dir = lambda : 'somewhere' | ||
os.name = "posix" | ||||
env.pop('IPYTHON_DIR', None) | ||||
env.pop('IPYTHONDIR', None) | ||||
env.pop('XDG_CONFIG_HOME', None) | ||||
Bernardo B. Marques
|
r4872 | |||
MinRK
|
r3347 | nt.assert_equal(path.get_xdg_dir(), os.path.join('somewhere', '.config')) | ||
@with_environment | ||||
def test_get_xdg_dir_1(): | ||||
"""test_get_xdg_dir_1, check nonexistant xdg_dir""" | ||||
reload(path) | ||||
path.get_home_dir = lambda : HOME_TEST_DIR | ||||
os.name = "posix" | ||||
env.pop('IPYTHON_DIR', None) | ||||
env.pop('IPYTHONDIR', None) | ||||
env.pop('XDG_CONFIG_HOME', None) | ||||
nt.assert_equal(path.get_xdg_dir(), None) | ||||
@with_environment | ||||
def test_get_xdg_dir_2(): | ||||
"""test_get_xdg_dir_2, check xdg_dir default to ~/.config""" | ||||
reload(path) | ||||
path.get_home_dir = lambda : HOME_TEST_DIR | ||||
os.name = "posix" | ||||
env.pop('IPYTHON_DIR', None) | ||||
env.pop('IPYTHONDIR', None) | ||||
env.pop('XDG_CONFIG_HOME', None) | ||||
cfgdir=os.path.join(path.get_home_dir(), '.config') | ||||
os.makedirs(cfgdir) | ||||
Bernardo B. Marques
|
r4872 | |||
MinRK
|
r3347 | nt.assert_equal(path.get_xdg_dir(), cfgdir) | ||
Fernando Perez
|
r1969 | |||
def test_filefind(): | ||||
"""Various tests for filefind""" | ||||
f = tempfile.NamedTemporaryFile() | ||||
Brian Granger
|
r2505 | # print 'fname:',f.name | ||
alt_dirs = path.get_ipython_dir() | ||||
t = path.filefind(f.name, alt_dirs) | ||||
# print 'found:',t | ||||
Fernando Perez
|
r2357 | |||
def test_get_ipython_package_dir(): | ||||
Brian Granger
|
r2505 | ipdir = path.get_ipython_package_dir() | ||
Fernando Perez
|
r2357 | nt.assert_true(os.path.isdir(ipdir)) | ||
Fernando Perez
|
r2436 | |||
Brian Granger
|
r2505 | |||
Brian Granger
|
r2498 | def test_get_ipython_module_path(): | ||
Brian Granger
|
r2760 | ipapp_path = path.get_ipython_module_path('IPython.frontend.terminal.ipapp') | ||
Brian Granger
|
r2498 | nt.assert_true(os.path.isfile(ipapp_path)) | ||
Fernando Perez
|
r2436 | |||
Brian Granger
|
r2505 | |||
Brian Granger
|
r2498 | @dec.skip_if_not_win32 | ||
def test_get_long_path_name_win32(): | ||||
Brian Granger
|
r2505 | p = path.get_long_path_name('c:\\docume~1') | ||
Bernardo B. Marques
|
r4872 | nt.assert_equals(p,u'c:\\Documents and Settings') | ||
Fernando Perez
|
r2436 | |||
Brian Granger
|
r2505 | |||
Brian Granger
|
r2498 | @dec.skip_win32 | ||
def test_get_long_path_name(): | ||||
Brian Granger
|
r2505 | p = path.get_long_path_name('/usr/local') | ||
Brian Granger
|
r2498 | nt.assert_equals(p,'/usr/local') | ||
Fernando Perez
|
r2436 | |||
MinRK
|
r4483 | @dec.skip_win32 # can't create not-user-writable dir on win | ||
MinRK
|
r4475 | @with_environment | ||
def test_not_writable_ipdir(): | ||||
tmpdir = tempfile.mkdtemp() | ||||
os.name = "posix" | ||||
env.pop('IPYTHON_DIR', None) | ||||
env.pop('IPYTHONDIR', None) | ||||
env.pop('XDG_CONFIG_HOME', None) | ||||
env['HOME'] = tmpdir | ||||
ipdir = os.path.join(tmpdir, '.ipython') | ||||
os.mkdir(ipdir) | ||||
os.chmod(ipdir, 600) | ||||
Thomas Kluyver
|
r4902 | with AssertPrints('is not a writable location', channel='stderr'): | ||
Thomas Kluyver
|
r4901 | ipdir = path.get_ipython_dir() | ||
MinRK
|
r4475 | env.pop('IPYTHON_DIR', None) | ||
Robert Kern
|
r4688 | |||
Robert Kern
|
r4696 | def test_unquote_filename(): | ||
for win32 in (True, False): | ||||
nt.assert_equals(path.unquote_filename('foo.py', win32=win32), 'foo.py') | ||||
nt.assert_equals(path.unquote_filename('foo bar.py', win32=win32), 'foo bar.py') | ||||
nt.assert_equals(path.unquote_filename('"foo.py"', win32=True), 'foo.py') | ||||
nt.assert_equals(path.unquote_filename('"foo bar.py"', win32=True), 'foo bar.py') | ||||
nt.assert_equals(path.unquote_filename("'foo.py'", win32=True), 'foo.py') | ||||
nt.assert_equals(path.unquote_filename("'foo bar.py'", win32=True), 'foo bar.py') | ||||
nt.assert_equals(path.unquote_filename('"foo.py"', win32=False), '"foo.py"') | ||||
nt.assert_equals(path.unquote_filename('"foo bar.py"', win32=False), '"foo bar.py"') | ||||
nt.assert_equals(path.unquote_filename("'foo.py'", win32=False), "'foo.py'") | ||||
nt.assert_equals(path.unquote_filename("'foo bar.py'", win32=False), "'foo bar.py'") | ||||
Robert Kern
|
r4688 | @with_environment | ||
def test_get_py_filename(): | ||||
os.chdir(TMP_TEST_DIR) | ||||
for win32 in (True, False): | ||||
with make_tempfile('foo.py'): | ||||
Robert Kern
|
r4696 | nt.assert_equals(path.get_py_filename('foo.py', force_win32=win32), 'foo.py') | ||
nt.assert_equals(path.get_py_filename('foo', force_win32=win32), 'foo.py') | ||||
Robert Kern
|
r4688 | with make_tempfile('foo'): | ||
Robert Kern
|
r4696 | nt.assert_equals(path.get_py_filename('foo', force_win32=win32), 'foo') | ||
nt.assert_raises(IOError, path.get_py_filename, 'foo.py', force_win32=win32) | ||||
nt.assert_raises(IOError, path.get_py_filename, 'foo', force_win32=win32) | ||||
nt.assert_raises(IOError, path.get_py_filename, 'foo.py', force_win32=win32) | ||||
Robert Kern
|
r4688 | true_fn = 'foo with spaces.py' | ||
with make_tempfile(true_fn): | ||||
Robert Kern
|
r4696 | nt.assert_equals(path.get_py_filename('foo with spaces', force_win32=win32), true_fn) | ||
nt.assert_equals(path.get_py_filename('foo with spaces.py', force_win32=win32), true_fn) | ||||
Robert Kern
|
r4688 | if win32: | ||
Robert Kern
|
r4696 | nt.assert_equals(path.get_py_filename('"foo with spaces.py"', force_win32=True), true_fn) | ||
nt.assert_equals(path.get_py_filename("'foo with spaces.py'", force_win32=True), true_fn) | ||||
Robert Kern
|
r4688 | else: | ||
Robert Kern
|
r4696 | nt.assert_raises(IOError, path.get_py_filename, '"foo with spaces.py"', force_win32=False) | ||
nt.assert_raises(IOError, path.get_py_filename, "'foo with spaces.py'", force_win32=False) | ||||
r6152 | ||||
def test_unicode_in_filename(): | ||||
Thomas Kluyver
|
r6164 | """When a file doesn't exist, the exception raised should be safe to call | ||
str() on - i.e. in Python 2 it must only have ASCII characters. | ||||
https://github.com/ipython/ipython/issues/875 | ||||
""" | ||||
r6152 | try: | |||
# these calls should not throw unicode encode exceptions | ||||
path.get_py_filename(u'fooéè.py', force_win32=False) | ||||
except IOError as ex: | ||||
str(ex) | ||||