File: test_displayhook.py

package info (click to toggle)
ipython 9.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 8,624 kB
  • sloc: python: 45,268; sh: 317; makefile: 168
file content (116 lines) | stat: -rw-r--r-- 3,576 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import sys
from IPython.testing.tools import AssertPrints, AssertNotPrints
from IPython.core.displayhook import CapturingDisplayHook
from IPython.utils.capture import CapturedIO


def test_output_displayed():
    """Checking to make sure that output is displayed"""

    with AssertPrints("2"):
        ip.run_cell("1+1", store_history=True)

    with AssertPrints("2"):
        ip.run_cell("1+1 # comment with a semicolon;", store_history=True)

    with AssertPrints("2"):
        ip.run_cell("1+1\n#commented_out_function();", store_history=True)


def test_output_quiet():
    """Checking to make sure that output is quiet"""

    with AssertNotPrints("2"):
        ip.run_cell("1+1;", store_history=True)

    with AssertNotPrints("2"):
        ip.run_cell("1+1; # comment with a semicolon", store_history=True)

    with AssertNotPrints("2"):
        ip.run_cell("1+1;\n#commented_out_function()", store_history=True)


def test_underscore_no_overwrite_user():
    ip.run_cell("_ = 42", store_history=True)
    ip.run_cell("1+1", store_history=True)

    with AssertPrints("42"):
        ip.run_cell("print(_)", store_history=True)

    ip.run_cell("del _", store_history=True)
    ip.run_cell("6+6", store_history=True)
    with AssertPrints("12"):
        ip.run_cell("_", store_history=True)


def test_underscore_no_overwrite_builtins():
    ip.run_cell("import gettext ; gettext.install('foo')", store_history=True)
    ip.run_cell("3+3", store_history=True)

    with AssertPrints("gettext"):
        ip.run_cell("print(_)", store_history=True)

    ip.run_cell('_ = "userset"', store_history=True)

    with AssertPrints("userset"):
        ip.run_cell("print(_)", store_history=True)
    ip.run_cell("import builtins; del builtins._")


def test_interactivehooks_ast_modes():
    """
    Test that ast nodes can be triggered with different modes
    """
    saved_mode = ip.ast_node_interactivity
    ip.ast_node_interactivity = "last_expr_or_assign"

    try:
        with AssertPrints("2"):
            ip.run_cell("a = 1+1", store_history=True)

        with AssertPrints("9"):
            ip.run_cell("b = 1+8 # comment with a semicolon;", store_history=False)

        with AssertPrints("7"):
            ip.run_cell("c = 1+6\n#commented_out_function();", store_history=True)

        ip.run_cell("d = 11", store_history=True)
        with AssertPrints("12"):
            ip.run_cell("d += 1", store_history=True)

        with AssertNotPrints("42"):
            ip.run_cell("(u,v) = (41+1, 43-1)")

    finally:
        ip.ast_node_interactivity = saved_mode


def test_interactivehooks_ast_modes_semi_suppress():
    """
    Test that ast nodes can be triggered with different modes and suppressed
    by semicolon
    """
    saved_mode = ip.ast_node_interactivity
    ip.ast_node_interactivity = "last_expr_or_assign"

    try:
        with AssertNotPrints("2"):
            ip.run_cell("x = 1+1;", store_history=True)

        with AssertNotPrints("7"):
            ip.run_cell("y = 1+6; # comment with a semicolon", store_history=True)

        with AssertNotPrints("9"):
            ip.run_cell("z = 1+8;\n#commented_out_function()", store_history=True)

    finally:
        ip.ast_node_interactivity = saved_mode


def test_capture_display_hook_format():
    """Tests that the capture display hook conforms to the CapturedIO output format"""
    hook = CapturingDisplayHook(ip)
    hook({"foo": "bar"})
    captured = CapturedIO(sys.stdout, sys.stderr, hook.outputs)
    # Should not raise with RichOutput transformation error
    captured.outputs