##// END OF EJS Templates
Remove yield test that are not support by pytest anymore...
Remove yield test that are not support by pytest anymore And remove comparison of str/unicode as it is not relevant anymore as both are the same. We can now unpin pytest as well, which we should make sure is in release notes and in the conda-forge recipe As nose does not understand `@parametrize`, and the nose `@skip` decorator messes with that as well, we mark tests with parametrize as not-tests for iptests

File last commit:

r26183:61376395
r26183:61376395
Show More
test_capture.py
172 lines | 5.5 KiB | text/x-python | PythonLexer
# encoding: utf-8
"""Tests for IPython.utils.capture"""
#-----------------------------------------------------------------------------
# Copyright (C) 2013 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import sys
import nose.tools as nt
import pytest
from IPython.testing.decorators import skip_iptest_but_not_pytest
from IPython.utils import capture
#-----------------------------------------------------------------------------
# Globals
#-----------------------------------------------------------------------------
_mime_map = dict(
_repr_png_="image/png",
_repr_jpeg_="image/jpeg",
_repr_svg_="image/svg+xml",
_repr_html_="text/html",
_repr_json_="application/json",
_repr_javascript_="application/javascript",
)
basic_data = {
'image/png' : b'binarydata',
'text/html' : "<b>bold</b>",
}
basic_metadata = {
'image/png' : {
'width' : 10,
'height' : 20,
},
}
full_data = {
'image/png' : b'binarydata',
'image/jpeg' : b'binarydata',
'image/svg+xml' : "<svg>",
'text/html' : "<b>bold</b>",
'application/javascript' : "alert();",
'application/json' : "{}",
}
full_metadata = {
'image/png' : {"png" : "exists"},
'image/jpeg' : {"jpeg" : "exists"},
'image/svg+xml' : {"svg" : "exists"},
'text/html' : {"html" : "exists"},
'application/javascript' : {"js" : "exists"},
'application/json' : {"json" : "exists"},
}
hello_stdout = "hello, stdout"
hello_stderr = "hello, stderr"
#-----------------------------------------------------------------------------
# Test Functions
#-----------------------------------------------------------------------------
@pytest.mark.parametrize("method_mime", _mime_map.items())
@skip_iptest_but_not_pytest
def test_rich_output_empty(method_mime):
"""RichOutput with no args"""
rich = capture.RichOutput()
method, mime = method_mime
nt.assert_equal(getattr(rich, method)(), None)
def test_rich_output():
"""test RichOutput basics"""
data = basic_data
metadata = basic_metadata
rich = capture.RichOutput(data=data, metadata=metadata)
nt.assert_equal(rich._repr_html_(), data["text/html"])
nt.assert_equal(rich._repr_png_(), (data["image/png"], metadata["image/png"]))
nt.assert_equal(rich._repr_latex_(), None)
nt.assert_equal(rich._repr_javascript_(), None)
nt.assert_equal(rich._repr_svg_(), None)
@skip_iptest_but_not_pytest
@pytest.mark.parametrize("method_mime", _mime_map.items())
def test_rich_output_no_metadata(method_mime):
"""test RichOutput with no metadata"""
data = full_data
rich = capture.RichOutput(data=data)
method, mime = method_mime
nt.assert_equal(getattr(rich, method)(), data[mime])
@skip_iptest_but_not_pytest
@pytest.mark.parametrize("method_mime", _mime_map.items())
def test_rich_output_metadata(method_mime):
"""test RichOutput with metadata"""
data = full_data
metadata = full_metadata
rich = capture.RichOutput(data=data, metadata=metadata)
method, mime = method_mime
nt.assert_equal(getattr(rich, method)(), (data[mime], metadata[mime]))
def test_rich_output_display():
"""test RichOutput.display
This is a bit circular, because we are actually using the capture code we are testing
to test itself.
"""
data = full_data
rich = capture.RichOutput(data=data)
with capture.capture_output() as cap:
rich.display()
nt.assert_equal(len(cap.outputs), 1)
rich2 = cap.outputs[0]
nt.assert_equal(rich2.data, rich.data)
nt.assert_equal(rich2.metadata, rich.metadata)
def test_capture_output():
"""capture_output works"""
rich = capture.RichOutput(data=full_data)
with capture.capture_output() as cap:
print(hello_stdout, end="")
print(hello_stderr, end="", file=sys.stderr)
rich.display()
nt.assert_equal(hello_stdout, cap.stdout)
nt.assert_equal(hello_stderr, cap.stderr)
def test_capture_output_no_stdout():
"""test capture_output(stdout=False)"""
rich = capture.RichOutput(data=full_data)
with capture.capture_output(stdout=False) as cap:
print(hello_stdout, end="")
print(hello_stderr, end="", file=sys.stderr)
rich.display()
nt.assert_equal("", cap.stdout)
nt.assert_equal(hello_stderr, cap.stderr)
nt.assert_equal(len(cap.outputs), 1)
def test_capture_output_no_stderr():
"""test capture_output(stderr=False)"""
rich = capture.RichOutput(data=full_data)
# add nested capture_output so stderr doesn't make it to nose output
with capture.capture_output(), capture.capture_output(stderr=False) as cap:
print(hello_stdout, end="")
print(hello_stderr, end="", file=sys.stderr)
rich.display()
nt.assert_equal(hello_stdout, cap.stdout)
nt.assert_equal("", cap.stderr)
nt.assert_equal(len(cap.outputs), 1)
def test_capture_output_no_display():
"""test capture_output(display=False)"""
rich = capture.RichOutput(data=full_data)
with capture.capture_output(display=False) as cap:
print(hello_stdout, end="")
print(hello_stderr, end="", file=sys.stderr)
rich.display()
nt.assert_equal(hello_stdout, cap.stdout)
nt.assert_equal(hello_stderr, cap.stderr)
nt.assert_equal(cap.outputs, [])