You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.7 KiB
Python

# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
"""Test Widget."""
import inspect
import pytest
from IPython.core.interactiveshell import InteractiveShell
from IPython.display import display
from IPython.utils.capture import capture_output
from .. import widget
from ..widget import Widget
from ..widget_button import Button
import copy
def test_no_widget_view():
# ensure IPython shell is instantiated
# otherwise display() just calls print
shell = InteractiveShell.instance()
with capture_output() as cap:
w = Widget()
display(w)
assert len(cap.outputs) == 1, "expect 1 output"
mime_bundle = cap.outputs[0].data
assert mime_bundle["text/plain"] == repr(w), "expected plain text output"
assert (
"application/vnd.jupyter.widget-view+json" not in mime_bundle
), "widget has no view"
assert cap.stdout == "", repr(cap.stdout)
assert cap.stderr == "", repr(cap.stderr)
def test_widget_view():
# ensure IPython shell is instantiated
# otherwise display() just calls print
shell = InteractiveShell.instance()
with capture_output() as cap:
w = Button()
display(w)
assert len(cap.outputs) == 1, "expect 1 output"
mime_bundle = cap.outputs[0].data
assert mime_bundle["text/plain"] == repr(w), "expected plain text output"
assert (
"application/vnd.jupyter.widget-view+json" in mime_bundle
), "widget should have have a view"
assert cap.stdout == "", repr(cap.stdout)
assert cap.stderr == "", repr(cap.stderr)
def test_close_all():
# create a couple of widgets
widgets = [Button() for i in range(10)]
assert len(widget._instances) > 0, "expect active widgets"
assert widget._instances[widgets[0].model_id] is widgets[0]
# close all the widgets
Widget.close_all()
assert len(widget._instances) == 0, "active widgets should be cleared"
def test_compatibility():
button = Button()
assert widget._instances[button.model_id] is button
with pytest.deprecated_call() as record:
assert widget._instances is widget.Widget.widgets
assert widget._instances is widget.Widget._active_widgets
assert widget._registry is widget.Widget.widget_types
assert widget._registry is widget.Widget._widget_types
Widget.close_all()
assert not widget.Widget.widgets
assert not widget.Widget._active_widgets
caller_path = inspect.stack(context=0)[1].filename
assert all(x.filename == caller_path for x in record)
assert len(record) == 6
def test_widget_copy():
button = Button()
with pytest.raises(NotImplementedError):
copy.copy(button)
with pytest.raises(NotImplementedError):
copy.deepcopy(button)