Running tests using unittest from the standard library gives an error about unrecognized arguments. I know this is supposed to be an unmaintained module, but I wonder if IPython already has a standard way of hiding ipython specific args.
Maybe a little unusual to actually want to run unittest inside a repl, but the standard repl handles this without error.
A minimal testcase shows the issue:
$ ipython --TerminalIPythonApp.interactive_shell_class=rlipython.TerminalInteractiveShell
Python 3.6.1 (default, Apr 4 2017, 09:40:51)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import unittest
In [2]: class IpythonTest(unittest.TestCase):
...: def test_test(self):
...: self.assertTrue(True)
...:
In [3]: unittest.main()
usage: ipython [-h] [-v] [-q] [--locals] [-f] [-c] [-b] [tests [tests ...]]
ipython: error: unrecognized arguments: --TerminalIPythonApp.interactive_shell_class=rlipython.TerminalInteractiveShell
An exception has occurred, use %tb to see the full traceback.
SystemExit: 2
/usr/local/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2855: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
In [4]: %tb
---------------------------------------------------------------------------
SystemExit Traceback (most recent call last)
<ipython-input-3-7d361a096586> in <module>()
----> 1 unittest.main()
/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/main.py in __init__(
self, module, defaultTest, argv, testRunner, testLoader, exit, verbosity, failfast, catchbreak, buffer, warnings, tb
_locals)
91 self.testLoader = testLoader
92 self.progName = os.path.basename(argv[0])
---> 93 self.parseArgs(argv)
94 self.runTests()
95
/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/main.py in parseArg$
(self, argv)
124 return
125 else:
--> 126 self._main_parser.parse_args(argv[1:], self)
127
128 if self.tests:
/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py in parse_args(se$
f, args, namespace)
1731 if argv:
1732 msg = _('unrecognized arguments: %s')
-> 1733 self.error(msg % ' '.join(argv))
1734 return args
1735
/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py in error(self, m$
ssage)
2387 self.print_usage(_sys.stderr)
2388 args = {'prog': self.prog, 'message': message}
-> 2389 self.exit(2, _('%(prog)s: error: %(message)s\n') % args)
/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py in exit(self, st$
tus, message)
2374 if message:
2375 self._print_message(message, _sys.stderr)
-> 2376 _sys.exit(status)
2377
2378 def error(self, message):
SystemExit: 2
For reference, on vanilla IPython, the tests actually run but some noise complains at the end too:
$ ipython
Python 3.6.1 (default, Apr 4 2017, 09:40:51)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import unittest
In [2]: class IpythonTest(unittest.TestCase):
...: def test_test(self):
...: self.assertTrue(True)
...:
In [3]: unittest.main()
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
An exception has occurred, use %tb to see the full traceback.
SystemExit: False
/usr/local/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2855: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
Running tests using
unittest
from the standard library gives an error about unrecognized arguments. I know this is supposed to be an unmaintained module, but I wonder if IPython already has a standard way of hiding ipython specific args.Maybe a little unusual to actually want to run unittest inside a repl, but the standard repl handles this without error.
A minimal testcase shows the issue:
For reference, on vanilla IPython, the tests actually run but some noise complains at the end too: