Advertisement
asweigart

Untitled

Nov 7th, 2017
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.20 KB | None | 0 0
  1. # coding: utf-8
  2. import string
  3. import unittest
  4. import random
  5. import os
  6. import platform
  7.  
  8. import sys
  9. sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
  10.  
  11. from pyperclipsingle import _executable_exists, HAS_DISPLAY
  12. from pyperclipsingle import (init_osx_pbcopy_clipboard, init_osx_pyobjc_clipboard,
  13. init_dev_clipboard_clipboard,
  14. init_gtk_clipboard, init_qt_clipboard,
  15. init_xclip_clipboard, init_xsel_clipboard,
  16. init_klipper_clipboard, init_no_clipboard)
  17. from pyperclipsingle import init_windows_clipboard
  18.  
  19. random.seed(42)
  20.  
  21. class _TestClipboard(unittest.TestCase):
  22. clipboard = None
  23. supports_unicode = True
  24.  
  25. @property
  26. def copy(self):
  27. return self.clipboard[0]
  28.  
  29. @property
  30. def paste(self):
  31. return self.clipboard[1]
  32.  
  33. def setUp(self):
  34. if not self.clipboard:
  35. self.skipTest("Clipboard not supported.")
  36.  
  37. def test_copy_simple(self):
  38. self.copy("pyper\r\nclip")
  39.  
  40. def test_copy_paste_simple(self):
  41. msg = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(1000))
  42. self.copy(msg)
  43. self.assertEqual(self.paste(), msg)
  44.  
  45. def test_copy_paste_whitespace(self):
  46. msg = ''.join(random.choice(string.whitespace) for _ in range(1000))
  47. self.copy(msg)
  48. self.assertEqual(self.paste(), msg)
  49.  
  50. def test_copy_blank(self):
  51. self.copy('TEST')
  52. self.copy('')
  53. self.assertEqual(self.paste(), '')
  54.  
  55. def test_copy_unicode(self):
  56. if not self.supports_unicode:
  57. raise unittest.SkipTest()
  58. self.copy(u"ಠ_ಠ")
  59.  
  60. def test_copy_unicode_emoji(self):
  61. if not self.supports_unicode:
  62. raise unittest.SkipTest()
  63. self.copy(u"🙆")
  64.  
  65. def test_copy_paste_unicode(self):
  66. if not self.supports_unicode:
  67. raise unittest.SkipTest()
  68. msg = u"ಠ_ಠ"
  69. self.copy(msg)
  70. self.assertEqual(self.paste(), msg)
  71.  
  72. def test_copy_paste_unicode_emoji(self):
  73. if not self.supports_unicode:
  74. raise unittest.SkipTest()
  75. msg = u"🙆"
  76. self.copy(msg)
  77. self.assertEqual(self.paste(), msg)
  78.  
  79.  
  80. class TestCygwin(_TestClipboard):
  81. if 'cygwin' in platform.system().lower():
  82. clipboard = init_dev_clipboard_clipboard()
  83.  
  84.  
  85. class TestWindows(_TestClipboard):
  86. if os.name == 'nt' or platform.system() == 'Windows':
  87. clipboard = init_windows_clipboard()
  88.  
  89.  
  90. class TestOSX(_TestClipboard):
  91. if os.name == 'mac' or platform.system() == 'Darwin':
  92. try:
  93. import Foundation # check if pyobjc is installed
  94. import AppKit
  95. except ImportError:
  96. clipboard = init_osx_pbcopy_clipboard() # TODO
  97. else:
  98. clipboard = init_osx_pyobjc_clipboard()
  99.  
  100.  
  101. class TestGtk(_TestClipboard):
  102. if HAS_DISPLAY:
  103. try:
  104. import gtk
  105. except ImportError:
  106. pass
  107. else:
  108. clipboard = init_gtk_clipboard()
  109.  
  110.  
  111. class TestQt(_TestClipboard):
  112. if HAS_DISPLAY:
  113. try:
  114. import PyQt5
  115. except ImportError:
  116. try:
  117. import PyQt4
  118. except ImportError:
  119. pass
  120. else:
  121. clipboard = init_qt_clipboard()
  122. else:
  123. clipboard = init_qt_clipboard()
  124.  
  125.  
  126. class TestXClip(_TestClipboard):
  127. if _executable_exists("xclip"):
  128. clipboard = init_xclip_clipboard()
  129.  
  130.  
  131. class TestXSel(_TestClipboard):
  132. if _executable_exists("xsel"):
  133. clipboard = init_xsel_clipboard()
  134.  
  135.  
  136. class TestKlipper(_TestClipboard):
  137. if _executable_exists("klipper") and _executable_exists("qdbus"):
  138. clipboard = init_klipper_clipboard()
  139.  
  140.  
  141. class TestNoClipboard(unittest.TestCase):
  142. copy, paste = init_no_clipboard()
  143.  
  144. def test_copy(self):
  145. with self.assertRaises(RuntimeError):
  146. self.copy("foo")
  147.  
  148. def test_paste(self):
  149. with self.assertRaises(RuntimeError):
  150. self.paste()
  151.  
  152.  
  153. if __name__ == '__main__':
  154. unittest.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement