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
		
	
			
		
		
	
	
			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) |