##// END OF EJS Templates
%time magic displays output even when code ends in semicolon #13837 (#13841)...
%time magic displays output even when code ends in semicolon #13837 (#13841) After the magic is evaluated and the result is calculated, the modification tests whether the evaluated magic was _time_ and whether semicolon is the final character. The result is killed if both things happen. My choice would be to remove the _time_ test, so a semicolon would prevent the print of the output of any magic, but this is only a suggestion I keep open. I did not write any automated test, but I can do that once (and if) the solution is accepted. [#13837](https://github.com/ipython/ipython/issues/13837) points to [#10227](https://github.com/ipython/ipython/issues/10227) (_Cell magic result in printing the last evaluated line even if followed by semicolon_). There, somebody says that ';' may be a meaningful character because we could have a C++ expression, for instance. The IPython repository says the documentation for other languages is in Jupyter. I ran Jupyter on my browser with C++ and saw that a semicolon after the last statement prevents the output to be printed (a semicolon between 2 statements in a cell seems to be necessary, though). See attached file for simple examples. Therefore, it seems that the semicolon at the end in C++ already behaves the same way that in Python and is not required by the interpreter. ![IPython_Cpp](https://user-images.githubusercontent.com/5789832/203915670-513514d6-70a4-4efa-b4f4-9a8293d5a1ff.png)

File last commit:

