test_application.py
97 lines
| 2.8 KiB
| text/x-python
|
PythonLexer
Thomas Kluyver
|
r3453 | # coding: utf-8 | ||
Thomas Kluyver
|
r3451 | """Tests for IPython.core.application""" | ||
import os | ||||
import tempfile | ||||
Volker Braun
|
r13522 | import shutil | ||
import nose.tools as nt | ||||
Thomas Kluyver
|
r3451 | |||
MinRK
|
r4023 | from IPython.core.application import BaseIPythonApplication | ||
Thomas Spura
|
r5810 | from IPython.testing import decorators as dec | ||
Volker Braun
|
r13522 | from IPython.testing.tools import make_tempfile, ipexec | ||
Thomas Kluyver
|
r4731 | from IPython.utils import py3compat | ||
Thomas Kluyver
|
r3451 | |||
Thomas Spura
|
r5810 | @dec.onlyif_unicode_paths | ||
Thomas Kluyver
|
r3451 | def test_unicode_cwd(): | ||
Thomas Kluyver
|
r3452 | """Check that IPython starts with non-ascii characters in the path.""" | ||
Thomas Kluyver
|
r3453 | wd = tempfile.mkdtemp(suffix=u"€") | ||
Thomas Kluyver
|
r3451 | |||
Thomas Kluyver
|
r13447 | old_wd = py3compat.getcwd() | ||
Thomas Kluyver
|
r3451 | os.chdir(wd) | ||
Thomas Kluyver
|
r13447 | #raise Exception(repr(py3compat.getcwd())) | ||
Thomas Kluyver
|
r3451 | try: | ||
MinRK
|
r4023 | app = BaseIPythonApplication() | ||
Thomas Kluyver
|
r3451 | # The lines below are copied from Application.initialize() | ||
MinRK
|
r4023 | app.init_profile_dir() | ||
app.init_config_files() | ||||
app.load_config_file(suppress_errors=False) | ||||
Thomas Kluyver
|
r3451 | finally: | ||
os.chdir(old_wd) | ||||
Thomas Kluyver
|
r3903 | |||
Thomas Spura
|
r5810 | @dec.onlyif_unicode_paths | ||
Thomas Kluyver
|
r3452 | def test_unicode_ipdir(): | ||
"""Check that IPython starts with non-ascii characters in the IP dir.""" | ||||
Thomas Kluyver
|
r3453 | ipdir = tempfile.mkdtemp(suffix=u"€") | ||
Thomas Kluyver
|
r3452 | |||
# Create the config file, so it tries to load it. | ||||
with open(os.path.join(ipdir, 'ipython_config.py'), "w") as f: | ||||
pass | ||||
old_ipdir1 = os.environ.pop("IPYTHONDIR", None) | ||||
old_ipdir2 = os.environ.pop("IPYTHON_DIR", None) | ||||
Thomas Kluyver
|
r4731 | os.environ["IPYTHONDIR"] = py3compat.unicode_to_str(ipdir, "utf-8") | ||
Thomas Kluyver
|
r3452 | try: | ||
MinRK
|
r4023 | app = BaseIPythonApplication() | ||
Thomas Kluyver
|
r3452 | # The lines below are copied from Application.initialize() | ||
MinRK
|
r4023 | app.init_profile_dir() | ||
app.init_config_files() | ||||
app.load_config_file(suppress_errors=False) | ||||
Thomas Kluyver
|
r3452 | finally: | ||
if old_ipdir1: | ||||
os.environ["IPYTHONDIR"] = old_ipdir1 | ||||
if old_ipdir2: | ||||
os.environ["IPYTHONDIR"] = old_ipdir2 | ||||
Volker Braun
|
r13522 | |||
TEST_SYNTAX_ERROR_CMDS = """ | ||||
from IPython.core.inputtransformer import InputTransformer | ||||
%cpaste | ||||
class SyntaxErrorTransformer(InputTransformer): | ||||
def push(self, line): | ||||
if 'syntaxerror' in line: | ||||
raise SyntaxError('in input '+line) | ||||
return line | ||||
def reset(self): | ||||
pass | ||||
-- | ||||
ip = get_ipython() | ||||
transformer = SyntaxErrorTransformer() | ||||
ip.input_splitter.python_line_transforms.append(transformer) | ||||
ip.input_transformer_manager.python_line_transforms.append(transformer) | ||||
# now the actual commands | ||||
1234 | ||||
2345 # syntaxerror <- triggered here | ||||
3456 | ||||
""" | ||||
def test_syntax_error(): | ||||
"""Check that IPython does not abort if a SyntaxError is raised in an InputTransformer""" | ||||
try: | ||||
tmp = tempfile.mkdtemp() | ||||
filename = os.path.join(tmp, 'test_syntax_error.py') | ||||
with open(filename, 'w') as f: | ||||
f.write(TEST_SYNTAX_ERROR_CMDS) | ||||
out, err = ipexec(filename, pipe=True) | ||||
nt.assert_equal(err, '') | ||||
nt.assert_in('1234', out) | ||||
nt.assert_in('SyntaxError: in input 2345 # syntaxerror <- triggered here', out) | ||||
nt.assert_in('3456', out) | ||||
finally: | ||||
shutil.rmtree(tmp) | ||||