import unittest import pytest from qtpy import QtWidgets from qtconsole.client import QtKernelClient from qtconsole.jupyter_widget import JupyterWidget from . import no_display from qtpy.QtTest import QTest @pytest.mark.skipif(no_display, reason="Doesn't work without a display") class TestJupyterWidget(unittest.TestCase): @classmethod def setUpClass(cls): """ Create the application for the test case. """ cls._app = QtWidgets.QApplication.instance() if cls._app is None: cls._app = QtWidgets.QApplication([]) cls._app.setQuitOnLastWindowClosed(False) @classmethod def tearDownClass(cls): """ Exit the application. """ QtWidgets.QApplication.quit() def test_stylesheet_changed(self): """ Test changing stylesheets. """ w = JupyterWidget(kind='rich') # By default, the background is light. White text is rendered as black self.assertEqual(w._ansi_processor.get_color(15).name(), '#000000') # Change to a dark colorscheme. White text is rendered as white w.syntax_style = 'monokai' self.assertEqual(w._ansi_processor.get_color(15).name(), '#ffffff') def test_other_output(self): """ Test displaying output from other clients. """ w = JupyterWidget(kind='rich') w._append_plain_text('Header\n') w._show_interpreter_prompt(1) w.other_output_prefix = '[other] ' w.syntax_style = 'default' control = w._control document = control.document() msg = dict( execution_count=1, code='a = 1 + 1\nb = range(10)', ) w._append_custom(w._insert_other_input, msg, before_prompt=True) self.assertEqual(document.blockCount(), 6) self.assertEqual(document.toPlainText(), ( u'Header\n' u'\n' u'[other] In [1]: a = 1 + 1\n' u' ...: b = range(10)\n' u'\n' u'In [2]: ' )) # Check proper syntax highlighting self.assertEqual(document.toHtml(), ( u'\n' u'
\n' u'Header
\n' u'[other] In [1]: a = 1 + 1
\n' u'\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0...: b = range(10)
\n' u'In [2]:
' ))