test_kill_ring.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import unittest
  2. import pytest
  3. from qtpy import QtGui, QtWidgets
  4. from qtconsole.kill_ring import KillRing, QtKillRing
  5. from . import no_display
  6. @pytest.mark.skipif(no_display, reason="Doesn't work without a display")
  7. class TestKillRing(unittest.TestCase):
  8. @classmethod
  9. def setUpClass(cls):
  10. """ Create the application for the test case.
  11. """
  12. cls._app = QtWidgets.QApplication.instance()
  13. if cls._app is None:
  14. cls._app = QtWidgets.QApplication([])
  15. cls._app.setQuitOnLastWindowClosed(False)
  16. @classmethod
  17. def tearDownClass(cls):
  18. """ Exit the application.
  19. """
  20. QtWidgets.QApplication.quit()
  21. def test_generic(self):
  22. """ Does the generic kill ring work?
  23. """
  24. ring = KillRing()
  25. self.assertTrue(ring.yank() is None)
  26. self.assertTrue(ring.rotate() is None)
  27. ring.kill('foo')
  28. self.assertEqual(ring.yank(), 'foo')
  29. self.assertTrue(ring.rotate() is None)
  30. self.assertEqual(ring.yank(), 'foo')
  31. ring.kill('bar')
  32. self.assertEqual(ring.yank(), 'bar')
  33. self.assertEqual(ring.rotate(), 'foo')
  34. ring.clear()
  35. self.assertTrue(ring.yank() is None)
  36. self.assertTrue(ring.rotate() is None)
  37. def test_qt_basic(self):
  38. """ Does the Qt kill ring work?
  39. """
  40. text_edit = QtWidgets.QPlainTextEdit()
  41. ring = QtKillRing(text_edit)
  42. ring.kill('foo')
  43. ring.kill('bar')
  44. ring.yank()
  45. ring.rotate()
  46. ring.yank()
  47. self.assertEqual(text_edit.toPlainText(), 'foobar')
  48. text_edit.clear()
  49. ring.kill('baz')
  50. ring.yank()
  51. ring.rotate()
  52. ring.rotate()
  53. ring.rotate()
  54. self.assertEqual(text_edit.toPlainText(), 'foo')
  55. def test_qt_cursor(self):
  56. """ Does the Qt kill ring maintain state with cursor movement?
  57. """
  58. text_edit = QtWidgets.QPlainTextEdit()
  59. ring = QtKillRing(text_edit)
  60. ring.kill('foo')
  61. ring.kill('bar')
  62. ring.yank()
  63. text_edit.moveCursor(QtGui.QTextCursor.Left)
  64. ring.rotate()
  65. self.assertEqual(text_edit.toPlainText(), 'bar')
  66. if __name__ == '__main__':
  67. import pytest
  68. pytest.main()