|
|
# -*- coding: utf-8 -*-
|
|
|
"""Tests for shellapp module.
|
|
|
|
|
|
Authors
|
|
|
-------
|
|
|
* Bradley Froehle
|
|
|
"""
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Copyright (C) 2012 The IPython Development Team
|
|
|
#
|
|
|
# Distributed under the terms of the BSD License. The full license is in
|
|
|
# the file COPYING, distributed as part of this software.
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Imports
|
|
|
#-----------------------------------------------------------------------------
|
|
|
import unittest
|
|
|
|
|
|
from IPython.testing import decorators as dec
|
|
|
from IPython.testing import tools as tt
|
|
|
from IPython.utils.py3compat import PY3
|
|
|
|
|
|
sqlite_err_maybe = dec.module_not_available('sqlite3')
|
|
|
SQLITE_NOT_AVAILABLE_ERROR = ('WARNING: IPython History requires SQLite,'
|
|
|
' your history will not be saved\n')
|
|
|
|
|
|
class TestFileToRun(unittest.TestCase, tt.TempFileMixin):
|
|
|
"""Test the behavior of the file_to_run parameter."""
|
|
|
|
|
|
def test_py_script_file_attribute(self):
|
|
|
"""Test that `__file__` is set when running `ipython file.py`"""
|
|
|
src = "print(__file__)\n"
|
|
|
self.mktmp(src)
|
|
|
|
|
|
err = SQLITE_NOT_AVAILABLE_ERROR if sqlite_err_maybe else None
|
|
|
tt.ipexec_validate(self.fname, self.fname, err)
|
|
|
|
|
|
def test_ipy_script_file_attribute(self):
|
|
|
"""Test that `__file__` is set when running `ipython file.ipy`"""
|
|
|
src = "print(__file__)\n"
|
|
|
self.mktmp(src, ext='.ipy')
|
|
|
|
|
|
err = SQLITE_NOT_AVAILABLE_ERROR if sqlite_err_maybe else None
|
|
|
tt.ipexec_validate(self.fname, self.fname, err)
|
|
|
|
|
|
# The commands option to ipexec_validate doesn't work on Windows, and it
|
|
|
# doesn't seem worth fixing
|
|
|
@dec.skip_win32
|
|
|
def test_py_script_file_attribute_interactively(self):
|
|
|
"""Test that `__file__` is not set after `ipython -i file.py`"""
|
|
|
src = "True\n"
|
|
|
self.mktmp(src)
|
|
|
|
|
|
out = 'In [1]: False\n\nIn [2]:'
|
|
|
err = SQLITE_NOT_AVAILABLE_ERROR if sqlite_err_maybe else None
|
|
|
tt.ipexec_validate(self.fname, out, err, options=['-i'],
|
|
|
commands=['"__file__" in globals()', 'exit()'])
|
|
|
|
|
|
@dec.skip_win32
|
|
|
@dec.skipif(PY3)
|
|
|
def test_py_script_file_compiler_directive(self):
|
|
|
"""Test `__future__` compiler directives with `ipython -i file.py`"""
|
|
|
src = "from __future__ import division\n"
|
|
|
self.mktmp(src)
|
|
|
|
|
|
out = 'In [1]: float\n\nIn [2]:'
|
|
|
err = SQLITE_NOT_AVAILABLE_ERROR if sqlite_err_maybe else None
|
|
|
tt.ipexec_validate(self.fname, out, err, options=['-i'],
|
|
|
commands=['type(1/2)', 'exit()'])
|
|
|
|