r27495:1a9d9554
r28070:87de97f2 merge
Show More
test_tools.py
133 lines | 4.1 KiB | text/x-python | PythonLexer
Brian Granger
Adding test_tools.py
r1983 # encoding: utf-8
"""
Tests for testing.tools
"""
#-----------------------------------------------------------------------------
Matthias BUSSONNIER
update copyright to 2011/20xx-2011...
r5390 # Copyright (C) 2008-2011 The IPython Development Team
Brian Granger
Adding test_tools.py
r1983 #
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import os
Thomas Kluyver
Add AssertPrints context manager to check output from tests.
r4901 import unittest
Brian Granger
Adding test_tools.py
r1983
from IPython.testing import decorators as dec
Fernando Perez
More win32 test fixes and a new test....
r2451 from IPython.testing import tools as tt
Brian Granger
Adding test_tools.py
r1983
#-----------------------------------------------------------------------------
# Tests
#-----------------------------------------------------------------------------
@dec.skip_win32
def test_full_path_posix():
Samuel Gaist
[testing][tests][tools] Remove nose
r26885 spath = "/foo/bar.py"
result = tt.full_path(spath, ["a.txt", "b.txt"])
assert result, ["/foo/a.txt" == "/foo/b.txt"]
spath = "/foo"
result = tt.full_path(spath, ["a.txt", "b.txt"])
assert result, ["/a.txt" == "/b.txt"]
result = tt.full_path(spath, "a.txt")
assert result == ["/a.txt"]
Brian Granger
Adding test_tools.py
r1983
@dec.skip_if_not_win32
def test_full_path_win32():
Samuel Gaist
[testing][tests][tools] Remove nose
r26885 spath = "c:\\foo\\bar.py"
result = tt.full_path(spath, ["a.txt", "b.txt"])
assert result, ["c:\\foo\\a.txt" == "c:\\foo\\b.txt"]
spath = "c:\\foo"
result = tt.full_path(spath, ["a.txt", "b.txt"])
assert result, ["c:\\a.txt" == "c:\\b.txt"]
result = tt.full_path(spath, "a.txt")
assert result == ["c:\\a.txt"]
Fernando Perez
Add test utility for parsing test output from stdout/stderr
r2353
Fernando Perez
More win32 test fixes and a new test....
r2451
Fernando Perez
Add test utility for parsing test output from stdout/stderr
r2353 def test_parser():
err = ("FAILED (errors=1)", 1, 0)
fail = ("FAILED (failures=1)", 0, 1)
both = ("FAILED (errors=1, failures=1)", 1, 1)
for txt, nerr, nfail in [err, fail, both]:
Fernando Perez
More win32 test fixes and a new test....
r2451 nerr1, nfail1 = tt.parse_test_output(txt)
Samuel Gaist
[testing][tests][tools] Remove nose
r26885 assert nerr == nerr1
assert nfail == nfail1
Thomas Kluyver
Remove tests for parametric test machinery
r12371
Fernando Perez
More win32 test fixes and a new test....
r2451
def test_temp_pyfile():
src = 'pass\n'
Matthias Bussonnier
Do not return filehandle as unused
r25106 fname = tt.temp_pyfile(src)
Thomas Kluyver
Remove tests for parametric test machinery
r12371 assert os.path.isfile(fname)
gousaiyang
Format code
r27495 with open(fname, encoding="utf-8") as fh2:
Fernando Perez
More win32 test fixes and a new test....
r2451 src2 = fh2.read()
Samuel Gaist
[testing][tests][tools] Remove nose
r26885 assert src2 == src
Thomas Kluyver
Add AssertPrints context manager to check output from tests.
r4901
class TestAssertPrints(unittest.TestCase):
def test_passing(self):
with tt.AssertPrints("abc"):
Thomas Kluyver
Convert print statements to print function calls...
r13348 print("abcd")
print("def")
print(b"ghi")
Thomas Kluyver
Add AssertPrints context manager to check output from tests.
r4901
def test_failing(self):
def func():
with tt.AssertPrints("abc"):
Thomas Kluyver
Convert print statements to print function calls...
r13348 print("acd")
print("def")
print(b"ghi")
Thomas Kluyver
Add AssertPrints context manager to check output from tests.
r4901
self.assertRaises(AssertionError, func)
Jörgen Stenarson
Adding tests and another line normalization for stderr.
r8291
Matthias Bussonnier
Fix Mixin Inheritence in Xunit unittest....
r25113 class Test_ipexec_validate(tt.TempFileMixin):
Jörgen Stenarson
Adding tests and another line normalization for stderr.
r8291 def test_main_path(self):
"""Test with only stdout results.
"""
self.mktmp("print('A')\n"
"print('B')\n"
)
out = "A\nB"
tt.ipexec_validate(self.fname, out)
Jörgen Stenarson
Adding tests expecting windows lineendings.
r8293 def test_main_path2(self):
"""Test with only stdout results, expecting windows line endings.
"""
self.mktmp("print('A')\n"
"print('B')\n"
)
out = "A\r\nB"
tt.ipexec_validate(self.fname, out)
Jörgen Stenarson
Adding tests and another line normalization for stderr.
r8291 def test_exception_path(self):
"""Test exception path in exception_validate.
"""
Paul Ivanov
the __future__ is now.
r22963 self.mktmp("import sys\n"
Jörgen Stenarson
Adding tests and another line normalization for stderr.
r8291 "print('A')\n"
"print('B')\n"
"print('C', file=sys.stderr)\n"
"print('D', file=sys.stderr)\n"
)
out = "A\nB"
tt.ipexec_validate(self.fname, expected_out=out, expected_err="C\nD")
Jörgen Stenarson
Adding tests expecting windows lineendings.
r8293
Thomas Kluyver
Remove unused imports in IPython.testing
r11133 def test_exception_path2(self):
Jörgen Stenarson
Adding tests expecting windows lineendings.
r8293 """Test exception path in exception_validate, expecting windows line endings.
"""
Paul Ivanov
the __future__ is now.
r22963 self.mktmp("import sys\n"
Jörgen Stenarson
Adding tests expecting windows lineendings.
r8293 "print('A')\n"
"print('B')\n"
"print('C', file=sys.stderr)\n"
"print('D', file=sys.stderr)\n"
)
out = "A\r\nB"
tt.ipexec_validate(self.fname, expected_out=out, expected_err="C\r\nD")
Matthias Bussonnier
Correctly teardown test case, avoid filehandle leaking.
r22361
def tearDown(self):
# tear down correctly the mixin,
# unittest.TestCase.tearDown does nothing
tt.TempFileMixin.tearDown(self)