123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- # win32clipboardDemo.py
- #
- # Demo/test of the win32clipboard module.
-
- import win32con
- from pywin32_testutil import str2bytes # py3k-friendly helper
- from win32clipboard import *
-
- if not __debug__:
- print("WARNING: The test code in this module uses assert")
- print("This instance of Python has asserts disabled, so many tests will be skipped")
-
- cf_names = {}
- # Build map of CF_* constants to names.
- for name, val in list(win32con.__dict__.items()):
- if name[:3] == "CF_" and name != "CF_SCREENFONTS": # CF_SCREEN_FONTS==CF_TEXT!?!?
- cf_names[val] = name
-
-
- def TestEmptyClipboard():
- OpenClipboard()
- try:
- EmptyClipboard()
- assert (
- EnumClipboardFormats(0) == 0
- ), "Clipboard formats were available after emptying it!"
- finally:
- CloseClipboard()
-
-
- def TestText():
- OpenClipboard()
- try:
- text = "Hello from Python"
- text_bytes = str2bytes(text)
- SetClipboardText(text)
- got = GetClipboardData(win32con.CF_TEXT)
- # CF_TEXT always gives us 'bytes' back .
- assert got == text_bytes, "Didnt get the correct result back - '%r'." % (got,)
- finally:
- CloseClipboard()
-
- OpenClipboard()
- try:
- # CF_UNICODE text always gives unicode objects back.
- got = GetClipboardData(win32con.CF_UNICODETEXT)
- assert got == text, "Didnt get the correct result back - '%r'." % (got,)
- assert type(got) == str, "Didnt get the correct result back - '%r'." % (got,)
-
- # CF_OEMTEXT is a bytes-based format.
- got = GetClipboardData(win32con.CF_OEMTEXT)
- assert got == text_bytes, "Didnt get the correct result back - '%r'." % (got,)
-
- # Unicode tests
- EmptyClipboard()
- text = "Hello from Python unicode"
- text_bytes = str2bytes(text)
- # Now set the Unicode value
- SetClipboardData(win32con.CF_UNICODETEXT, text)
- # Get it in Unicode.
- got = GetClipboardData(win32con.CF_UNICODETEXT)
- assert got == text, "Didnt get the correct result back - '%r'." % (got,)
- assert type(got) == str, "Didnt get the correct result back - '%r'." % (got,)
-
- # Close and open the clipboard to ensure auto-conversions take place.
- finally:
- CloseClipboard()
-
- OpenClipboard()
- try:
- # Make sure I can still get the text as bytes
- got = GetClipboardData(win32con.CF_TEXT)
- assert got == text_bytes, "Didnt get the correct result back - '%r'." % (got,)
- # Make sure we get back the correct types.
- got = GetClipboardData(win32con.CF_UNICODETEXT)
- assert type(got) == str, "Didnt get the correct result back - '%r'." % (got,)
- got = GetClipboardData(win32con.CF_OEMTEXT)
- assert got == text_bytes, "Didnt get the correct result back - '%r'." % (got,)
- print("Clipboard text tests worked correctly")
- finally:
- CloseClipboard()
-
-
- def TestClipboardEnum():
- OpenClipboard()
- try:
- # Enumerate over the clipboard types
- enum = 0
- while 1:
- enum = EnumClipboardFormats(enum)
- if enum == 0:
- break
- assert IsClipboardFormatAvailable(
- enum
- ), "Have format, but clipboard says it is not available!"
- n = cf_names.get(enum, "")
- if not n:
- try:
- n = GetClipboardFormatName(enum)
- except error:
- n = "unknown (%s)" % (enum,)
-
- print("Have format", n)
- print("Clipboard enumerator tests worked correctly")
- finally:
- CloseClipboard()
-
-
- class Foo:
- def __init__(self, **kw):
- self.__dict__.update(kw)
-
- def __cmp__(self, other):
- return cmp(self.__dict__, other.__dict__)
-
- def __eq__(self, other):
- return self.__dict__ == other.__dict__
-
-
- def TestCustomFormat():
- OpenClipboard()
- try:
- # Just for the fun of it pickle Python objects through the clipboard
- fmt = RegisterClipboardFormat("Python Pickle Format")
- import pickle
-
- pickled_object = Foo(a=1, b=2, Hi=3)
- SetClipboardData(fmt, pickle.dumps(pickled_object))
- # Now read it back.
- data = GetClipboardData(fmt)
- loaded_object = pickle.loads(data)
- assert pickle.loads(data) == pickled_object, "Didnt get the correct data!"
-
- print("Clipboard custom format tests worked correctly")
- finally:
- CloseClipboard()
-
-
- if __name__ == "__main__":
- TestEmptyClipboard()
- TestText()
- TestCustomFormat()
- TestClipboardEnum()
- # And leave it empty at the end!
- TestEmptyClipboard()
|