##// END OF EJS Templates
Fixes #3664
Jarrod Janssen -
Show More
@@ -11,6 +11,7 b' import builtins as builtin_mod'
11 import gc
11 import gc
12 import itertools
12 import itertools
13 import os
13 import os
14 import shlex
14 import sys
15 import sys
15 import time
16 import time
16 import timeit
17 import timeit
@@ -617,6 +618,20 b' python-profiler package from non-free.""")'
617
618
618 """
619 """
619
620
621 # Logic to handle issue #3664
622 # Add '--' after '-m <module_name>' to ignore additional args passed to a module.
623 if '-m' in parameter_s and '--' not in parameter_s:
624 argv = shlex.split(parameter_s, posix=(os.name == 'posix'))
625 for idx, arg in enumerate(argv):
626 if arg and arg.startswith('-') and arg != '-':
627 if arg == '-m':
628 argv.insert(idx + 2, '--')
629 break
630 else:
631 # Positional arg, break
632 break
633 parameter_s = ' '.join(shlex.quote(arg) for arg in argv)
634
620 # get arguments and set sys.argv for program to be run.
635 # get arguments and set sys.argv for program to be run.
621 opts, arg_lst = self.parse_options(parameter_s,
636 opts, arg_lst = self.parse_options(parameter_s,
622 'nidtN:b:pD:l:rs:T:em:G',
637 'nidtN:b:pD:l:rs:T:em:G',
@@ -384,7 +384,14 b' tclass.py: deleting object: C-third'
384 _ip.magic("run %s" % self.fname)
384 _ip.magic("run %s" % self.fname)
385
385
386 nt.assert_equal(_ip.user_ns['answer'], 42)
386 nt.assert_equal(_ip.user_ns['answer'], 42)
387
387
388 def test_file_options(self):
389 src = ('import sys\n'
390 'a = " ".join(sys.argv[1:])\n')
391 self.mktmp(src)
392 test_opts = '-x 3 --verbose'
393 _ip.run_line_magic("run", '{0} {1}'.format(self.fname, test_opts))
394 nt.assert_equal(_ip.user_ns['a'], test_opts)
388
395
389
396
390 class TestMagicRunWithPackage(unittest.TestCase):
397 class TestMagicRunWithPackage(unittest.TestCase):
@@ -417,6 +424,10 b' class TestMagicRunWithPackage(unittest.TestCase):'
417 self.writefile(os.path.join(package, 'absolute.py'), """
424 self.writefile(os.path.join(package, 'absolute.py'), """
418 from {0}.sub import x
425 from {0}.sub import x
419 """.format(package))
426 """.format(package))
427 self.writefile(os.path.join(package, 'args.py'), """
428 import sys
429 a = " ".join(sys.argv[1:])
430 """.format(package))
420
431
421 def tearDown(self):
432 def tearDown(self):
422 os.chdir(self.__orig_cwd)
433 os.chdir(self.__orig_cwd)
@@ -458,6 +469,18 b' class TestMagicRunWithPackage(unittest.TestCase):'
458 def test_debug_run_submodule_with_relative_import(self):
469 def test_debug_run_submodule_with_relative_import(self):
459 self.check_run_submodule('relative', '-d')
470 self.check_run_submodule('relative', '-d')
460
471
472 def test_module_options(self):
473 _ip.user_ns.pop('a', None)
474 test_opts = '-x abc -m test'
475 _ip.run_line_magic('run', '-m {0}.args {1}'.format(self.package, test_opts))
476 nt.assert_equal(_ip.user_ns['a'], test_opts)
477
478 def test_module_options_with_separator(self):
479 _ip.user_ns.pop('a', None)
480 test_opts = '-x abc -m test'
481 _ip.run_line_magic('run', '-m {0}.args -- {1}'.format(self.package, test_opts))
482 nt.assert_equal(_ip.user_ns['a'], test_opts)
483
461 def test_run__name__():
484 def test_run__name__():
462 with TemporaryDirectory() as td:
485 with TemporaryDirectory() as td:
463 path = pjoin(td, 'foo.py')
486 path = pjoin(td, 'foo.py')
General Comments 0
You need to be logged in to leave comments. Login now