You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/desktopmagic/test/test_screengrab_win32.py

119 lines
3.6 KiB

from __future__ import print_function
import os
try:
# Needed for Python 2.6 compatibility
import unittest2 as unittest
except ImportError:
import unittest
import tempfile
from desktopmagic.screengrab_win32 import getDisplayRects, saveRectToBmp, getRectAsImage, GrabFailed
try:
# Pillow or PIL
from PIL import Image
except ImportError:
try:
# some old PIL installations
import Image
except ImportError:
Image = None
class GetDisplayRectsTest(unittest.TestCase):
"""
Tests for L{getDisplayRects}
"""
def test_getDisplayRectsReturnsList(self):
"""
L{getDisplayRects} returns a list of length >= 1 with a tuple containing 4 integers,
representing the geometry of each display.
"""
regions = getDisplayRects()
##print("Display rects are:", regions)
self.assertIsInstance(regions, list)
for region in regions:
self.assertIsInstance(region, tuple)
for num in region:
self.assertIsInstance(num, int)
def disabled_test_getDisplayRectsDoesNotLeak(self):
"""
Calling L{getDisplayRects} 100,000 times does not leak memory (you'll have to
open taskmgr to make sure.)
Disabled because Ivan manually confirmed that it does not leak.
"""
print("Open taskmgr.exe to make sure I'm not leaking memory right now.")
for i in xrange(100000):
getDisplayRects()
class RectTests(unittest.TestCase):
def _tryUnlink(self, fname):
try:
os.unlink(fname)
except OSError:
pass
def test_workingCase(self):
if not Image:
self.skipTest("No PIL or Pillow")
fname = tempfile.mktemp()
self.addCleanup(self._tryUnlink, fname)
saveRectToBmp(fname, rect=(0, 0, 200, 100))
with open(fname, "rb") as f:
im = Image.open(f)
self.assertEqual((200, 100), im.size)
def test_invalidRect(self):
fname = tempfile.mktemp()
self.addCleanup(self._tryUnlink, fname)
self.assertRaises(ValueError, lambda: saveRectToBmp(fname, rect=(100, 100, 100, 100)))
self.assertRaises(ValueError, lambda: saveRectToBmp(fname, rect=(100, 100, 99, 100)))
self.assertRaises(ValueError, lambda: saveRectToBmp(fname, rect=(100, 100, 100, 99)))
self.assertRaises(ValueError, lambda: saveRectToBmp(fname, rect=(100, 100, 100, None)))
self.assertRaises(ValueError, lambda: saveRectToBmp(fname, rect=(100, 100, "100", None)))
self.assertRaises(ValueError, lambda: saveRectToBmp(fname, rect=(100.0, 100, 101, 101)))
self.assertRaises(ValueError, lambda: saveRectToBmp(fname, rect=(100, 100, 101, 101.0)))
self.assertRaises(ValueError, lambda: saveRectToBmp(fname, rect=(100, 100, 200, 200, 200)))
self.assertRaises(TypeError, lambda: saveRectToBmp(fname, rect=None))
self.assertRaises(TypeError, lambda: getRectAsImage(rect=None))
def test_1x1SizeRect(self):
if not Image:
self.skipTest("No PIL or Pillow")
fname = tempfile.mktemp() + '.bmp'
fnamePng = tempfile.mktemp() + '.png'
self.addCleanup(self._tryUnlink, fname)
self.addCleanup(self._tryUnlink, fnamePng)
saveRectToBmp(fname, rect=(100, 100, 101, 101))
with open(fname, "rb") as f:
im = Image.open(f)
self.assertEqual((1, 1), im.size)
im = getRectAsImage(rect=(100, 100, 101, 101))
self.assertEqual((1, 1), im.size)
im.save(fnamePng, format='png')
with open(fnamePng, "rb") as f:
im = Image.open(f)
self.assertEqual((1, 1), im.size)
def test_rectTooBig(self):
fname = tempfile.mktemp()
self.addCleanup(self._tryUnlink, fname)
# Note that 26000x26000 is big enough to fail it on my system
self.assertRaises(GrabFailed, lambda: saveRectToBmp(fname, rect=(0, 0, 2600000, 2600000)))
self.assertRaises(GrabFailed, lambda: saveRectToBmp(fname, rect=(0, 0, 2600000, 260000000000000000)))