##// END OF EJS Templates
skip test if ipykernel not there....
skip test if ipykernel not there. This is in particular useful for publishing on conda-forge when bumping Python version, as ipykernel and ipython have circular dependencies when running the full test suite.

File last commit:

r25082:17589e2e
r26071:11dc92bc
Show More
test_profile.py
161 lines | 5.2 KiB | text/x-python | PythonLexer
Fernando Perez
Add improved test with unicode checks, by Min.
r6206 # coding: utf-8
MinRK
add test_profile with startup tests...
r5250 """Tests for profile-related functions.
Currently only the startup-dir functionality is tested, but more tests should
be added for:
* ipython profile create
* ipython profile list
* ipython profile create --parallel
* security dir permissions
Authors
-------
* MinRK
"""
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import os
import shutil
import sys
import tempfile
Fernando Perez
Refactor tests to fix leftover profiles that would collide with other tests.
r6203 from unittest import TestCase
MinRK
add test_profile with startup tests...
r5250 import nose.tools as nt
Fernando Perez
Refactor tests to fix leftover profiles that would collide with other tests.
r6203 from IPython.core.profileapp import list_profiles_in, list_bundled_profiles
MinRK
add test_profile with startup tests...
r5250 from IPython.core.profiledir import ProfileDir
from IPython.testing import decorators as dec
from IPython.testing import tools as tt
MinRK
`ipython profile create` respects `--ipython-dir`...
r14898 from IPython.utils.process import getoutput
from IPython.utils.tempdir import TemporaryDirectory
MinRK
add test_profile with startup tests...
r5250
#-----------------------------------------------------------------------------
# Globals
#-----------------------------------------------------------------------------
TMP_TEST_DIR = tempfile.mkdtemp()
HOME_TEST_DIR = os.path.join(TMP_TEST_DIR, "home_test_dir")
IP_TEST_DIR = os.path.join(HOME_TEST_DIR,'.ipython')
#
# Setup/teardown functions/decorators
#
Matthias Bussonnier
Use module level setup and teardown compatible both nose and pytest....
r25082 def setup_module():
MinRK
add test_profile with startup tests...
r5250 """Setup test environment for the module:
- Adds dummy home dir tree
"""
# 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)
Matthias Bussonnier
Use module level setup and teardown compatible both nose and pytest....
r25082 def teardown_module():
MinRK
add test_profile with startup tests...
r5250 """Teardown test environment for the module:
- Remove dummy home dir tree
"""
# 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)
#-----------------------------------------------------------------------------
# Test functions
#-----------------------------------------------------------------------------
MinRK
minor test fixes for win32
r5297 def win32_without_pywin32():
if sys.platform == 'win32':
try:
import pywin32
except ImportError:
return True
return False
MinRK
add test_profile with startup tests...
r5250
Fernando Perez
Add test for list_profiles_in
r6204 class ProfileStartupTest(TestCase):
Fernando Perez
Refactor tests to fix leftover profiles that would collide with other tests.
r6203 def setUp(self):
# create profile dir
self.pd = ProfileDir.create_profile_dir_by_name(IP_TEST_DIR, 'test')
self.options = ['--ipython-dir', IP_TEST_DIR, '--profile', 'test']
self.fname = os.path.join(TMP_TEST_DIR, 'test.py')
def tearDown(self):
Fernando Perez
Add test for list_profiles_in
r6204 # We must remove this profile right away so its presence doesn't
# confuse other tests.
Fernando Perez
Refactor tests to fix leftover profiles that would collide with other tests.
r6203 shutil.rmtree(self.pd.location)
def init(self, startup_file, startup, test):
# write startup python file
with open(os.path.join(self.pd.startup_dir, startup_file), 'w') as f:
f.write(startup)
# write simple test file, to check that the startup file was run
with open(self.fname, 'w') as f:
Matthias Bussonnier
remove some py3compat usage
r24265 f.write(test)
Fernando Perez
Refactor tests to fix leftover profiles that would collide with other tests.
r6203
def validate(self, output):
tt.ipexec_validate(self.fname, output, '', options=self.options)
@dec.skipif(win32_without_pywin32(), "Test requires pywin32 on Windows")
def test_startup_py(self):
Matthias Bussonnier
remove some py3compat usage
r24265 self.init('00-start.py', 'zzz=123\n', 'print(zzz)\n')
Fernando Perez
Refactor tests to fix leftover profiles that would collide with other tests.
r6203 self.validate('123')
@dec.skipif(win32_without_pywin32(), "Test requires pywin32 on Windows")
def test_startup_ipy(self):
Susan Tan
Fixed #4580 -- Deprecated %profile.
r13988 self.init('00-start.ipy', '%xmode plain\n', '')
self.validate('Exception reporting mode: Plain')
Fernando Perez
Add test for list_profiles_in
r6204
def test_list_profiles_in():
# No need to remove these directories and files, as they will get nuked in
# the module-level teardown.
Fernando Perez
Add improved test with unicode checks, by Min.
r6206 td = tempfile.mkdtemp(dir=TMP_TEST_DIR)
Thomas Kluyver
Skip some more tests that require unicode paths
r12168 for name in ('profile_foo', 'profile_hello', 'not_a_profile'):
Fernando Perez
Add improved test with unicode checks, by Min.
r6206 os.mkdir(os.path.join(td, name))
Thomas Kluyver
Skip some more tests that require unicode paths
r12168 if dec.unicode_paths:
os.mkdir(os.path.join(td, u'profile_ünicode'))
Fernando Perez
Add improved test with unicode checks, by Min.
r6206 with open(os.path.join(td, 'profile_file'), 'w') as f:
f.write("I am not a profile directory")
profiles = list_profiles_in(td)
Fernando Perez
Add test for list_profiles_in
r6204
Fernando Perez
Add improved test with unicode checks, by Min.
r6206 # unicode normalization can turn u'ünicode' into u'u\0308nicode',
# so only check for *nicode, and that creating a ProfileDir from the
# name remains valid
found_unicode = False
for p in list(profiles):
if p.endswith('nicode'):
pd = ProfileDir.find_profile_dir_by_name(td, p)
profiles.remove(p)
found_unicode = True
break
Thomas Kluyver
Skip some more tests that require unicode paths
r12168 if dec.unicode_paths:
nt.assert_true(found_unicode)
Rémy Léone
Set litteral
r21804 nt.assert_equal(set(profiles), {'foo', 'hello'})
Fernando Perez
Add improved test with unicode checks, by Min.
r6206
Fernando Perez
Add test for list_profiles_in
r6204
Fernando Perez
Add test for list_bundled_profiles
r6205 def test_list_bundled_profiles():
# This variable will need to be updated when a new profile gets bundled
bundled = sorted(list_bundled_profiles())
Min RK
remove bundled profiles...
r20870 nt.assert_equal(bundled, [])
MinRK
`ipython profile create` respects `--ipython-dir`...
r14898
def test_profile_create_ipython_dir():
"""ipython profile create respects --ipython-dir"""
with TemporaryDirectory() as td:
getoutput([sys.executable, '-m', 'IPython', 'profile', 'create',
'foo', '--ipython-dir=%s' % td])
profile_dir = os.path.join(td, 'profile_foo')
assert os.path.exists(profile_dir)
ipython_config = os.path.join(profile_dir, 'ipython_config.py')
assert os.path.exists(ipython_config)
Srinivas Reddy Thatiparthy
Convert str_to_unicode to str function call.
r23038