text: import unittest
  
  from qtconsole.qt import QtCore, QtGui
  
  from qtconsole.console_widget import ConsoleWidget
  import ipython_genutils.testing.decorators as dec
  
  setup = dec.skip_file_no_x11(__name__)
  
  class TestConsoleWidget(unittest.TestCase):
  
      @classmethod
      def setUpClass(cls):
          """ Create the application for the test case.
          """
          cls._app = QtGui.QApplication.instance()
          if cls._app is None:
              cls._app = QtGui.QApplication([])
          cls._app.setQuitOnLastWindowClosed(False)
  
      @classmethod
      def tearDownClass(cls):
          """ Exit the application.
          """
          QtGui.QApplication.quit()
  
      def test_special_characters(self):
          """ Are special characters displayed correctly?
          """
          w = ConsoleWidget()
          cursor = w._get_prompt_cursor()
  
          test_inputs = ['xyz\b\b=\n', 'foo\b\nbar\n', 'foo\b\nbar\r\n', 'abc\rxyz\b\b=']
          expected_outputs = [u'x=z\u2029', u'foo\u2029bar\u2029', u'foo\u2029bar\u2029', 'x=z']
          for i, text in enumerate(test_inputs):
              w._insert_plain_text(cursor, text)
              cursor.select(cursor.Document)
              selection = cursor.selectedText()
              self.assertEqual(expected_outputs[i], selection)
              # clear all the text
              cursor.insertText('')
  
      def test_link_handling(self):
          noKeys = QtCore.Qt
          noButton = QtCore.Qt.MouseButton(0)
          noButtons = QtCore.Qt.MouseButtons(0)
          noModifiers = QtCore.Qt.KeyboardModifiers(0)
          MouseMove = QtCore.QEvent.MouseMove
          QMouseEvent = QtGui.QMouseEvent
          
          w = ConsoleWidget()
          cursor = w._get_prompt_cursor()
          w._insert_html(cursor, '<a href="http://python.org">written in</a>')
          obj = w._control
          tip = QtGui.QToolTip
          self.assertEqual(tip.text(), u'')
          
          # should be somewhere else
          elsewhereEvent = QMouseEvent(MouseMove, QtCore.QPoint(50,50),
                                       noButton, noButtons, noModifiers)
          w.eventFilter(obj, elsewhereEvent)
          self.assertEqual(tip.isVisible(), False)
          self.assertEqual(tip.text(), u'')
          
          #self.assertEqual(tip.text(), u'')
          # should be over text
          overTextEvent = QMouseEvent(MouseMove, QtCore.QPoint(1,5),
                                      noButton, noButtons, noModifiers)
          w.eventFilter(obj, overTextEvent)
          self.assertEqual(tip.isVisible(), True)
          self.assertEqual(tip.text(), "http://python.org")
          
          # should still be over text
          stillOverTextEvent = QMouseEvent(MouseMove, QtCore.QPoint(1,5),
                                           noButton, noButtons, noModifiers)
          w.eventFilter(obj, stillOverTextEvent)
          self.assertEqual(tip.isVisible(), True)
          self.assertEqual(tip.text(), "http://python.org")
          
  