test_profile.py
113 lines
| 3.4 KiB
| text/x-python
|
PythonLexer
MinRK
|
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 | ||||
""" | ||||
from __future__ import absolute_import | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
import os | ||||
import shutil | ||||
import sys | ||||
import tempfile | ||||
import nose.tools as nt | ||||
from nose import SkipTest | ||||
from IPython.core.profiledir import ProfileDir | ||||
from IPython.testing import decorators as dec | ||||
from IPython.testing import tools as tt | ||||
from IPython.utils import py3compat | ||||
#----------------------------------------------------------------------------- | ||||
# 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 | ||||
# | ||||
def setup(): | ||||
"""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) | ||||
def teardown(): | ||||
"""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
|
r5297 | def win32_without_pywin32(): | ||
if sys.platform == 'win32': | ||||
try: | ||||
import pywin32 | ||||
except ImportError: | ||||
return True | ||||
return False | ||||
MinRK
|
r5250 | |||
MinRK
|
r5297 | @dec.skipif(win32_without_pywin32(), "Test requires pywin32 on Windows") | ||
MinRK
|
r5250 | def test_startup_py(): | ||
# create profile dir | ||||
pd = ProfileDir.create_profile_dir_by_name(IP_TEST_DIR, 'test') | ||||
# write startup python file | ||||
with open(os.path.join(pd.startup_dir, '00-start.py'), 'w') as f: | ||||
f.write('zzz=123\n') | ||||
# write simple test file, to check that the startup file was run | ||||
fname = os.path.join(TMP_TEST_DIR, 'test.py') | ||||
with open(fname, 'w') as f: | ||||
Thomas Kluyver
|
r5260 | f.write(py3compat.doctest_refactor_print('print zzz\n')) | ||
MinRK
|
r5250 | # validate output | ||
tt.ipexec_validate(fname, '123', '', | ||||
options=['--ipython-dir', IP_TEST_DIR, '--profile', 'test']) | ||||
MinRK
|
r5297 | @dec.skipif(win32_without_pywin32(), "Test requires pywin32 on Windows") | ||
MinRK
|
r5250 | def test_startup_ipy(): | ||
# create profile dir | ||||
pd = ProfileDir.create_profile_dir_by_name(IP_TEST_DIR, 'test') | ||||
# write startup ipython file | ||||
with open(os.path.join(pd.startup_dir, '00-start.ipy'), 'w') as f: | ||||
f.write('%profile\n') | ||||
# write empty script, because we don't need anything to happen | ||||
# after the startup file is run | ||||
fname = os.path.join(TMP_TEST_DIR, 'test.py') | ||||
with open(fname, 'w') as f: | ||||
f.write('') | ||||
# validate output | ||||
tt.ipexec_validate(fname, 'test', '', | ||||
options=['--ipython-dir', IP_TEST_DIR, '--profile', 'test']) | ||||
Thomas Kluyver
|
r5260 | |||