Show More
@@ -16,6 +16,9 b' from __future__ import absolute_import' | |||||
16 | import os |
|
16 | import os | |
17 | import sys |
|
17 | import sys | |
18 | import tempfile |
|
18 | import tempfile | |
|
19 | import unittest | |||
|
20 | import textwrap | |||
|
21 | import random | |||
19 |
|
22 | |||
20 | import nose.tools as nt |
|
23 | import nose.tools as nt | |
21 | from nose import SkipTest |
|
24 | from nose import SkipTest | |
@@ -23,6 +26,7 b' from nose import SkipTest' | |||||
23 | from IPython.testing import decorators as dec |
|
26 | from IPython.testing import decorators as dec | |
24 | from IPython.testing import tools as tt |
|
27 | from IPython.testing import tools as tt | |
25 | from IPython.utils import py3compat |
|
28 | from IPython.utils import py3compat | |
|
29 | from IPython.utils.tempdir import TemporaryDirectory | |||
26 |
|
30 | |||
27 | #----------------------------------------------------------------------------- |
|
31 | #----------------------------------------------------------------------------- | |
28 | # Test functions begin |
|
32 | # Test functions begin | |
@@ -337,3 +341,53 b' tclass.py: deleting object: C-third' | |||||
337 | self.mktmp(src) |
|
341 | self.mktmp(src) | |
338 | _ip.magic('run -t -N 1 %s' % self.fname) |
|
342 | _ip.magic('run -t -N 1 %s' % self.fname) | |
339 | _ip.magic('run -t -N 10 %s' % self.fname) |
|
343 | _ip.magic('run -t -N 10 %s' % self.fname) | |
|
344 | ||||
|
345 | ||||
|
346 | class TestMagicRunWithPackage(unittest.TestCase): | |||
|
347 | ||||
|
348 | def writefile(self, name, content): | |||
|
349 | path = os.path.join(self.tempdir.name, name) | |||
|
350 | d = os.path.dirname(path) | |||
|
351 | if not os.path.isdir(d): | |||
|
352 | os.makedirs(d) | |||
|
353 | with open(path, 'w') as f: | |||
|
354 | f.write(textwrap.dedent(content)) | |||
|
355 | ||||
|
356 | def setUp(self): | |||
|
357 | self.package = package = 'tmp{0}'.format(repr(random.random())[2:]) | |||
|
358 | """Temporary valid python package name.""" | |||
|
359 | ||||
|
360 | self.value = int(random.random() * 10000) | |||
|
361 | ||||
|
362 | self.tempdir = TemporaryDirectory() | |||
|
363 | self.__orig_cwd = os.getcwdu() | |||
|
364 | sys.path.insert(0, self.tempdir.name) | |||
|
365 | ||||
|
366 | self.writefile(os.path.join(package, '__init__.py'), '') | |||
|
367 | self.writefile(os.path.join(package, 'foo.py'), """ | |||
|
368 | x = {0!r} | |||
|
369 | """.format(self.value)) | |||
|
370 | self.writefile(os.path.join(package, 'relative.py'), """ | |||
|
371 | from .foo import x | |||
|
372 | """) | |||
|
373 | self.writefile(os.path.join(package, 'absolute.py'), """ | |||
|
374 | from {0}.foo import x | |||
|
375 | """.format(package)) | |||
|
376 | ||||
|
377 | def tearDown(self): | |||
|
378 | os.chdir(self.__orig_cwd) | |||
|
379 | sys.path[:] = filter(lambda x: x != self.tempdir.name, sys.path) | |||
|
380 | self.tempdir.cleanup() | |||
|
381 | ||||
|
382 | def check_run_submodule(self, submodule): | |||
|
383 | _ip.magic('run -m {0}.{1}'.format(self.package, submodule)) | |||
|
384 | self.assertEqual(_ip.user_ns['x'], self.value, | |||
|
385 | 'Variable `x` is not loaded from module `{0}`.' | |||
|
386 | .format(submodule)) | |||
|
387 | ||||
|
388 | def test_run_submodule_with_absolute_import(self): | |||
|
389 | self.check_run_submodule('absolute') | |||
|
390 | ||||
|
391 | def test_run_submodule_with_relative_import(self): | |||
|
392 | """Run submodule that has a relative import statement (#2727).""" | |||
|
393 | self.check_run_submodule('relative') |
General Comments 0
You need to be logged in to leave comments.
Login now