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()
class TestMagicRunWithPackage(unittest.TestCase): def writefile(self, name, content): path = os.path.join(self.tempdir.name, name) d = os.path.dirname(path) if not os.path.isdir(d): os.makedirs(d) with open(path, 'w') as f: f.write(textwrap.dedent(content)) 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 tearDown(self): os.chdir(self.__orig_cwd) sys.path[:] = [p for p in sys.path if p != self.tempdir.name] self.tempdir.cleanup() def check_run_submodule(self, submodule, opts=''): _ip.user_ns.pop('x', None) _ip.magic('run {2} -m {0}.{1}'.format(self.package, submodule, opts)) self.assertEqual( _ip.user_ns['x'], self.value, 'Variable `x` is not loaded from module `{0}`.'.format(submodule)) def test_run_submodule_with_absolute_import(self): self.check_run_submodule('absolute') def test_run_submodule_with_relative_import(self): """Run submodule that has a relative import statement (#2727).""" self.check_run_submodule('relative') def test_prun_submodule_with_absolute_import(self): self.check_run_submodule('absolute', '-p') def test_prun_submodule_with_relative_import(self): self.check_run_submodule('relative', '-p') def with_fake_debugger(func): @functools.wraps(func) def wrapper(*args, **kwds): with patch.object(debugger.Pdb, 'run', staticmethod(eval)): return func(*args, **kwds) return wrapper @with_fake_debugger def test_debug_run_submodule_with_absolute_import(self): self.check_run_submodule('absolute', '-d') @with_fake_debugger def test_debug_run_submodule_with_relative_import(self): self.check_run_submodule('relative', '-d') def test_module_options(self): _ip.user_ns.pop('a', None) test_opts = '-x abc -m test' _ip.run_line_magic('run', '-m {0}.args {1}'.format(self.package, test_opts)) nt.assert_equal(_ip.user_ns['a'], test_opts) def test_module_options_with_separator(self): _ip.user_ns.pop('a', None) test_opts = '-x abc -m test' _ip.run_line_magic( 'run', '-m {0}.args -- {1}'.format(self.package, test_opts)) nt.assert_equal(_ip.user_ns['a'], test_opts)
class TestLinkOrCopy(object): def setUp(self): self.tempdir = TemporaryDirectory() self.src = self.dst("src") with open(self.src, "w") as f: f.write("Hello, world!") def tearDown(self): self.tempdir.cleanup() def dst(self, *args): return os.path.join(self.tempdir.name, *args) def assert_inode_not_equal(self, a, b): nt.assert_not_equal( os.stat(a).st_ino, os.stat(b).st_ino, "%r and %r do reference the same indoes" % (a, b)) def assert_inode_equal(self, a, b): nt.assert_equal( os.stat(a).st_ino, os.stat(b).st_ino, "%r and %r do not reference the same indoes" % (a, b)) def assert_content_equal(self, a, b): with open(a) as a_f: with open(b) as b_f: nt.assert_equal(a_f.read(), b_f.read()) @skip_win32 def test_link_successful(self): dst = self.dst("target") path.link_or_copy(self.src, dst) self.assert_inode_equal(self.src, dst) @skip_win32 def test_link_into_dir(self): dst = self.dst("some_dir") os.mkdir(dst) path.link_or_copy(self.src, dst) expected_dst = self.dst("some_dir", os.path.basename(self.src)) self.assert_inode_equal(self.src, expected_dst) @skip_win32 def test_target_exists(self): dst = self.dst("target") open(dst, "w").close() path.link_or_copy(self.src, dst) self.assert_inode_equal(self.src, dst) @skip_win32 def test_no_link(self): real_link = os.link try: del os.link dst = self.dst("target") path.link_or_copy(self.src, dst) self.assert_content_equal(self.src, dst) self.assert_inode_not_equal(self.src, dst) finally: os.link = real_link @skip_if_not_win32 def test_windows(self): dst = self.dst("target") path.link_or_copy(self.src, dst) self.assert_content_equal(self.src, dst) def test_link_twice(self): # Linking the same file twice shouldn't leave duplicates around. # See https://github.com/ipython/ipython/issues/6450 dst = self.dst('target') path.link_or_copy(self.src, dst) path.link_or_copy(self.src, dst) self.assert_inode_equal(self.src, dst) nt.assert_equal(sorted(os.listdir(self.tempdir.name)), ['src', 'target'])