Sztuczna_Inteligencja/venv/Lib/site-packages/pygame/tests/scrap_test.py
2019-04-10 09:31:09 +01:00

254 lines
8.3 KiB
Python

import os
if os.environ.get('SDL_VIDEODRIVER') == 'dummy':
__tags__ = ('ignore', 'subprocess_ignore')
if __name__ == '__main__':
import sys
pkg_dir = os.path.split(os.path.abspath(__file__))[0]
parent_dir, pkg_name = os.path.split(pkg_dir)
is_pygame_pkg = (pkg_name == 'tests' and
os.path.split(parent_dir)[1] == 'pygame')
if not is_pygame_pkg:
sys.path.insert(0, parent_dir)
else:
is_pygame_pkg = __name__.startswith('pygame.tests.')
import unittest
if is_pygame_pkg:
from pygame.tests.test_utils import trunk_relative_path
else:
from test.test_utils import trunk_relative_path
import pygame
from pygame import scrap
from pygame.compat import as_bytes
import sys
class ScrapModuleTest(unittest.TestCase):
not_initialized = True
def setUp(self):
if self.not_initialized:
pygame.init ()
pygame.display.set_mode ((1, 1))
scrap.init ()
self.not_initialized = False
def todo_test_contains(self):
# __doc__ (as of 2008-08-02) for pygame.scrap.contains:
# scrap.contains (type) -> bool
# Checks, whether a certain type is available in the clipboard.
#
# Returns True, if data for the passed type is available in the
# clipboard, False otherwise.
#
# if pygame.scrap.contains (SCRAP_TEXT):
# print "There is text in the clipboard."
# if pygame.scrap.contains ("own_data_type"):
# print "There is stuff in the clipboard."
self.fail()
def todo_test_get(self):
# __doc__ (as of 2008-08-02) for pygame.scrap.get:
# scrap.get (type) -> string
# Gets the data for the specified type from the clipboard.
#
# Returns the data for the specified type from the clipboard. The data
# is returned as string and might need further processing. If no data
# for the passed type is available, None is returned.
#
# text = pygame.scrap.get (SCRAP_TEXT)
# if text:
# # Do stuff with it.
# else:
# print "There does not seem to be text in the clipboard."
self.fail()
def todo_test_get_types(self):
# __doc__ (as of 2008-08-02) for pygame.scrap.get_types:
# scrap.get_types () -> list
# Gets a list of the available clipboard types.
#
# Gets a list of strings with the identifiers for the available
# clipboard types. Each identifier can be used in the scrap.get()
# method to get the clipboard content of the specific type. If there
# is no data in the clipboard, an empty list is returned.
#
# types = pygame.scrap.get_types ()
# for t in types:
# if "text" in t:
# # There is some content with the word "text" in it. It's
# # possibly text, so print it.
# print pygame.scrap.get (t)
self.fail()
def todo_test_init(self):
# __doc__ (as of 2008-08-02) for pygame.scrap.init:
# scrap.init () -> None
# Initializes the scrap module.
#
# Tries to initialize the scrap module and raises an exception, if it
# fails. Note that this module requires a set display surface, so you
# have to make sure, you acquired one earlier using
# pygame.display.set_mode().
#
self.fail()
def todo_test_lost(self):
# __doc__ (as of 2008-08-02) for pygame.scrap.lost:
# scrap.lost() -> bool
# Checks whether the clipboard is currently owned by the application.
#
# Returns True, if the clipboard is currently owned by the pygame
# application, False otherwise.
#
# if pygame.scrap.lost ():
# print "No content from me anymore. The clipboard is used by someone else."
self.fail()
def test_set_mode (self):
scrap.set_mode (pygame.SCRAP_SELECTION)
scrap.set_mode (pygame.SCRAP_CLIPBOARD)
self.assertRaises (ValueError, scrap.set_mode, 1099)
def test_scrap_put_text (self):
scrap.put (pygame.SCRAP_TEXT, as_bytes("Hello world"))
self.assertEquals (scrap.get (pygame.SCRAP_TEXT),
as_bytes("Hello world"))
scrap.put (pygame.SCRAP_TEXT, as_bytes("Another String"))
self.assertEquals (scrap.get (pygame.SCRAP_TEXT),
as_bytes("Another String"))
def test_scrap_put_image (self):
if 'pygame.image' not in sys.modules:
return
sf = pygame.image.load (
trunk_relative_path("examples/data/asprite.bmp")
)
string = pygame.image.tostring (sf, "RGBA")
scrap.put (pygame.SCRAP_BMP, string)
self.assertEquals (scrap.get(pygame.SCRAP_BMP), string)
def test_put (self):
scrap.put ("arbitrary buffer", as_bytes("buf"))
r = scrap.get ("arbitrary buffer")
self.assertEquals (r, as_bytes("buf"))
class X11InteractiveTest(unittest.TestCase):
__tags__ = ['ignore', 'subprocess_ignore']
try:
pygame.display.init()
except Exception:
pass
else:
if pygame.display.get_driver() == 'x11':
__tags__ = ['interactive']
pygame.display.quit()
def test_issue_208(self):
"""PATCH: pygame.scrap on X11, fix copying into PRIMARY selection
Copying into theX11 PRIMARY selection (mouse copy/paste) would not
work due to a confusion between content type and clipboard type.
"""
from pygame import display, event, freetype
from pygame.locals import SCRAP_SELECTION, SCRAP_TEXT
from pygame.locals import KEYDOWN, K_y, QUIT
success = False
freetype.init()
font = freetype.Font(None, 24)
display.init()
display.set_caption("Interactive X11 Paste Test")
screen = display.set_mode((600, 200))
screen.fill(pygame.Color('white'))
text = "Scrap put() succeeded."
msg = ('Some text has been placed into the X11 clipboard.'
' Please click the center mouse button in an open'
' text window to retrieve it.'
'\n\nDid you get "{}"? (y/n)').format(text)
word_wrap(screen, msg, font, 6)
display.flip()
event.pump()
scrap.init()
scrap.set_mode(SCRAP_SELECTION)
scrap.put(SCRAP_TEXT, text.encode('UTF-8'))
while True:
e = event.wait()
if e.type == QUIT:
break
if e.type == KEYDOWN:
success = (e.key == K_y)
break
pygame.display.quit()
self.assertTrue(success)
def word_wrap(surf, text, font, margin=0, color=(0, 0, 0)):
font.origin = True
surf_width, surf_height = surf.get_size()
width = surf_width - 2 * margin
height = surf_height - 2 * margin
line_spacing = int(1.25 * font.get_sized_height())
x, y = margin, margin + line_spacing
space = font.get_rect(' ')
for word in iwords(text):
if word == '\n':
x, y = margin, y + line_spacing
else:
bounds = font.get_rect(word)
if x + bounds.width + bounds.x >= width:
x, y = margin, y + line_spacing
if x + bounds.width + bounds.x >= width:
raise ValueError("word too wide for the surface")
if y + bounds.height - bounds.y >= height:
raise ValueError("text to long for the surface")
font.render_to(surf, (x, y), None, color)
x += bounds.width + space.width
return x, y
def iwords(text):
# r"\n|[^ ]+"
#
head = 0
tail = head
end = len(text)
while head < end:
if text[head] == ' ':
head += 1
tail = head + 1
elif text[head] == '\n':
head += 1
yield '\n'
tail = head + 1
elif tail == end:
yield text[head:]
head = end
elif text[tail] == '\n':
yield text[head:tail]
head = tail
elif text[tail] == ' ':
yield text[head:tail]
head = tail
else:
tail += 1
if __name__ == '__main__':
unittest.main()