def setup(self): ipydir = TemporaryDirectory() self.dirs.append(ipydir) self.env['IPYTHONDIR'] = ipydir.name self.workingdir = workingdir = TemporaryDirectory() self.dirs.append(workingdir) self.env['IPTEST_WORKING_DIR'] = workingdir.name # This means we won't get odd effects from our own matplotlib config self.env['MPLCONFIGDIR'] = workingdir.name # For security reasons (http://bugs.python.org/issue16202), use # a temporary directory to which other users have no access. self.env['TMPDIR'] = workingdir.name # Add a non-accessible directory to PATH (see gh-7053) noaccess = os.path.join(self.workingdir.name, "_no_access_") self.noaccess = noaccess os.mkdir(noaccess, 0) PATH = os.environ.get('PATH', '') if PATH: PATH = noaccess + os.pathsep + PATH else: PATH = noaccess self.env['PATH'] = PATH # From options: if self.options.xunit: self.add_xunit() if self.options.coverage: self.add_coverage() self.env['IPTEST_SUBPROC_STREAMS'] = self.options.subproc_streams self.cmd.extend(self.options.extra_args)
def setUp(self): self.package = package = 'tmp{0}'.format(''.join( [random.choice(string.ascii_letters) for i in range(10)])) """Temporary (probably) valid python package name.""" self.value = int(random.random() * 10000) self.tempdir = TemporaryDirectory() self.__orig_cwd = os.getcwd() sys.path.insert(0, self.tempdir.name) self.writefile(os.path.join(package, '__init__.py'), '') self.writefile(os.path.join(package, 'sub.py'), """ x = {0!r} """.format(self.value)) self.writefile(os.path.join(package, 'relative.py'), """ from .sub import x """) self.writefile( os.path.join(package, 'absolute.py'), """ from {0}.sub import x """.format(package)) self.writefile( os.path.join(package, 'args.py'), """ import sys a = " ".join(sys.argv[1:]) """.format(package))
def test_changing_py_file(self): """Traceback produced if the line where the error occurred is missing? https://github.com/ipython/ipython/issues/1456 """ with TemporaryDirectory() as td: fname = os.path.join(td, "foo.py") with open(fname, "w") as f: f.write(file_1) with prepended_to_syspath(td): ip.run_cell("import foo") with tt.AssertPrints("ZeroDivisionError"): ip.run_cell("foo.f()") # Make the file shorter, so the line of the error is missing. with open(fname, "w") as f: f.write(file_2) # For some reason, this was failing on the *second* call after # changing the file, so we call f() twice. with tt.AssertNotPrints("Internal Python error", channel='stderr'): with tt.AssertPrints("ZeroDivisionError"): ip.run_cell("foo.f()") with tt.AssertPrints("ZeroDivisionError"): ip.run_cell("foo.f()")
def test_histmanager_disabled(): """Ensure that disabling the history manager doesn't create a database.""" cfg = Config() cfg.HistoryAccessor.enabled = False ip = get_ipython() with TemporaryDirectory() as tmpdir: hist_manager_ori = ip.history_manager hist_file = os.path.join(tmpdir, 'history.sqlite') cfg.HistoryManager.hist_file = hist_file try: ip.history_manager = HistoryManager(shell=ip, config=cfg) hist = [ u'a=1', u'def f():\n test = 1\n return test', u"b='€Æ¾÷ß'" ] for i, h in enumerate(hist, start=1): ip.history_manager.store_inputs(i, h) nt.assert_equal(ip.history_manager.input_hist_raw, [''] + hist) ip.history_manager.reset() ip.history_manager.end_session() finally: ip.history_manager = hist_manager_ori # hist_file should not be created nt.assert_false(os.path.exists(hist_file))
def test_logstart_unicode(): with TemporaryDirectory() as tdir: logfname = os.path.join(tdir, "test_unicode.log") _ip.run_cell("'abc€'") try: _ip.magic("logstart -to %s" % logfname) _ip.run_cell("'abc€'") finally: _ip.logger.logstop()
def test_notebook_export_json(): _ip = get_ipython() _ip.history_manager.reset() # Clear any existing history. cmds = [u"a=1", u"def b():\n return a**2", u"print('noël, été', b())"] for i, cmd in enumerate(cmds, start=1): _ip.history_manager.store_inputs(i, cmd) with TemporaryDirectory() as td: outfile = os.path.join(td, "nb.ipynb") _ip.magic("notebook -e %s" % outfile)
def test_hist_pof(): ip = get_ipython() ip.run_cell(u"1+2", store_history=True) #raise Exception(ip.history_manager.session_number) #raise Exception(list(ip.history_manager._get_range_session())) with TemporaryDirectory() as td: tf = os.path.join(td, 'hist.py') ip.run_line_magic('history', '-pof %s' % tf) assert os.path.isfile(tf)
def test_logging_magic_not_quiet(): _ip.config.LoggingMagics.quiet = False lm = logging.LoggingMagics(shell=_ip) with TemporaryDirectory() as td: try: with tt.AssertPrints(re.compile("Activating.*")): lm.logstart(os.path.join(td, "not_quiet.log")) finally: _ip.logger.logstop()
def test_ensure_dir_exists(): with TemporaryDirectory() as td: d = os.path.join(td, '∂ir') path.ensure_dir_exists(d) # create it assert os.path.isdir(d) path.ensure_dir_exists(d) # no-op f = os.path.join(td, 'ƒile') open(f, 'w').close() # touch with nt.assert_raises(IOError): path.ensure_dir_exists(f)
def test_get_ipython_dir_3(): """test_get_ipython_dir_3, move XDG if defined, and .ipython doesn't exist.""" tmphome = TemporaryDirectory() try: with patch_get_home_dir(tmphome.name), \ patch('os.name', 'posix'), \ modified_env({ 'IPYTHON_DIR': None, 'IPYTHONDIR': None, 'XDG_CONFIG_HOME': XDG_TEST_DIR, }), warnings.catch_warnings(record=True) as w: ipdir = paths.get_ipython_dir() nt.assert_equal(ipdir, os.path.join(tmphome.name, ".ipython")) if sys.platform != 'darwin': nt.assert_equal(len(w), 1) nt.assert_in('Moving', str(w[0])) finally: tmphome.cleanup()
def test_profile_create_ipython_dir(): """ipython profile create respects --ipython-dir""" with TemporaryDirectory() as td: getoutput([ sys.executable, '-m', 'yap_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)
def setUpClass(cls): cls.filenames_start_with_a = ['a0', 'a1', 'a2'] cls.filenames_end_with_b = ['0b', '1b', '2b'] cls.filenames = cls.filenames_start_with_a + cls.filenames_end_with_b cls.tempdir = TemporaryDirectory() td = cls.tempdir.name with cls.in_tempdir(): # Create empty files for fname in cls.filenames: open(os.path.join(td, fname), 'w').close()
def test_nonascii_path(self): # Non-ascii directory name as well. with TemporaryDirectory(suffix=u'é') as td: fname = os.path.join(td, u"fooé.py") with open(fname, "w") as f: f.write(file_1) with prepended_to_syspath(td): ip.run_cell("import foo") with tt.AssertPrints("ZeroDivisionError"): ip.run_cell("foo.f()")
def test_get_long_path_name_win32(): with TemporaryDirectory() as tmpdir: # Make a long path. Expands the path of tmpdir prematurely as it may already have a long # path component, so ensure we include the long form of it long_path = os.path.join(path.get_long_path_name(tmpdir), 'this is my long path name') os.makedirs(long_path) # Test to see if the short path evaluates correctly. short_path = os.path.join(tmpdir, 'THISIS~1') evaluated_path = path.get_long_path_name(short_path) nt.assert_equal(evaluated_path.lower(), long_path.lower())
def test_iso8859_5(self): with TemporaryDirectory() as td: fname = os.path.join(td, 'dfghjkl.py') with io.open(fname, 'w', encoding='iso-8859-5') as f: f.write(iso_8859_5_file) with prepended_to_syspath(td): ip.run_cell("from dfghjkl import fail") with tt.AssertPrints("ZeroDivisionError"): with tt.AssertPrints(u'дбИЖ', suppress=False): ip.run_cell('fail()')
def test_file(): """Basic %%file""" ip = get_ipython() with TemporaryDirectory() as td: fname = os.path.join(td, 'file1') ip.run_cell_magic("file", fname, u'\n'.join([ 'line1', 'line2', ])) with open(fname) as f: s = f.read() nt.assert_in('line1\n', s) nt.assert_in('line2', s)
def test_file_unicode(): """%%file with unicode cell""" ip = get_ipython() with TemporaryDirectory() as td: fname = os.path.join(td, 'file1') ip.run_cell_magic("file", fname, u'\n'.join([ u'liné1', u'liné2', ])) with io.open(fname, encoding='utf-8') as f: s = f.read() nt.assert_in(u'liné1\n', s) nt.assert_in(u'liné2', s)
def test_file_var_expand(): """%%file $filename""" ip = get_ipython() with TemporaryDirectory() as td: fname = os.path.join(td, 'file1') ip.user_ns['filename'] = fname ip.run_cell_magic("file", '$filename', u'\n'.join([ 'line1', 'line2', ])) with open(fname) as f: s = f.read() nt.assert_in('line1\n', s) nt.assert_in('line2', s)
def test_extension_builtins(): em = get_ipython().extension_manager with TemporaryDirectory() as td: ext3 = os.path.join(td, 'ext3.py') with open(ext3, 'w') as f: f.write(ext3_content) assert 'ext3' not in em.loaded with prepended_to_syspath(td): # Load extension with tt.AssertPrints("True"): assert em.load_extension('ext3') is None assert 'ext3' in em.loaded
def test_indentationerror_shows_line(self): # See issue gh-2398 with tt.AssertPrints("IndentationError"): with tt.AssertPrints("zoon()", suppress=False): ip.run_cell(indentationerror_file) with TemporaryDirectory() as td: fname = os.path.join(td, "foo.py") with open(fname, "w") as f: f.write(indentationerror_file) with tt.AssertPrints("IndentationError"): with tt.AssertPrints("zoon()", suppress=False): ip.magic('run %s' % fname)
def test_import_invalid_module(): """Testing of issue https://github.com/ipython/ipython/issues/1107""" invalid_module_names = {'foo-bar', 'foo:bar', '10foo'} valid_module_names = {'foobar'} with TemporaryDirectory() as tmpdir: sys.path.insert( 0, tmpdir ) for name in invalid_module_names | valid_module_names: filename = os.path.join(tmpdir, name + '.py') open(filename, 'w').close() s = set( module_completion('import foo') ) intersection = s.intersection(invalid_module_names) nt.assert_equal(intersection, set()) assert valid_module_names.issubset(s), valid_module_names.intersection(s)
def test_extension_loading(): em = get_ipython().extension_manager with TemporaryDirectory() as td: ext1 = os.path.join(td, 'ext1.py') with open(ext1, 'w') as f: f.write(ext1_content) ext2 = os.path.join(td, 'ext2.py') with open(ext2, 'w') as f: f.write(ext2_content) with prepended_to_syspath(td): assert 'ext1' not in em.loaded assert 'ext2' not in em.loaded # Load extension with tt.AssertPrints("Running ext1 load"): assert em.load_extension('ext1') is None assert 'ext1' in em.loaded # Should refuse to load it again with tt.AssertNotPrints("Running ext1 load"): assert em.load_extension('ext1') == 'already loaded' # Reload with tt.AssertPrints("Running ext1 unload"): with tt.AssertPrints("Running ext1 load", suppress=False): em.reload_extension('ext1') # Unload with tt.AssertPrints("Running ext1 unload"): assert em.unload_extension('ext1') is None # Can't unload again with tt.AssertNotPrints("Running ext1 unload"): assert em.unload_extension('ext1') == 'not loaded' assert em.unload_extension('ext2') == 'not loaded' # Load extension 2 with tt.AssertPrints("Running ext2 load"): assert em.load_extension('ext2') is None # Can't unload this assert em.unload_extension('ext2') == 'no unload function' # But can reload it with tt.AssertPrints("Running ext2 load"): em.reload_extension('ext2')
def test_script_tb(): """Test traceback offset in `ipython script.py`""" with TemporaryDirectory() as td: path = pjoin(td, 'foo.py') with open(path, 'w') as f: f.write('\n'.join([ "def foo():", " return bar()", "def bar():", " raise RuntimeError('hello!')", "foo()", ])) out, err = tt.ipexec(path) nt.assert_not_in("execfile", out) nt.assert_in("RuntimeError", out) nt.assert_equal(out.count("---->"), 3)
def test_changing_py_file(self): with TemporaryDirectory() as td: fname = os.path.join(td, "foo.py") with open(fname, 'w') as f: f.write(se_file_1) with tt.AssertPrints(["7/", "SyntaxError"]): ip.magic("run " + fname) # Modify the file with open(fname, 'w') as f: f.write(se_file_2) # The SyntaxError should point to the correct line with tt.AssertPrints(["7/", "SyntaxError"]): ip.magic("run " + fname)
def test_cli_priority(): with TemporaryDirectory() as td: class TestApp(BaseYAPApplication): test = Unicode().tag(config=True) # Create the config file, so it tries to load it. with open(os.path.join(td, 'ipython_config.py'), "w") as f: f.write("c.TestApp.test = 'config file'") app = TestApp() app.initialize(['--profile-dir', td]) nt.assert_equal(app.test, 'config file') app = TestApp() app.initialize(['--profile-dir', td, '--TestApp.test=cli']) nt.assert_equal(app.test, 'cli')
def test_file_amend(): """%%file -a amends files""" ip = get_ipython() with TemporaryDirectory() as td: fname = os.path.join(td, 'file2') ip.run_cell_magic("file", fname, u'\n'.join([ 'line1', 'line2', ])) ip.run_cell_magic("file", "-a %s" % fname, u'\n'.join([ 'line3', 'line4', ])) with open(fname) as f: s = f.read() nt.assert_in('line1\n', s) nt.assert_in('line3\n', s)
def test_run_tb(): """Test traceback offset in %run""" with TemporaryDirectory() as td: path = pjoin(td, 'foo.py') with open(path, 'w') as f: f.write('\n'.join([ "def foo():", " return bar()", "def bar():", " raise RuntimeError('hello!')", "foo()", ])) with capture_output() as io: _ip.magic('run {}'.format(path)) out = io.stdout nt.assert_not_in("execfile", out) nt.assert_in("RuntimeError", out) nt.assert_equal(out.count("---->"), 3)
def test_run__name__(): with TemporaryDirectory() as td: path = pjoin(td, 'foo.py') with open(path, 'w') as f: f.write("q = __name__") _ip.user_ns.pop('q', None) _ip.magic('run {}'.format(path)) nt.assert_equal(_ip.user_ns.pop('q'), '__main__') _ip.magic('run -n {}'.format(path)) nt.assert_equal(_ip.user_ns.pop('q'), 'foo') try: _ip.magic('run -i -n {}'.format(path)) nt.assert_equal(_ip.user_ns.pop('q'), 'foo') finally: _ip.magic('reset -f')
def test_abspath_file_completions(): ip = get_ipython() with TemporaryDirectory() as tmpdir: prefix = os.path.join(tmpdir, 'foo') suffixes = ['1', '2'] names = [prefix + s for s in suffixes] for n in names: open(n, 'w').close() # Check simple completion c = ip.complete(prefix)[1] nt.assert_equal(c, names) # Now check with a function call cmd = 'a = f("%s' % prefix c = ip.complete(prefix, cmd)[1] comp = [prefix + s for s in suffixes] nt.assert_equal(c, comp)
def test_save(): """Test %save.""" ip = get_ipython() ip.history_manager.reset() # Clear any existing history. cmds = [u"a=1", u"def b():\n return a**2", u"print(a, b())"] for i, cmd in enumerate(cmds, start=1): ip.history_manager.store_inputs(i, cmd) with TemporaryDirectory() as tmpdir: file = os.path.join(tmpdir, "testsave.py") ip.run_line_magic("save", "%s 1-10" % file) with open(file) as f: content = f.read() nt.assert_equal(content.count(cmds[0]), 1) nt.assert_in('coding: utf-8', content) ip.run_line_magic("save", "-a %s 1-10" % file) with open(file) as f: content = f.read() nt.assert_equal(content.count(cmds[0]), 2) nt.assert_in('coding: utf-8', content)